4.8.3.63. GETCURRENTENTITYNAME

The GetCurrentEntityName subroutine returns a point value of the current entity name when it is invoked.

Table 4.171 Function Name

Language type

Subroutine

FORTRAN

call GetCurrentEntityName(name, npar, error)

C/C++

GetCurrentEntityName(name, &npar, &error)

Table 4.172 Parameter information

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.

Listing 4.83 Fortran code for GETCURRENTENTITYNAME
 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
Listing 4.84 C/C++ code for GETCURRENTENTITYNAME
 #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];
 }