4.8.3.63. GETCURRENTENTITYNAME
The GetCurrentEntityName subroutine returns a point value of the current entity name when it is invoked.
Language type |
Subroutine |
FORTRAN |
call GetCurrentEntityName(name, npar, error) |
C/C++ |
GetCurrentEntityName(name, &npar, &error) |
Variable Name |
Size |
Description |
name |
char[256] |
The array for entity name when it is invoked |
npar |
int |
The number of character in name array. |
Errflg |
int |
Error flag.
If the result of this argument is -1
(means TRUE in Fortran logical value),
there is no error.
The others mean that there is an error.
|
This function can get a name of the entity calling the current USUB DLL. The user can perform differently for each entity.
C---- SUB. AXIAL_FORCE : AXIAL(TRA,ROT)
SUBROUTINE AXIAL_FORCE
& (TIME,UPAR,NPAR,JFLAG,IFLAG,RESULT)
C---- TO EXPORT * SUBROUTINE
!DEC$ ATTRIBUTES DLLEXPORT,C::AXIAL_FORCE
C---- INCLUDE SYSTEM CALL
INCLUDE 'SYSCAL.F'
C---- DEFINE VARIABLES
C Parameter Information
C time: Simulation time of RD/Solver
C upar: Parameters defined by user
C npar: Number of user parameters
C jflag: When RD/Solver evaluates a Jacobian, the flag is true.
C iflag: When RD/Solver initializes arrays, the flag is true.
C result: Returned value
DOUBLE PRECISION TIME, UPAR(*)
INTEGER NPAR
LOGICAL JFLAG, IFLAG
DOUBLE PRECISION RESULT[REFERENCE]
C---- USER STATEMENT
C---- LOCAL VARIABLE DEFINITIONS
INTEGER MKID(3), ID
DOUBLE PRECISION DISP, VALUE(1)
LOGICAL ERRFLG
integer convergenceFlag,finish,nName,err2flg
double precision stepsize
character sName*256
call GETCURRENTENTITYNAME(sName,nName, ERRFLG)
VALUE(1) = 0.0d0
if ( sName(:6).eq.'Axial1' ) then
C------- ASSIGN IMPACT PARAMETERS
MKID(1) = INT(UPAR(1))
MKID(2) = INT(UPAR(2))
MKID(3) = INT(UPAR(3))
ID = INT(UPAR(4))
C------- CALL AUXILIARY SUBROUTINES FOR CALCULATIONS
CALL SYSFNC('DX', MKID, 3, DISP, ERRFLG)
CALL RD_AKISPL(DISP, 0, ID, 0, VALUE(1), ERRFLG)
endif
C---- ASSIGN THE RETURNED VALUE
RESULT = VALUE(1)
RETURN
END
#include "stdafx.h"
#include "DllFunc.h"
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
RecurDynUserSubRoutinewizard1_API void __cdecl axial_force
(double time, double upar[], int npar, int jflag, int iflag, double* result)
{
using namespace rd_syscall;
// Parameter Information
// time: Simulation time of RD/Solver
// upar: Parameters defined by user
// npar: Number of user parameters
// jflag: When RD/Solver evaluates a Jacobian, the flag is true.
// iflag: When RD/Solver initializes arrays, the flag is true.
// result: Returned value
// User statement
// Local Varialbe Definition
int mkid[3], errflg, akispl_id;
double disp, value[3], stepsize, ucf;
int finish, convergenceFlag;
char sName[256];
int nName;
int idDLL;
getcurrententityname(sName,&nName,&errflg);
// Assign Impact Parameters
mkid[0] = (int) upar[0];
mkid[1] = (int) upar[1];
mkid[2] = (int) upar[2];
akispl_id = (int) upar[3];
if( strncmp(sName,"Axial1",nName) == 0)
{
sysfnc("DX", mkid, 3, &disp, &errflg);
rd_akispl(disp, 0, akispl_id, 0, value, &errflg);
}
else
{
sysfnc("DY", mkid, 3, &disp, &errflg);
rd_akispl(disp, 0, akispl_id, 0, value, &errflg);
}
// Assign the Returned Value
*result = value[0];
}