4.8.2.10. REQUEST
This subroutine defines a user - defined request.
Language type |
Subroutine |
FORTRAN |
request_usub (time,upar,npar,,iflag,result) |
C/C++ |
request_usub (double time, double upar[], int npar, int iflag, double result[8]) |
Variable Name |
Size |
Description |
time |
double |
Current simulation time of RecurDyn/Solver. |
upar |
double * |
Parameters defined by the user. There is no limit about the maximum size of array. |
npar |
int |
Number of user parameters. |
iflag |
int |
When RecurDyn/Solver makes its initial call to this routine, the flag is true. Otherwise, the flag is false. |
result |
double[8] |
Returned value and eight-dimensional variable. RecurDyn/Solver reports only six variables (result(2~4) and result(6~8)) of eight returned variables. |
Example
Note
If the user wants to run this model using a user subroutine, the user can refer it in the directory (<install dir>\Help\usub\**).
C---- SUB. REQUEST
SUBROUTINE REQUEST_USUB
& (TIME,UPAR,NPAR,IFLAG,RESULT)
C---- TO EXPORT * SUBROUTINE
!DEC$ ATTRIBUTES DLLEXPORT,C::REQUEST_USUB
C---- INCLUDE SYSTEM CALL
INCLUDE 'SYSCAL.F'
C---- DEFINE VARIABLES
C Parameter Information
C TIME : Simulation time of RD/Solver. (Input)
C UPAR : Parameters defined by user. (Input)
C NPAR : Number of user parameters. (Input)
C IFLAG : When RD/Solver initializes arrays, the flag is true. (Input)
C RESULT : Returned values. (Output, Size : 8)
DOUBLE PRECISION TIME, UPAR(*)
INTEGER NPAR
LOGICAL IFLAG
DOUBLE PRECISION RESULT[REFERENCE](8)
C---- USER STATEMENT
DOUBLE PRECISION DX, DY, DZ, AX, AY, AZ
INTEGER MKID(2), i
LOGICAL ERRFLG
MKID(1) = INT(UPAR(1))
MKID(2) = INT(UPAR(2))
do i = 1, 8
RESULT(i) = 0.0
enddo
call sysfnc('DX', MKID, 2, DX, ERRFLG)
call sysfnc('DY', MKID, 2, DY, ERRFLG)
call sysfnc('DZ', MKID, 2, DZ, ERRFLG)
call sysfnc('AX', MKID, 2, AX, ERRFLG)
call sysfnc('AY', MKID, 2, AY, ERRFLG)
call sysfnc('AZ', MKID, 2, AZ, ERRFLG)
RESULT(2) = DX
RESULT(3) = DY
RESULT(4) = DZ
RESULT(6) = AX
RESULT(7) = AY
RESULT(8) = AZ
RETURN
END
#include "stdafx.h"
#include "DllFunc.h"
Request_API void __cdecl request_usub
(double time, double upar[], int npar, int iflag, double result[8])
{
using namespace rd_syscall;
// Parameter Information
// time : Simulation time of RD/Solver. (Input)
// upar : Parameters defined by user. (Input)
// npar : Number of user parameters. (Input)
// iflag : When RD/Solver initializes arrays, the flag is true. (Input)
// result : Returned values. (Output, Size : 8)
// User Statement
double DX, DY, DZ, AX, AY, AZ;
int mid[2], ERRFLG, i;
mid[0] = (int)upar[0];
mid[1] = (int)upar[1];
for(i=0;i<8;i++){
result[i] = 0.0;
}
sysfnc("DX",mid,2,&DX,&ERRFLG);
sysfnc("DY",mid,2,&DY,&ERRFLG);
sysfnc("DZ",mid,2,&DZ,&ERRFLG);
sysfnc("AX",mid,2,&AX,&ERRFLG);
sysfnc("AY",mid,2,&AY,&ERRFLG);
sysfnc("AZ",mid,2,&AZ,&ERRFLG);
result[1] = DX;
result[2] = DY;
result[3] = DZ;
result[5] = AX;
result[6] = AY;
result[7] = AZ;
}