4.8.3.68. GETSTRING
The GetString subroutine returns a pointer of the parametric string, in the character type, which corresponds to the ID of string.
Language type |
Subroutine |
FORTRAN |
GetString(IDstring, string, nstring, error) |
C/C++ |
GetString(IDstring, string, &nstring, &error) |
The user can perform differently for each entity.
Variable Name |
Size |
Description |
IDstring |
int |
The input variable, the RMD id of string entity have to be set. |
string |
char |
The output variable, the string value is returned according to the RMD id of string entity. |
nstring |
int |
The input variable, the nstring have to be set with the size of string. |
error |
int |
The output variable, if there is value for this string, this value is set with “TRUE”. |
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
implicit none
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
COMMON /Axial_Force_String/ fInitial
integer fInitial(2),nString(2)
!character*256 pString(2),FileName(2)
character*(256) pString(2)
character*(256) FileName
integer finish,idFile(2),iString,szString
C---- ASSIGN IMPACT PARAMETERS
MKID(1) = INT(UPAR(1))
MKID(2) = INT(UPAR(2))
MKID(3) = INT(UPAR(3))
ID = INT(UPAR(4))
iString = INT(UPAR(5))
idFile(iString) = 800+iString
call getfinishflag( finish )
if(fInitial(iString) .eq. 0)then
fInitial(iString) = 1
call getstringlength(iString,nString(iString),ERRFLG)
szString = nString(iString)
!allocate(pString(iString)(1:nString(iString)))
call getstring
& (iString,pString(iString),nString(iString),ERRFLG)
FileName =
& pString(iString)(1:(szString-1))//'.txt'//char(0)
open(idFile(iString),file=trim(FileName),MODE='WRITE')
endif
if(fInitial(iString) .eq. 1)then
call getstring
& (iString,pString(iString),nString(iString),errflg)
write(idFile(iString),*) pString(iString)
endif
C---- CALL AUXILIARY SUBROUTINES FOR CALCULATIONS
CALL SYSFNC('DX', MKID, 3, DISP, ERRFLG)
CALL RD_AKISPL(DISP, 0, ID, 0, VALUE(1), ERRFLG)
C---- ASSIGN THE RETURNED VALUE
RESULT = VALUE(1)
if(finish .eq. 1) then
!deallocate(pString(iString))
close(idFile(iString))
endif
RETURN
END
#include "stdafx.h"
#include "DllFunc.h"
#include <stdio.h>
#include <stdlib.h>
int fCloseProgram = 0;
int fInitial[2] = { 1, 1 };
int nString[2] = { 0 };
char* pString[2];
FILE* pFileOutput[2];
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;
int finish, convergenceFlag;
char sName[256];
int nName;
int iString;
int szTCHAR;
unsigned long long szAllocated;
int err = 0;
char FileName[256][2];
if( fCloseProgram == 1)
{
return;
}
getcurrententityname(sName,&nName,&errflg);
getstepsize( &stepsize );
getfinishflag( &finish );
getconvergenceflag( &convergenceFlag);
// Assign Impact Parameters
mkid[0] = (int) upar[0];
mkid[1] = (int) upar[1];
mkid[2] = (int) upar[2];
akispl_id = (int) upar[3];
iString= (int) upar[4];; // 0 or 1
if(fInitial[iString] == 1)
{
fInitial[iString] = 0;
getstringlength(iString,&nString[iString],&errflg);
szTCHAR = sizeof(char);
szAllocated = (unsigned long long)nString[iString]*szTCHAR;
pString[iString] = (char*)malloc(szAllocated);
getstring(iString,pString[iString],&nString[iString],&errflg);
sprintf_s( FileName[iString], 255 ,"%s.txt",pString[iString]);
err = fopen_s(&pFileOutput[iString], FileName[iString], "w");
}
if(finish == 1)
{
fCloseProgram = 1;
free(pString[iString]);
fclose(pFileOutput[iString]);
}
else
{
getstring(iString,pString[iString],&nString[iString],&errflg);
fprintf(pFileOutput[iString],"%s\n",pString[iString]);
}
if(convergenceFlag == 1)
{
convergenceFlag = 0;
}
if( strncmp(sName,"Axial1",nName) == 0)
{
// Call the Auxiliary subroutines for Calculation
sysfnc("DX", mkid, 3, &disp, &errflg);
rd_akispl(disp, 0, akispl_id, 0, value, &errflg);
}
else
{
// Call the Auxiliary subroutines for Calculation
sysfnc("DY", mkid, 3, &disp, &errflg);
rd_akispl(disp, 0, akispl_id, 0, value, &errflg);
}
// Assign the Returned Value
*result = value[0];
}