Sample, shown below, will access IDS data and print it on console.
source code
Source code for this sample can be found at following location
/afs/gw/swimas/resources/tutorials/2019-10-PSNC/FC2K/simple_IMAS_code
Note that workflow is running such way it reads data from pulse file of user g2michal
- it means you don't have to copy input data into your public/imasdb
folder. However, you are still obliged to use imasdb
in order to set location for temporary databases.
Make sure to initialise your environment. Follow the steps here: 00. Initial setup or here: 05.3. IMAS - basic topics - environment set-up(POZ'19Oct)
Make sure to initialise test database - it will be used for temporary files
> imasdb test
1. Preparing the FC2K project
First of all, we need simple code that will read data. In this sample, we will use very simple code that reads distribution IDS, shows some info, and output scalar value
IDS -> actor code [we treat the actor as a black box] -> integer
When you talk about actor, most important is the interface. It's API defines how actor interacts with other actors in the workflow.
1.1. Defining interface to user code
You can always start with FC2K in order to make sure how native interface should be implemented like.
First of all, let's add two ports into actor. Input port - IDS, and output port - integer.
1.2. Creating library with native code
As you recall from previous session (dedicated to FC2K) we have to have library that contains native code we are supposed to run.
In this example we will use library libdistribution_disp.a
prepared previously
1.3. Describing the actor
When we fill information regarding actor, we make it possible to create a bridge between Kepler (actor) and native code (in this case Fortran based library). I will fill the table following way
Field | Value | Description |
---|---|---|
Project | IMAS | This is the name of the project you will see later on inside Kepler - in the actor browser |
Name | distributiondisp | This is the name of the actor in Kepler. Once you place it on canvas this is what you will see. |
Version | 1.0 | This is the version of actor - you are in charge of it. It is supposed to help people know what version of your actor they are using. |
Subroutine | distributiondisp | This is the name of routine in your native code (take a look at sources above) |
Now, go ahed and take a look at Interface again. You can observe that now, interface is complete and perfectly matches your code (can you spot the difference?).
1.4. Choosing compiler
The only thing that is left is to set proper values for the compiler. Make sure we are using Fortran and the vendor is set to Intel
We have all we need to build our first, IMAS based, actor. Press Generate.
1.5. Running the actor
Now it's time to put all the things together. Start your Kepler and create following workflow.
Now we can run it.
Now, let's try to check data coming from the IDS.
> idsdumppath g2michal test 3 92436 1 distribution_sources "time(0)" Type: <class 'numpy.float64'> ---------------------------------------------- ---------------------------------------------- 49.005001068115234