...
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
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
- CPP intrisic data types, eg:
3.3 Code parameters
- Optional
- User defined input parameters
Argument of type: ItmNs::codeparam_t &
Code Block language cpp 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
3.4 Diagnostic info
- arbitrary output diagnostic information
output / optional
Code Block language cpp void name(...., int* output_flag, char** diagnostic_info)
output_flag
- indicates if user subroutine was successfully executedoutput_flag = 0
- SUCCESS, no action is taken
- WARNING, a warning message is displayed, workflow continuue executionoutput_flag
> 0
- ERROR, actor throws an exception, workflow stopsoutput_flag
< 0
diagnostic_info
- an arbitrary string
Warning |
---|
Required header Do not forget to add #include "UALClasses.h" while playing with IDSes! |
3.5 Examples
Code Block | ||||
---|---|---|---|---|
| ||||
void simplecppactornoids(double &x, double &y) |
Code Block | ||||
---|---|---|---|---|
| ||||
void simplecppactor(ItmNs::Itm::equilibrium &eq, double &x, double &y) |
Code Block | ||||
---|---|---|---|---|
| ||||
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) |
Info |
---|
Initialization If user function needs any pre-initialization, an additional function <name>_init could be defined. |
4. Delivery of the user code
The user code should be delivered as a static library.
Please find examples of the simple "makefiles" below:
Code Block | ||||
---|---|---|---|---|
| ||||
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 |
Code Block | ||
---|---|---|
| ||
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 |