You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

3 Development of C++ codes

1.1. 3.1 Function syntax

void name ( <in/out arguments list> [,code_parameters] [,diagnostic_info] )

  • name - function name
  • code_parameters - optional - user defined input parameters
  • diagnostic_info -  arbitrary output diagnostic information

1.2. 3.2 Arguments list

  • in/out arguments list
  •  mandatory
  • a list of input and output function arguments including:
    • CPP intrisic data types, eg:
      • int &x
      • double &y
    • IDSes, eg:
      • ItmNs::Itm::antennas & ant
      • ItmNs::Itm::equilibriumArray & eq

1.3. 3.3 Code parameters

  • Optional
  • User defined input parameters
  • Argument of type: ItmNs::codeparam_t &

    typedef struct {
            char **parameters;
            char **default_param;
            char **schema;
        } codeparam_t;

     

     
  • A structure codeparam_t describes:
    • parameters - Actual value of the code parameters (instance of coparam/parameters in XML format).
    • default_param - Default value of the code parameters (instance of coparam/parameters in XML format).
    • schema - Code parameters schema.
  • An example: ItmNs::codeparam_t & codeparam

1.4. 3.4 Diagnostic info

  • arbitrary output diagnostic information
  • output / optional

     void name(...., int* output_flag, char** diagnostic_info)
  • output_flag - indicates if user subroutine was successfully executed

    • output_flag = 0  - SUCCESS, no action is taken

    • output_flag > 0  - WARNING, a warning message is displayed, workflow continuue execution

    • output_flag < 0  - ERROR, actor throws an exception, workflow stops

  • diagnostic_info - an arbitrary string

Required header

Do not forget to add #include "UALClasses.h" while playing with IDSes!

 

 

1.5. 3.5 Examples

 

 

Example 4. Simple in/out argument types
void simplecppactornoids(double &x, double &y)
Example 5. A IDS array as a function argument
void simplecppactor(ItmNs::Itm::equilibrium &eq, double &x, double &y)
Example 6. Usage of init function and code input parameters
void mycppfunctionbis_init();

void mycppfunction(ItmNs::Itm::summary& sum, ItmNs::Itm::equilibrium& eq, int& x, ItmNs::Itm::coreimpur& cor,  double&  y, ItmNs::codeparam_t& codeparam)

Initialization

If user function needs any pre-initialization, an additional function <name>_init could be defined.

 

2. 4. Delivery of the user code

The user code should be delivered as a static library.
Please find examples of the simple "makefiles" below:


 
Example 6. Building of Fortran code
F90 = $(ITM_INTEL_FC)
COPTS = -g -O0 -assume no2underscore -fPIC -shared-intel

INCLUDES = $(shell eval-pkg-config --cflags ual-$(ITM_INTEL_OBJECTCODE))

all: equilibrium2distsource.o libequilibrium2distsource

libequilibrium2distsource: equilibrium2distsource.o
        ar -rvs libequilibrium2distsource.a equilibrium2distsource.o

equilibrium2distsource.o: equilibrium2distsource.f90
        $(F90) $(COPTS) -c -o $@ $^ ${INCLUDES} 

clean:
        rm -f *.o *.a
Example 7. Building of C++ code
CXX=g++
CXXFLAGS= -g -fPIC
CXXINCLUDES= ${shell eval-pkg-config --cflags ual-cpp-gnu}

all: libsimplecppactor.a

libsimplecppactor.a: simplecppactor.o
        ar -rvs $@ $^

simplecppactor.o: simplecppactor.cpp
        $(CXX) $(CXXFLAGS) $(CXXINCLUDES) -c -o $@ $^

clean:
        rm *.a *.o
  • No labels