Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Info
titleQuote of the day

"You’re a man looking at the world through a keyhole,
and you’ve spent your whole life trying to widen that keyhole, to see more, to know more,
and now, on hearing that it can be widened, in ways you can’t imagine you reject the possibility."

The Ancient One - Doctor Strange

...

Children Display

Info

...

code

...

Prepare your environment:

Code Block
$ module load imasenv/3.24.0/rc
$ mkdir -p $ITMWORK/projects
$ cd $ITMWORK/projects
$ cp -r $SWIMASDIR/resources/tutorials/2019-10-PSNC/code_parameters .
Info

Before proceeding any further, make sure you have configured your Kepler environment. Take a look here 00. Initial setup or here 05.3. IMAS - basic topics - environment set-up(POZ'19Oct)

The structure of your working directory should look like this:

Code Block
$ cd code_parameters
$ tree
.
├── input_test_xmllib_pathquery.xml
├── input_test_xmllib_pathquery.xsd
├── Makefile						# instructions on how to compile
├── sample_default.xml
├── sample.f90						# code with accessing code parameters
├── sample.xml						# file with parameters
└── sample.xsd						# defining the structure of an XML document

Run an example:

Code Block
$ module load imasenv		# load environment if not set
$ make
ifort  -fPIC -g  -I/gw/swimas/extra/xmllib/3.2.0/intel/17.0/include/xmllib -I/usr/include/libxml2   -c -o sample.o sample.f90
ifort -fPIC -g  -o sample.exe sample.o  -L/gw/swimas/extra/xmllib/3.2.0/intel/17.0/lib -lxmllib -lxml2
./sample.exe
 Next xml element: parameters
 Next xml element: input
 Next xml element: shot_in
 Read shot_in=           4
 Next xml element: run_in
 Read shot_in=           1
 Next xml element: interpol
 Next xml element: time_dep_input
 Next xml element: output
 Next xml element: dims
 Next xml element: compositions
 Next xml element: startup
 Next xml element: boundary
 Next xml element: equilibrium
 Next xml element: geo_ax
 Read geo_ax=   2.86000000000000
 Next xml element: plasma_ax
 Next xml element: amin
 Next xml element: elong
 Next xml element: tria_up
 Next xml element: tria_low
 Next xml element: solver
 Next xml element: experimental

Compare result with data inside sample.xml file.

Accessing code parameters from FC2K actor

Prepare your environment:

Code Block
$ module load imasenv/3.24.0/rc
$ mkdir -p $ITMWORK/projects
$ cd $ITMWORK/projects
$ git clone ssh://git@git.iter.org/imex/fc2k-testing-framework.git
  
# OR copy from this location
$ cp -r $SWIMASDIR/resources/tutorials/2019-10-PSNC/fc2k-testing-framework .

The structure of your working directory should look like this:

Code Block
$ cd fc2k-testing-framework/primitives_param/fortran/
$ tree
.
├── clean.sh
├── Makefile
├── primitives_param.f90			# FC2K actor with accessing code parameters
├── primitivesparam_fc2k.xml		# FC2K configuration file
├── primitivesparam_workflow.xml	# example workflow  
├── run_test.sh						# script for run example
├── sample_default.xml
├── sample.xml						# XML file with parameters
└── sample.xsd						# defining the structure of an XML document

Run an example:

Code Block
$ module load imasenv		# load environment if not set
$ ./run_test.sh
Compilation - OK
Skipping log removal
FC2K build for primitives with params - OK
Skipping log removal
Workflow execution: primitives with params - OK
Skipping log removal
Checking output - should be equal to '3' - OK
Skipping log removal

...

parameters allow to store varaibles and parameters outside of actor code in elegant way.

The IMAS environment has specially dedicated Fortran library - XMLLIB to handle it.

XMLLIB library basics

The main idea of the library

Image Added

Short description of XMLLIB API - main points

Code Block
xml2eg_parse_memory(character(len=*) parameters , type(type_xml2eg_document) xml2eg_document)

This function allows you to read to memory the entire xml file containing the list of parameters.
Parse the "codeparam_string". This means that the data is put into a xml2eg_document.

Code Block
xml2eg_get(type(type_xml2eg_document) xml2eg_document, character(len=*) path, <any type> output_value)

The function allows reading the parameter that is in the path location inside xml file.
Data is extracted from the xml2eg_document file is the output_value variable.

Code Block
xml2eg_free_doc(type(type_xml2eg_document) xml2eg_document)

Cleaning and freeing allocated memory of xml2eg_document object.


Tip

A more detailed description of the XMLLIB library can be found here