4.8.3.99. SHF

Table 4.243 Function Name

Language type

Subroutine

FORTRAN

call rd_shf(x, x0, a, w, phi, b, order, value, errflg) or shf(x, x0, a, w, phi, b, order, value, errflg)

C/C++

rd_shf(x, x0, a, w, phi, b, order, &value, &errflg) or shf(x, x0, a, w, phi, b, order, &value, &errflg)

Table 4.244 Parameter information

Variable Name

Size

Description

x

double

Independent variable in the function.

x0

double

Offset in the independent variable x.

a

double

Amplitude of the harmonic function.

\((\omega )\)

  • double*

The frequency of the harmonic function.

\((\Phi )\)

  • double*

Phase shift in the harmonic function.

b

double

Average displacement of the harmonic function.

order

int

  1. order = 0

    \(value=a\sin (\omega (x-{{x}_{0}})-\Phi )+b\)

  2. order = 1

    \(value=a\omega \cos (\omega (x-{{x}_{0}})-\Phi )\)

  3. order = 2

    \(value=-a{{\omega }^{2}}\sin (\omega (x-{{x}_{0}})-\Phi )\)

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.108 Fortran code for SHF
 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 OFFSET, AMP, OMEGA, PHI, AVERAGE
       DOUBLE PRECISION VALUE
       INTEGER ORDER
       LOGICAL ERRFLG

 C---- ASSIGN IMPACT PARAMETER
       OFFSET   = UPAR(1)
       AMP      = UPAR(2)
       OMEGA    = UPAR(3)
       PHI      = UPAR(4)
       AVERAGER = UPAR(5)
       ORDER    = (INT)UPAR(6)

 C---- CALL THE SHF TO COLLECT INFORMATION FOR CALCULATION
       CALL RD_SHF(TIME,OFFSET,AMP,OMEGA,PHI,AVERAGE,ORDER,VALUE,ERRFLG)
       RESULT = VALUE

       RETURN
       END
Listing 4.109 C/C++ code for SHF
 #include "stdafx.h"
 #include "DllFunc.h"

 SHF_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 Definitions
   double offset, amp, omega, phi, average;
   double value;
   int order, errflg;

   // Assign Impact Parameter
   offset   = upar[0];
   amp      = upar[1];
   omega    = upar[2];
   phi      = upar[3];
   average = upar[4];
   order    = (int)upar[5];

   //call the SHF to collect Information for Calculation
   rd_shf(time, offset, amp, omega, phi, average, order, &value, &errflg);

   // Return the Value
   *result = value;
 }