C/C++ example for AKISPL

 

#include "stdafx.h"

#include "DllFunc.h"

 

Akispl_C_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 result_order0 = 0.0;

   double result_order1 = 0.0;

   double result_order2 = 0.0;

   int splineID;

   int iorder = 0;

   int iflagTest = 0;

   int ERRFLG = 0;

   int errorID = 0;

 

   // Assign Parameters

   splineID = (int)upar[0];

   iorder = (int)upar[1];

   iflagTest = (int)upar[2];

 

   // Call RD_AKISPL to collect information for calculations

   if (iflagTest)

   {

      rd_akispl(time,0,splineID,0,&result_order0,&ERRFLG);

      errorID = 1000;

      errmes(ERRFLG,"Error : order 0",errorID,"AKISPL");

 

      rd_akispl(time,0,splineID,1,&result_order1,&ERRFLG);

      errorID = 1001;

      errmes(ERRFLG,"Error : order 1",errorID,"AKISPL");

 

      rd_akispl(time,0,splineID,2,&result_order2,&ERRFLG);

      errorID = 1002;

      errmes(ERRFLG,"Error : order 2",errorID,"AKISPL");

 

      // Assign the returned value to User Subroutine

      if (iorder == 0)

      {

         *result = result_order0;

      }

      else if (iorder == 1)

      {

         *result = result_order1;

      }

      else if (iorder ==2)

      {

         *result = result_order2;

      }

   }

   else

   {

      // Assign the returned value to User Subroutine

      rd_akispl(time,0,splineID,iorder,result,&ERRFLG);

      errorID = 2000;

      errmes(ERRFLG,"Error : order",errorID,"AKISPL");

   }

 

}