4.8.3.93. POLY

Table 4.231 Function Name

Language type

Subroutine

FORTRAN

call rd_poly(x, x0, upar, npar, order, value, errflg) or poly(x, x0, upar, npar, order, value, errflg)

C/C++

rd_poly(x, x0, upar, npar, order, &value, &errflg) or poly(x, x0, upar, npar, order, &value, &errflg)

Table 4.232 Parameter information

Variable Name

Size

Description

x

double

The input variable for the defined polynomial function.

x0

double

The starting point of the polynomial function The starting point of the polynomial function.

upar

double*

Argument list array.

npar

int

Number of arguments in the argument list array.

order

int

  1. order = 0

    \(value=\sum\limits_{j=1}^{npar}{upar(j)\times {{(x-{{x}_{0}})}^{(j-1)}}}\)

  2. order = 1

    \(value=\sum\limits_{j=1}^{npar-1}{j\times upar(j+1)\times {{(x-{{x}_{0}})}^{(j-1)}}}\)

  3. order = 2

    \(value=\sum\limits_{j=1}^{npar-1}{j\times (j+1)\times upar(j+2)\times {{(x-{{x}_{0}})}^{(j-1)}}}\)

value

double

errflg

logical

If an error is encountered in invoking Predefined subroutine, this variable becomes true. This variable must be declared as a logical variable.

Listing 4.100 Fortran code for POLY
 C---- SUB. MOTION_USUB
       SUBROUTINE MOTION_USUB
     &          (TIME,UPAR,NPAR,IORD,IFLAG,RESULT)
 C---- TO EXPORT * SUBROUTINE
       !DEC$ ATTRIBUTES DLLEXPORT,C::MOTION_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     IORD   : Integrator order. (Input)
 C     IFLAG  : When RD/Solver initializes arrays, the flag is true. (Input)
 C     RESULT : Returned value. (Output)

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

 C---- USER STATEMENT
 c---- LOCAL VARIABLE DEFINITIONS
       DOUBLE PRECISION VALUE,MKID(6)
       LOGICAL ERRFLG

 C---- ASSIGN IMPACT PARAMETERS
       DO I = 1, 6
         MKID(I) = UPAR(I)
       ENDDO

 C---- CALL RD_POLY TO COLLECT INFORMATION FOR CALCULATIONS
       CALL RD_POLY(TIME, 0,5D0, MKID, 6, 0, VALUE, ERRFLG)

 C---- ASSIGN THE RETURNED VALUE TO USER SUBROUTINE
       RESULT = VALUE

       RETURN
       END
Listing 4.101 C/C++ code for POLY
 #include "stdafx.h"
 #include "DllFunc.h"

 POLY_API void __cdecl motion_usub
   (double time, double upar[], int npar, int iord, 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)
   //   iord    :  Integrator order. (Input)
   //   iflag   :  When RD/Solver initializes arrays, the flag is true. (Input)
   //   result  :  Returned value. (Output)

   // User Statement
   // Local Variable Definition
   double value,mkid[6];
   int errflg,i;

   //Assign Impact Parameters
   for(i=0;i<6;i++){
       mkid[i] = upar[i];
   }

   //call RD_POLY to collect information for Calculations
   rd_poly(time,0.5,mkid,6,0,&value,&errflg);

   //Assign the returned value to user subroutine
   *result = value;
 }