Table of Contents |
---|
4.2.1 Changes
CHEAT SHEET | |
ITM | IMAS |
---|---|
#include "UALClasses.h" | #include "UALClasses.h" |
ItmNs::Itm::<cpo> cpo; | IdsNs::IDS::<ids> ids; |
ItmNs::Itm::<cpo>Array cpoArray; <= Array! | IdsNs::IDS::<ids> ids; <= Single obj ! |
ItmNs::codeparam_t & codeparam | IdsNs::codeparam_t & codeparam |
eval-pkg-config | pkg-config |
eval-pkg-config --cflags --libs ual-cpp-gnu | pkg-config --cflags --libs imas-cpp |
4.2.2 Examples
Examples of interface between wrapper and user code | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
1. What code wrapper actually does?
The code wrapper intermediates between Kepler actor and user code:
- Passes variables of language built-in types (int, char, etc) from actor to the code
- Reads IDS(es) from UAL and passes data to user code
- Passes input code parameters (XML/XSD files) to user code
- Calls user subroutine/function
- Saves output IDS(es)
2. Development of Fortran codes
2.1 Subroutine syntax
subroutine name ( <in/out arguments list> [,code_parameters] [,diagnostic_info] )
2.2. Arguments list
- A mandatory position
- A list of input and output subroutine arguments including:
- Fortran intrisic data types, eg:
integer :: input
character(50) :: charstring
integer,dimension(4) :: tabint
- IDSes, eg:
type (type_equilibrium),pointer :: equilibriumin(:)
type (type_distsource),pointer :: distsourceout(:)
- Fortran intrisic data types, eg:
Warning |
---|
|
2.3. Code parameters
- user defined input parameters
- input / optional
Argument of type: type_param
Code Block type type_param ! character(len=132), dimension(:), pointer ::parameters character(len=132), dimension(:), pointer ::default_param character(len=132), dimension(:), pointer ::schema endtype
- Derived type type_param 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:
(type_param) :: codeparam
{{
2.4. Diagnostic info
- arbitrary output diagnostic information
output / optional
Code Block !---- Diagnostic info ---- integer, intent(out) :: user_out_outputFlag character(len=:), pointer, intent(out) :: user_out_diagnosticInfo
outputFlag
- indicates if user subroutine was successfully executedoutpuflag = 0
- SUCCESS, no action is takenoutputFlag > 0
- WARNING, a warning message is displayed, workflow continuue executionoutputFlag < 0
- ERROR, actor throws an exception, workflow stops
diagnosticInfo
- an arbitrary string
2.5. Examples
Code Block | ||
---|---|---|
| ||
subroutine noids(input, output)
integer, intent(in):: input
integer, intent(out):: output |
Code Block | ||
---|---|---|
| ||
subroutine equil2dist(equilibriumin, distsourceout)
use imas_schemas
implicit none
!input
type (type_equilibrium), pointer :: equilibriumin(:)
!output
type (type_distsource), pointer :: distsourceout(:) |
Code Block | ||
---|---|---|
| ||
subroutine teststring(coreprof,equi,tabint,tabchar,codeparam)
use imas_schemas
implicit none
!input
type(type_coreprof),pointer,dimension(:) :: coreprof
integer, dimension(4), intent(in) :: tabint
!output
type(type_equilibrium),pointer,dimension(:) :: equi
character(50), intent(out) :: tabchar
!code parameters
type(type_param), intent(in) :: codeparam |
3 Development of C++ codes
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
output / optional
language | cpp |
---|
|
|
output_flag
- indicates if user subroutine was successfully executed
output_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
|
|
|
|
language | cpp |
---|---|
title | Example 5. A IDS array as a function argument |
|
language | cpp |
---|---|
title | Example 6. Usage of init function and code input parameters |
|
Info |
---|
Initialization If user function needs any pre-initialization, an additional function <name>_init could be defined. |
4.
|
4.2.3 Delivery of the user code
The user code should be delivered as a static library.
Please find examples of the simple "
...
Makefile" below:
...
language | bash |
---|---|
title | Example 6. Building of Fortran code |
...
Code Block | ||
---|---|---|
| ||
CXX=g++
CXXFLAGS= -g -fPIC
CXXINCLUDES= ${shell |
...
pkg-config --cflags |
...
imas-cpp |
...
}
all: libsimplecppactor.a
libsimplecppactor.a: simplecppactor.o
ar -rvs $@ $^
simplecppactor.o: simplecppactor.cpp
$(CXX) $(CXXFLAGS) $(CXXINCLUDES) -c -o $@ $^
clean:
rm *.a *.o |
...
Tip |
---|
Recomendations
|
...