4.8.2.17. VARIABLE_EQUATION

This subroutine defines a user - defined variable.

Table 4.45 Function Name

Language type

Subroutine

FORTRAN

variable_usub (time,upar,npar,jflag,iflag,result)

C/C++

variable_usub (double time, double upar[], int npar, int jflag, int iflag, double result)

Table 4.46 Parameter information

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.

jflag

int

When RecurDyn/Solver evaluates Jacobian, the flag is true. Otherwise, the flag is false.

iflag

int

When RecurDyn/Solver makes its initial call to this routine, the flag is true. Otherwise, the flag is false

result

double

Returned value and one-dimensional variable

Example

../_images/image332.gif

Figure 4.120 Example Model using Variable Equation User Subroutine

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\**).

Listing 4.32 Fortran code for Variable Equation
 C---- SUB. VARIABLE
       SUBROUTINE VARIABLE_USUB
     &          (TIME,UPAR,NPAR,JFLAG,IFLAG,RESULT)
 C---- TO EXPORT * SUBROUTINE
       !DEC$ ATTRIBUTES DLLEXPORT,C::VARIABLE_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     JFLAG  : When RD/Solver evaluates a Jacobian, the flag is true. (Input)
 C     IFLAG  : When RD/Solver initializes arrays, the flag is true. (Input)
 C     RESULT : Returned value. (Output)

       DOUBLE PRECISION TIME, UPAR(*)
       INTEGER NPAR
       LOGICAL JFLAG, IFLAG
       DOUBLE PRECISION RESULT[REFERENCE]

 C---- USER STATEMENT
       DOUBLE PRECISION VALUE, VELO, STIME
       INTEGER IORD
       LOGICAL ERRFLG

       STIME = 1.0D0
       VELO = 74.0D0
       IORD = 0

       CALL RD_STEP5(TIME,0.0D0,0.0D0,STIME,VELO,IORD,VALUE,ERRFLG)

       RESULT = VALUE

       RETURN
       END
Listing 4.33 C/C++ code for Variable Equation
 #include "stdafx.h"
 #include "DllFunc.h"

 Variable_API void __cdecl variable_usub
   (double time, double upar[], int npar, int jflag, int iflag, double* result)
 {
   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)
   //   jflag  : When RD/Solver evaluates a Jacobian, the flag is true. (Input)
   //   iflag  : When RD/Solver initializes arrays, the flag is true. (Input)
   //   result : Returned value. (Output)

   // User Statement
   double value, velo, stime;
   int iord, errflg;

   stime = 1.0;
   velo = 74.0;
   iord = 0;

   rd_step5(time,0.0,0.0,stime,velo,iord,&value,&errflg);

   *result = value;
 }