Versions Compared

Key

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

...

  1. Introduction
  2. Files provided
  3. Running a test example
  4. Structure of the parameter command files
  5. Storing the EIRENE triangular grids in IMAS
    1. Structure of EIRENE files keeping the grid
    2. Presentation of EIRENE grid in GGD
    3. Module  triangular_grid_modile 
      1. Data types provided
      2. Methods provided 
    4. Module  triangular_grid_ids_io
      1. Data types provided
      2. Methods provided
  6. EIRENE input wrapper
    1. Structure of EIRENE input files
    2. Module eirene_data_io
      1. Data types provided
      2. Methods provided 
    3. Module imas_data_io
        ???
        1. Constants
        2. Methods
      1. Module edge_profiles_io
        1. Data types
        2. Methods
      2. Module equilibrium_io
        1. Data types
        2. Methods
      3. Module global_objects
        1. Constants
        2. Methods
      4. Module imas_controls_for_input
        1. Data types
        2. Methods
      5. Main program files  save_input_main.f90  and  provide_input_main.f90
    4. Known issues
    5. Things to be done

    Introduction

    ...

    The structure of this document is as follows. Section 2 lists the files provided. Section 3 describes how to run a test example. Section 4 presents the parameter files controlling the wrapper programs. Section 5 describes the organization of the grid storage. In Section 6, the wrapper for the EIRENE input is described. Finally, the things to be done are outlined in Section 7.

    Files provided

    This document can be found at EIRENE IMASification - Scientific Worfklows - PCSS Confluence (psnc.pl), https://docs.psnc.pl/display/WFMS/EIRENE+IMASification.

    The repository folder of the current version is The files listed below can be found in the public directory ~g2yyakov/public/eirene/version0.910.!!! To be updated

    Files provided

    FILES

    CONTENT

    ​triangular_grid_module.f90

    Module that supports reading, writing and processing triangular grids

    triangular_grid_ids_io.f90Module supporting the storage of triangular grids in IMAS
    imas_data_io.f90Module supporting the storage of physical quantities (tallies) in IMAS
    eirene_data_io.f90Module supporting reading / writing of EIRENE data files
    edge_profiles_io.f90Module that supports placing the data to the 'edge_profiles' IDS
    equilibrium_io.f90Module that supports placing the data to the 'equilibrium' IDS
    imas_controls_for_input.f90Module that works with the parameter files (the files controlling the work of the programs)
    global_parameters.f90Module that holds constants and some service routines
    save_input_main.f90Main file of the program save_input.exe
    provide_input_main.f90Main file of the program provide_input.exe
    MakefileUsed to compile the programs
    save_input.parA template parameter command file for the program save_input.exe
    provide_input.parA template parameter command file for the program provide_input.exe
    soledge3x.npco_charTriangular grid example received from the EIRENE team
    soledge3x.elementeAnother file of this example
    soledge3x.neighborAnother file of this example
    Te.dat, nT.dat, TT.dat, nD.dat, TD.datSample files supposed to contain the temperature and density of electrons, D ions and T ions
    Btotal.dat, bx.dat, by.dat, bz.datSample files supposed to contain the strength and components of the magnetic field
    README.txtBrief description of how to compile and run

    EIRENE_wrapper_

    user_guide.pdf

    PDF version of this document

    ...

    1. Copy the files to your directory. 
    2. If you wish to test the programs with your own files, copy them to the same directory. Do not forget to put the correct names to the command file save_input.par.
    3. Load the IMAS library by typing:
      module load imasenv/3.37.0    
    4. Create the IMAS database entry:
      imasdb eirene 
    5. Now you can compile the examples. Type
      make clean 
      make save_input 
    6. Run the program:
      ./save_input.exe 
      The program puts the grid stored in the files soledge3x.* and the content of the dat-files into the IMAS database  eirene .
    7. Type
      make provide_input 
    8. Run the program:
      ./provide_input.exe 
    9. Compare the new files  eirene.*   with the original files  soledge3x.* and the original data files with the new files (their names end with the suffix '_input.dat').

    Structure of the

    ...

    command files

    The program save_input.exe takes parameters that control the work of the program from the file save_input.par. A template of this file is given below. 


    Code Block
    ! Parameters that control saving the EIRENE input to IMAS.
    ! Use '!' when inserting comment lines.
    ! You can add comments at the end of each line unless this line holds a text that may contain blanks (e.g., a description field).
    ! Do not change the order of the parameters.
    !


    ! Parameters that control saving the EIRENE input to IMAS.
    ! Use '!' when inserting comment lines.
    ! You can add comments at the end of each line unless this line holds a text that may contain blanks (e.g., a description field).
    ! Do not change the order of the parameters.
    !
    eirene                                         <= IMAS database
    10003                                         <= shot
    1                                                <= run
    'IDS created to test EIRENE input storage'     <= IDS comment
    'Yurii Yakovenko'                          <= input provider
    'once upon a time'                       <= creation date
    !!! grid data
    "SN"                                         <= grid name
    4                                              <= grid index in dictionary (single null)
    "EIRENE grid for single null configuration"  <= grid description
    "primary_standard"                 <= poloidal space name
    "primary poloidal triangular grid" <= poloidal space description
    soledge3x.npco_char                <= grid node file
    soledge3x.elemente                 <= grid triangle file
    soledge3x.neighbors                <= grid neighbor file
    !!! Physical quantities
    bx.dat       <= bx file
    by.dat       <= by file
    bz.dat       <= bz file
    Btotal.dat   <= Btotal file
    vx.dat       <= vx file
    vy.dat       <= vy file
    vz.dat      <= vz file
    Te.dat       <= Te file
    !!! Ion physical quantities
    2           <= Number of ion species
    ! Ion species 1
    D  2  1  1  <= label, mass, Z_ion, Z_element
    TD.dat      <= temperature file
    nD.dat      <= density file
    ! Ion species 2
    T  3  1  1  <= label, mass, Z_ion, Z_element
    TT.dat      <= temperature file
    nT.dat      <= density file

    ...

    The module depends on the IMAS module  ids_types   (uses the constant  IDS_real  – the kind of real variables in IMAS).

    Data types

    ...

    The following data types are provided:

    ...

    The type  edge_structure  is intended for information about an edge. The integer child array  vertex   holds indices of the edge vertices in  triangular_grid%vertex  . The leaf  material_property   holds the MP of the edge. The child array  adjacent   holds the indices of the neighbouring triangles in  triangular_grid%triangle .

    Methods

    ...

    The module member routines are as follows:

    ...

    At present, only one grid space is arranged: a two-dimensional poloidal grid space holding a triangular grid. However, the routines of this modules are organized in a way that should facilitate adding additional spaces (most probably, a 1D toroidal space) if required. When the poloidal grid is recovered from an IDS, it is taken from the space having the identifier index equal to 1 (see the function get_grid_objects).

     Data types

    ...

        type grid_control_panel
            type(ids_identifier_dynamic_aos3) :: grid_identifier
            character(len=ids_string_length) :: poloidal_space_name, poloidal_space_description
            character(len=ids_string_length) :: node_file, triangle_file, neighbor_file
            integer :: grid_index = 1             ! Use grid_ggd in time slice 1
            integer :: ggd_index = 1              ! Use ggd in time slice 1
            ! The following fields are not used when getting the grid from IDS
            integer :: grid_dictionary_index
            !! Allocation of IMAS grid space for EIRENE triangular grid
            integer :: nSpaces = 1                ! Total number of GGD spaces;
                                                              ! may change if toroidal coordinate is added
            integer :: eirene_space_index = 1     ! May change if toroidal coordinate is added
            integer :: Ngrid_slices = 1                 ! Number of grid_ggd slices to be allocated
            integer :: Nggd_slices = 1                 ! Number of ggd slices to be allocated
        end type grid_control_panel

    The structure type grid_control_panel is intended for holding the control parameters taken from a command file. These parameters determine how the EIRENE triangular grid is saved in / recovered from an IMAS IDS.

     Methods

    ...

    The module contains the following routines:

    ...

    Argument

    Type

    Intent

    Description

    subset

    type(ids_generic_grid_dynamic_grid_subset)

    pointer

    Pointer to the  grid_subset  AOS element to hold the subset

    subset_id

    integer

    in

    Integer identifier of the subset


    EIRENE input wrappers

    Only a part of input quantities is now processed. The storage of velocities will become possible after IMAS 3.38 is implemented.

    Structure of EIRENE input files

    In addition to the files containing the grid, the EIRENE input includes file holding spatial distributions of physical quantities (magnetic field components, temperatures and densities of plasma species etc.). The values of the quantities are given at the cells (triangles) constituting the grid. The easiest way to describe the format of the input files is to present a sample code reading it:

            READ (IFILE,'(A72)') Text_header1 
            READ (IFILE,'(A72)') Text_header2
            READ (IFILE,'(A72)') Text_header3
            READ (IFILE,'(A24)') Text_header4
            READ (IFILE,'(A24)') Text_header5
            READ (IFILE,'(A72)') Text_header6
            READ (IFILE,'(A72)') Text_header7
            READ (IFILE,*) NR,NP,NT,NB,NTT
            DO IRAD=1,NTT,5
                READ (IFILE,*) (PROF(IR),IR=IRAD,IRAD+4)
            END DO

    Here NR=NTRI+1, NTRI is the number of grid triangles, NP=1, NT=1, NB=1, NTT = total number of cells including the additional cells outside of the triangle grid, see below. The additional array element with the index NR usually contains the average over all cells. Further extra elements with indices NR+1, ..., NTT correspond to extra cells outside the implemented triangular mesh (i.e., cells in pump ducts). These elements are not processed now. 

    The text headers are comments describing the file content, system units etc. It is agreed with the EIRENE team that (a) when reading a data file, the wrapper will consider all lines starting with '*' or '!' as a header line and will not store in IMAS the header texts; (b) when writing a fata file, the wrapper will generate new reasonable headers anew. The headers are not implemented yet.

     Module eirene_data_io

    This module provides tools for dealing with files containing EIRENE input data (see the file format in Section 6.1).

     Data types provided

    type eirene_data
        real(ids_real), allocatable :: main_part(:)
        real(ids_real) :: average
        real(ids_real), allocatable :: extra_data(:) ! To be implemented yet
        logical :: extra_data_present                   ! Shows if extra_data is filled
    end type eirene_data

    This structure item 'main_part' is intended for storage of array elements 1, ..., NTRI, which correspond to grid triangles (see Section 6.1). The item 'average' is to contain average (element NTRI+1). The item 'extra_data' is intended for storing the extra elements NTRI+2, ..., NTT if they are available, with the item 'extra_data_present' showing if the extra elements are present.

     Methods provided

    The module contains the following routines:

    • deallocate_data_set
      Dallocate the components of a type(eirene_data) variable.
    • read_quantity_from_file
      Read an EIRENE input file holding a distribution of a physical quantity.
    • write_quantity_to_file
      Write an EIRENE input file holding a distribution of a physical quantity.

    subroutine deallocate_data_set (quantity)

    Deallocate all components of the structure.

    ...

    Argument

    ...

    Type

    ...

    Intent

    ...

    Description

    ...

    quantity

    ...

    type(eirene_data)

    ...

    inout

    ...

    Structure to be deallocated

    subroutine read_quantity_from_file (file_name, quantity, report, io_unit)

    Read a physical quantity from a file with the format of EIRENE input tallies.

    ...

    Argument

    ...

    Type

    ...

    Intent

    ...

    Description

    ...

    quantity

    ...

    type(eirene_data)

    ...

    out

    ...

    Structure to be filled with data from the file

    ...

    subroutine write_quantity_to_file (file_name, quantity, report, io_unit)

    Write a physical quantity to a file with the format of EIRENE input tallies.

    ...

    Argument

    ...

    Type

    ...

    Intent

    ...

    Description

    ...

    quantity

    ...

    type(eirene_data)

    ...

    in

    ...

    Structure holding data to be saved

    ...

    Module imas_data_io

    The module contains methods used for writing an EIRENE tally (given as a type(eirene_data)-structure) to IMAS IDS and, vice versa, reading it from IDS. The 'main_part' component is associated with the grid subset of all triangles (the subset identifier name 'pol3'); the 'average' component, with the subset having the name 'average'. 

    It is a difficult choice to decide whether the methods should look for the subsets in the 'subset' AoS by their identifier names or by their dictionary indices (the idea to assign fixed places in the AoS to the subsets seems very bad because it can result in numerous bugs and confusions if it happens that the AoS requires changes). Now the subsets are found by their names. The main reason for this choice is that we have many subsets that have no standard dictionary indices (subsets of edges with given MPs, subset for averages). It is possible to introducing custom indices for them, but it seems a way to great confusion.

    Storage of 'extra_data' is yet to be done (after adding the corresponding extra part to the grid).

    Module constants

     ! Name of the subset to which the values at all triangles are attached
    character(len=ids_string_length), parameter :: main_subset_label = 'pol3' 
     ! Name of the subset to which the average value is attached
    character(len=ids_string_length), parameter :: average_subset_label = 'average'

    The constants are the identifier names by which the subsets are found by the methods of this module when writing an EIRENE tally (given as a type(eirene_data)-structure) to IMAS IDS and, vice versa, reading it from IDS. The 'main_part' component is associated with the grid subset of all triangles (named 'pol3'); the 'average' component, with the subset having the name 'average'. 

     Methods provided

    • put_quantity_to_ids
      Put a type(eirene_data)-structure to IDS.
    • get_quantity_from_ids
      Get a type(eirene_data)-structure from an IDS (not suitable for the 'equilibrium' IDS).
    • get_quantity_from_equilibrium
      Get a type(eirene_data)-structure from the 'equilibrium' IDS.
    • put_quantity_for_single_subset
      Write a quantity given as array to a given IDS slot, attaching it to a grid subset with a given name.
    • get_quantity_for_single_subset
      Get from a given IDS slot a quantity given as an array attached to the grid subset with a given name (not suitable for the 'equilibrium' IDS).
    • get_quantity_for_single_subset_in_equilibrium
      Get from a given IDS slot a quantity given as an array attached to the grid subset with a given name; suitable only for 'equilibrium'.

    subroutine put_quantity_to_ids (quantity, grid_subset, grid_index, quantity_aos, code_to_imas_unit_ratio)

    Put a quantity to a given IDS slot (sub-AoS of the ggd AoS intended for the storage of a single physical quantity). The AoS is allocated with the size of 2 in order to save values attached to two grid subsets: the subset of all triangles and the subset organized to store the averages. These subsets are found by their identifier names, which are given by the module constants main_subset_label and average_subset_label, respectively.

    ...

    Argument

    ...

    Type

    ...

    Intent

    ...

    Description

    ...

    quantity

    ...

    type(eirene_data)

    ...

    in

    ...

    structure holding the quantity to be saved

    ...

    Two wrapper programs are provided. The first program, save_input.exe, accepts the EIRENE input (files with a grid description and files with spatial distributions of physical quantities) prepared by some programs and saves their content in a desired IMAS database. The second program, provide_input.exe, recreate these input files, so that they can be used by EIRENE. Both programs are controlled by certain text files ('command files') described in Section 4.

    Only a part of input quantities is now processed. According to information received from the EIRENE team, the storage of the following tallies (physical quantities) is of first priority: electron temperature; temperature, density, and velocity components (in cylindrical coordinates) of several sorts of ions; total magnetic field; components of the magnetic field unit vector in cylindrical coordinates.

    The storage of the magnetic field, temperatures, and densities is already implemented in the wrappers. However, there is a restriction: the wrappers are able to deal with single-atom ions only.

    The storage of velocities will become possible after IMAS 3.38 is implemented.

    Structure of EIRENE input files

    In addition to the files containing the grid, the EIRENE input includes file holding spatial distributions of physical quantities (magnetic field components, temperatures and densities of plasma species etc.). The values of the quantities are given at the cells (triangles) constituting the grid. The easiest way to describe the format of the input files is to present a sample code reading it:

            READ (IFILE,'(A72)') Text_header1 
            READ (IFILE,'(A72)') Text_header2
            READ (IFILE,'(A72)') Text_header3
            READ (IFILE,'(A24)') Text_header4
            READ (IFILE,'(A24)') Text_header5
            READ (IFILE,'(A72)') Text_header6
            READ (IFILE,'(A72)') Text_header7
            READ (IFILE,*) NR,NP,NT,NB,NTT
            DO IRAD=1,NTT,5
                READ (IFILE,*) (PROF(IR),IR=IRAD,IRAD+4)
            END DO

    Here NR=NTRI+1, NTRI is the number of grid triangles, NP=1, NT=1, NB=1, NTT = total number of cells including the additional cells outside of the triangle grid, see below. The additional array element with the index NR usually contains the average over all cells. Further extra elements with indices NR+1, ..., NTT correspond to extra cells outside the implemented triangular mesh (i.e., cells in pump ducts). These elements are not processed now. 

    The text headers are comments describing the file content, system units etc. It is agreed with the EIRENE team that (a) when reading a data file, the wrapper will consider all lines starting with '*' or '!' as a header line and will not store in IMAS the header texts; (b) when writing a fata file, the wrapper will generate new reasonable headers anew. The headers are not implemented yet.

     Module eirene_data_io

    This module provides tools for dealing with files containing EIRENE input data (see the file format in Section 6.1).

     Data types

    type eirene_data
        real(ids_real), allocatable :: main_part(:)
        real(ids_real) :: average
        real(ids_real), allocatable :: extra_data(:) ! To be implemented yet
        logical :: extra_data_present                   ! Shows if extra_data is filled
    end type eirene_data

    This structure item 'main_part' is intended for storage of array elements 1, ..., NTRI, which correspond to grid triangles (see Section 6.1). The item 'average' is to contain average (element NTRI+1). The item 'extra_data' is intended for storing the extra elements NTRI+2, ..., NTT if they are available, with the item 'extra_data_present' showing if the extra elements are present.

     Methods

    The module contains the following routines:

    • deallocate_data_set
      Dallocate the components of a type(eirene_data) variable.
    • read_quantity_from_file
      Read an EIRENE input file holding a distribution of a physical quantity.
    • write_quantity_to_file
      Write an EIRENE input file holding a distribution of a physical quantity.


    subroutine deallocate_data_set (quantity)

    Deallocate all components of the structure.

    Argument

    Type

    Intent

    Description

    quantity

    type(eirene_data)

    inout

    Structure to be deallocated


    subroutine read_quantity_from_file (file_name, quantity, report, io_unit)

    Read a physical quantity from a file with the format of EIRENE input tallies.

    Argument

    Type

    Intent

    Description

    file_namecharacter(len=*)infile name

    quantity

    type(eirene_data)

    out

    structure to be filled with data from the file

    reportlogical, optional (=false)inturns on info about each step
    io_unitinteger, optional (=69)inI/O unit to be used


    subroutine write_quantity_to_file (file_name, quantity, report, io_unit)

    Write a physical quantity to a file with the format of EIRENE input tallies.

    Argument

    Type

    Intent

    Description

    file_namecharacter(len=*)infile name

    quantity

    type(eirene_data)

    in

    structure holding data to be saved

    reportlogical, optional (=false)inturns on info about each step
    io_unitinteger, optional (=69)inI/O unit to be used


    Module imas_data_io

    The module contains methods used for writing an EIRENE tally (given as a type(eirene_data)-structure) to IMAS IDS and, vice versa, reading it from IDS. The 'main_part' component is associated with the grid subset of all triangles (the subset identifier name 'pol3'); the 'average' component, with the subset having the name 'average'. 

    It is a difficult choice to decide whether the methods should look for the subsets in the 'subset' AoS by their identifier names or by their dictionary indices (the idea to assign fixed places in the AoS to the subsets seems very bad because it can result in numerous bugs and confusions if it happens that the AoS requires changes). Now the subsets are found by their names. The main reason for this choice is that we have many subsets that have no standard dictionary indices (subsets of edges with given MPs, subset for averages). It is possible to introducing custom indices for them, but it seems a way to great confusion.

    Storage of 'extra_data' is yet to be done (after adding the corresponding extra part to the grid).

    Constants

     ! Name of the subset to which the values at all triangles are attached
    character(len=ids_string_length), parameter :: main_subset_label = 'pol3' 
     ! Name of the subset to which the average value is attached
    character(len=ids_string_length), parameter :: average_subset_label = 'average'

    The constants are the identifier names by which the subsets are found by the methods of this module when writing an EIRENE tally (given as a type(eirene_data)-structure) to IMAS IDS and, vice versa, reading it from IDS. The 'main_part' component is associated with the grid subset of all triangles (named 'pol3'); the 'average' component, with the subset having the name 'average'. 

     Methods

    • put_quantity_to_ids
      Put a type(eirene_data)-structure to IDS.
    • get_quantity_from_ids
      Get a type(eirene_data)-structure from an IDS (not suitable for the 'equilibrium' IDS).
    • get_quantity_from_equilibrium
      Get a type(eirene_data)-structure from the 'equilibrium' IDS.
    • put_quantity_for_single_subset
      Write a quantity given as array to a given IDS slot, attaching it to a grid subset with a given name.
    • get_quantity_for_single_subset
      Get from a given IDS slot a quantity given as an array attached to the grid subset with a given name (not suitable for the 'equilibrium' IDS).
    • get_quantity_for_single_subset_in_equilibrium
      Get from a given IDS slot a quantity given as an array attached to the grid subset with a given name; suitable only for 'equilibrium'.


    subroutine put_quantity_to_ids (quantity, grid_subset, grid_index, quantity_aos, code_to_imas_unit_ratio)

    Put a quantity to a given IDS slot (sub-AoS of the ggd AoS intended for the storage of a single physical quantity). The AoS is allocated with the size of 2 in order to save values attached to two grid subsets: the subset of all triangles and the subset organized to store the averages. These subsets are found by their identifier names, which are given by the module constants main_subset_label and average_subset_label, respectively.

    Argument

    Type

    Intent

    Description

    quantity

    type(eirene_data)

    in

    structure holding the quantity to be saved

    grid_subsettype(ids_generic_grid_dynamic_grid_subset), dimension(:)inAoS, grid subsets
    grid_indexintegerinindex of the grid used in the grid_ggd AOS (must be put to IDS)
    quantity_aostype(ids_generic_grid_scalar), dimension(:)pointerAoS (IDS slot) where the quantity should be written
    code_to_imas_unit_ratioreal(ids_real)inratio of the quantity unit in the code to that in IMAS


    function get_quantity_from_ids (grid_ggd_aos, quantity_aos, code_to_imas_unit_ratio) result (quantity)

    Get a quantity from a given IDS slot (sub-AoS of the ggd AoS intended for the storage of a single physical quantity). The subroutine scans the slot, investigating the identifier names of the grid subsets to which the slot array elements are attached (the 'grid_index' and the 'subset_index' components of the element are used to reach this subset). The subroutine obtains the value arrays attached to two grid subsets: the subset of all triangles and the subset organized to store the averages. These subsets are found by their identifier names, which are given by the module constants main_subset_label and average_subset_label, respectively. The obtained arrays are put into the components 'main_data' and 'average' of the function result. Not suitable for the 'equilibrium' IDS (use get_quantity_from_equilibrium for this IDS).

    Argument

    Type

    Intent

    Description

    quantity

    type(eirene_data)

    result

    structure holding the obtained quantity

    grid_ggd_aostype(ids_generic_grid_aos3_root), intent(in), dimension(:)ingrid_ggd (AoS holding the description of GGD grids)
    quantity_aostype(ids_generic_grid_scalar), dimension(:)inAoS (IDS slot) whence the quantity should be taken
    code_to_imas_unit_ratioreal(ids_real)inratio of the quantity unit in the code to that in IMAS


    function get_quantity_from_equilibrium (grid_ggd_aos, quantity_aos, code_to_imas_unit_ratio) result (quantity)

    Get a quantity from a given IDS slot (sub-AoS of the ggd AoS intended for the storage of a single physical quantity) of the 'equilibrium' IDS. The subroutine scans the slot, investigating the identifier names of the grid subsets to which the slot array elements are attached (the 'grid_index' and the 'subset_index' components of the element are used to reach this subset). The subroutine obtains the value arrays attached to two grid subsets: the subset of all triangles and the subset organized to store the averages. These subsets are found by their identifier names, which are given by the module constants main_subset_label and average_subset_label, respectively. The obtained arrays are put into the components 'main_data' and 'average' of the function result. Use get_quantity_from_ids for IDS other than 'equilibrium'.

    Argument

    Type

    Intent

    Description

    quantity

    type(eirene_data)

    result

    structure holding the obtained quantity

    grid_ggd_aostype(ids_generic_grid_aos3_root), intent(in), dimension(:)ingrid_ggd (AoS holding the description of GGD grids)
    quantity_aostype(ids_generic_grid_scalar), dimension(:)inAoS (IDS slot) whence the quantity should be taken
    code_to_imas_unit_ratioreal(ids_real)inratio of the quantity unit in the code to that in IMAS


    subroutine put_quantity_for_single_subset (quantity, ids_slot, code_to_imas_unit_ratio, grid_subset, grid_index, subset_label)

    Write a quantity given as array to a given IDS slot, attaching it to a grid subset with a given name. The array size must coincide with the size of the grid subset.

    Argument

    Type

    Intent

    Description

    quantity

    type(eirene_data)

    result

    structure holding the obtained quantity

    ids_slottype(ids_generic_grid_scalar)outAoS (IDS slot) whence the quantity should be taken
    code_to_imas_unit_ratioreal(ids_real)inratio of the quantity unit in the code to that in IMAS
    grid_subsettype(ids_generic_grid_dynamic_grid_subset), dimension(:)inarray of grid subsets
    grid_indexintegerinindex of the grid used in the grid_ggd AOS (must be put to IDS)
    subset_labelcharacter(len=*)inidentifier name of the grid subset


    subroutine get_quantity_for_single_subset (ids_slot, subset_label, code_to_imas_unit_ratio, grid_ggd_aos, quantity, grid_index, subset_index)

    Get from a given IDS slot a quantity given as an array attached to the grid subset with a given name (not suitable for the 'equilibrium' IDS).

    Argument

    Type

    Intent

    Description

    ids_slottype(ids_generic_grid_scalar)inAoS (IDS slot) whence the quantity should be taken
    subset_labelcharacter(len=*)inidentifier name of the required grid subset
    code_to_imas_unit_ratioreal(ids_real)inratio of the quantity unit in the code to that in IMAS
    grid_ggd_aostype(ids_generic_grid_aos3_root), dimension(:)ingrid_ggd AOS
    quantityreal(ids_real), dimension(:), allocatableoutvalues of the quantity at a grid subset
    grid_indexintegeroutindex of the used grid in grid_ggd AOS
    subset_indexintegeroutindex of the grid subset in the 'subset' AoS.


    subroutine get_quantity_for_single_subset_in_equilibrium (ids_slot, subset_label, code_to_imas_unit_ratio, grid_ggd_aos, quantity, grid_index, subset_index)

    Get from a given IDS slot a quantity given as an array attached to the grid subset with a given name (suitable onlyfor the 'equilibrium' IDS).

    Argument

    Type

    Intent

    Description

    ids_slottype(ids_generic_grid_scalar)inAoS (IDS slot) whence the quantity should be taken
    subset_labelcharacter(len=*)inidentifier name of the required grid subset
    code_to_imas_unit_ratioreal(ids_real)inratio of the quantity unit in the code to that in IMAS
    grid_ggd_aostype(ids_generic_grid_dynamic), dimension(:)ingrid_ggd AOS
    quantityreal(ids_real), dimension(:), allocatableoutvalues of the quantity at a grid subset
    grid_indexintegeroutindex of the used grid in grid_ggd AOS
    subset_indexintegeroutindex of the grid subset in the 'subset' AoS.

    Module edge_profiles_io

    The module provides tools for information exchange with the 'edge_profiles' IDS.

    Data types

    type ion_file_set
        character(len=32) :: n, T !, vx, vy, vz ! To be added
    end type ion_file_set

    This structure holds the collection of names of data files that store characteristics for one ion sort.

    type ion_data_set
        type(eirene_data) :: n, T  !, vx, vy, vz ! To be added
    end type ion_data_set

    This structure holds the collection of data for one ion sort.

    type ion_parameters
        character(len=ids_string_length) :: label
        real(ids_real) :: mass, Z_ion, Z_element
        type(ion_file_set) :: files
        type(ion_data_set) :: data
    end type ion_parameters

    This structure holds all parameters characterizing an ion sort.

    Methods

    • deallocate_edge_profiles_data
      Deallocate all components of a type(edge_profiles_data_set)-stucture.
    • initiate_ion_list_for_input_saving
      Read that part of the command file controls the input wrapper which concerns ions.
    • initiate_edge_profiles_data_for_input_saving
      Read the part of the command file that controls saving the EIRENE data to the edge_profiles IDS.
    • collect_data_for_edge_profiles_input
      Read the EIRENE input data intended for the edge_profiles IDS from files.
    • save_input_to_edge_profiles
      Put EIRENE input to the edge_profiles IDS.
    • organize_ion_storage
      Primary organization of the structure array for storing the ion data.
    • put_ions_to_edge_profiles
      Put quantities associated with ions to the edge_profiles IDS.
    • fetch_input_from_edge_profiles
      Get data from the edge_profiles IDS
    • get_quantities_from_edge_profiles
      Get all physical quantities from the edge_profiles IDS
    • get_ions_from_edge_profiles
      Get quantities associated with ions from the edge_profiles IDS
    • write_input_data_from_edge_profiles_ids
      Write the data extracted from the edge_profiles IDS to files in the format of EIRENE input tallies

    subroutine deallocate_edge_profiles_data (all_data)

    Deallocate all components of the structure.

    Argument

    Type

    Intent

    Description

    all_data

    type(edge_profiles_data_set)

    inout

    structure to be deallocated


    function initiate_ion_list_for_input_saving (io_unit) result (ion_list)

    Read that part of the command file of the input wrapper which concerns ions.

    Argument

    Type

    Intent

    Description

    ion_list

    type(ion_parameters), allocatable, dimension(:)

    result

    array that holds parameters of all ions

    io_unitintegerinindex of the I/O unit attached to the command file


    function initiate_edge_profiles_data_for_input_saving (io_unit) result (edge_profiles_data)

    Read the part of the command file that controls saving the EIRENE data to the edge_profiles IDS.

    Argument

    Type

    Intent

    Description

    edge_profiles_data

    type(edge_profiles_data_set)

    result

    structure holding parameters obtained from the command file

    io_unitintegerinindex of the I/O unit attached to the command file


    subroutine collect_data_for_edge_profiles_input (edge_profiles_data)

    Read the EIRENE input data intended for the edge_profiles IDS from files. At the entry, the 'edge_profiles_data' structure is filled only partly (from the command file). The subroutine fills the remaining part, reading the information from data files.

    Uses the subroutine read_quantity_from_file (module eirene_data_io).

    Argument

    Type

    Intent

    Description

    edge_profiles_data

    type(edge_profiles_data_set)

    inout

    structure that contains the names of the input files and accepts the data read from the files


    subroutine save_input_to_edge_profiles (idx, imas_controls, grid_controls, edge_profiles_data, eirene_grid)

    Put EIRENE input to the edge_profiles IDS. The input consists of (1) a triangular grid; (2) a set of quantities (characteristics of several plasma species) defined on this grid; (3) properties of these species. The first item is provided in 'eirene_grid'; the last two, in 'edge_profiles_data'.

    Uses the subroutines: put_quantity_to_ids (module imas_data_io), put_eirene_grid_to_ids (module triangular_grid_ids_io), put_ions_to_edge_profiles (this module).

    Argument

    Type

    Intent

    Description

    idxintegerinindex of the I/O unit attached to the IMAS database
    imas_controlstype(imas_control_panel)inparameters of the IMAS database and basic information to be put to IDS
    grid_controlstype(grid_control_panel)inparameters controlling the grid saving

    edge_profiles_data

    type(edge_profiles_data_set)

    in

    structure holding the distributions of physical quantities

    eirene_gridtype(triangular_grid)instructure holding the EIRENE triangular grid


    subroutine organize_ion_storage (ion_list, ggd)

    Primary organization of the structure array for storing the ion data (allocation of AoS and putting basic ion properties there).

    Restrictions to be overcome: only single atoms (no molecules); one charge state per ion sort.

    Argument

    Type

    Intent

    Description

    ion_list

    type(ion_parameters), allocatable, dimension(:)

    in

    array that holds parameters of all ions

    ggdtype(ids_edge_profiles_time_slice)inoutggd AoS element to be filled


    subroutine put_ions_to_edge_profiles (ion_list, ggd, grid_subset, grid_index)

    Put quantities associated with ions to the edge_profiles IDS.

    Restrictions to be overcome: only single atoms (no molecules); one charge state per ion sort.

    Argument

    Type

    Intent

    Description

    ion_list

    type(ion_parameters), dimension(:)

    in

    array that holds parameters of all ions

    ggdtype(ids_edge_profiles_time_slice)inoutggd AoS element to be filled
    grid_subsettype(ids_generic_grid_dynamic_grid_subset), dimension(:)inarray of grid subsets
    grid_indexintegerinindex of the grid_ggd AOS element holding the grid


    subroutine fetch_input_from_edge_profiles (idx, grid_controls, fetch_grid, edge_profiles_data, eirene_grid)

    Get all physical quantities from the edge_profiles IDS, putting them to a type(edge_profiles_data_set) structure. If required, get the triangular grid.

    Uses the subroutines: get_triangular_grid_from_ids (module triangular_grid_ids_io), get_quantities_from_edge_profiles (this module).

    Argument

    Type

    Intent

    Description

    idxintegerinindex of the I/O unit attached to the IMAS database
    grid_controlstype(grid_control_panel)inparameters controlling the grid saving/recovering
    fetch_gridlogicalinswitches on reading the grid

    edge_profiles_data

    type(edge_profiles_data_set)

    out

    the structure holding the data found in the edge_profiles IDS (except for the grid)

    eirene_gridtype(triangular_grid)inoutstructure containing the grid; if fetch_input=.true., it is filled with data read from the IDS; otherwise, it remains unchanged.


    function get_quantities_from_edge_profiles (ggd, grid_ggd_aos) result (edge_profiles_data)

    Get all physical quantities from the edge_profiles IDS, putting them to a type(edge_profiles_data_set) structure.

    Argument

    Type

    Intent

    Description

    edge_profiles_datatype(edge_profiles_data_set)resultthe structure holding the obtained data
    ggdtype(ids_edge_profiles_time_slice)inggd AoS element where the quantities are written
    grid_ggd_aostype(ids_generic_grid_aos3_root), dimension(:)inAoS containing the GGD grids


    function get_ions_from_edge_profiles (grid_ggd_aos, ggd_ions) result (ion_list)

    Get quantities associated with ions from the edge_profiles IDS.

    Restrictions: only single-atom ions (no molecules); one charge state per ion sort.

    Argument

    Type

    Intent

    Description

    ion_listtype(ion_parameters), allocatable, dimension(:)resultthe structure holding the obtained data
    grid_ggd_aostype(ids_generic_grid_aos3_root), dimension(:)inAoS containing the GGD grids
    ggd_ionstype(ids_edge_profiles_time_slice_ion), dimension(:)insub-AoS of the ggd AOS where ion data are stored


    subroutine write_input_data_from_edge_profiles_ids (edge_profiles_data, file_suffix)

    Write the data extracted from the edge_profiles IDS to files in the format of EIRENE input tallies.

    The names of the generated files look like <ion_label>_<quantity_label>_<file_suffix>. For example, if the file suffix is "input.dat", and the ion label is "D+", the ion temperature will be written to the file "D+_n_input.dat".

    Argument

    Type

    Intent

    Description

    edge_profiles_datatype(edge_profiles_data_set)inthe structure holding the obtained data
    file_suffixcharacter(len=*)inthe suffix added to the names of the created files


    Module equilibrium_io

    The module provides tools for information exchange with the 'edge_profiles' IDS.

     Data types

    type equilibrium_data_set
         type(eirene_data) :: bx, by, bz, Btotal  ! Components used by EIRENE
         type(eirene_data) :: BR, Bvert, Btor      ! Components stored in IMAS
    end type equilibrium_data_set

    This type is a collection of magnetic field components.

    type equilibrium_file_set
        character(len=32) :: bx, by, bz, Btotal
    end type equilibrium_file_set

    This type holds names of the files holding the magnetic field components.

     Methods

    • deallocate_equilibrium_data
      Deallocate all components of the structure.
    • initiate_equilibrium_data_for_input
      Read the part of the command file that controls saving the EIRENE data to the equilibrium IDS.
    • collect_data_for_equilibrium_input
      Read the EIRENE input data intended for the equilibrium IDS from files,
    • transform_equilibrium_for_ids
      Transform the magnetic field data to the form suitable for the equilibrium IDS.
    • save_input_to_equilibrium
      Put EIRENE input to the equilibrium IDS.
    • fetch_input_from_equilibrium
      Get all physical quantities from the equilibrium IDS.
    • get_quantities_from_equilibrium
      Get all physical quantities from the equilibrium IDS.
    • transform_equilibrium_for_eirene

    • write_input_data_from_equilibrium_ids

    subroutine deallocate_equilibrium_data (all_data)

    Deallocate all components of the structure.

    Argument

    Type

    Intent

    Description

    all_data

    type(equilibrium_set)

    inout

    structure to be deallocated


    function initiate_equilibrium_data_for_input (io_unit) result (equilibrium_files)

    Read the part of the command file that controls saving the EIRENE data to the equilibrium IDS.

    Argument

    Type

    Intent

    Description

    equilibrium_files

    type(equilibrium_file_set)

    result

    structure holding the file names obtained from the command file

    io_unitintegerinindex of the I/O unit attached to the command file


    function collect_data_for_equilibrium_input (equilibrium_files) result (equilibrium_data)

    Read the EIRENE input data intended for the equilibrium IDS from files. 

    Uses the subroutine read_quantity_from_file (module eirene_data_io).

    Argument

    Type

    Intent

    Description

    equilibrium_data

    type(equilibrium_data_set)

    result

    structure that accepts the data read from the files

    equilibrium_filestype(equilibrium_file_set)instructure that holds the file names


    subroutine transform_equilibrium_for_ids (equilibrium_data)

    Transform the magnetic field data to the form suitable for the equilibrium IDS. On entry, only a part of the 'equilibrium_data' structure is filled. The subroutine fills the rest.

    The input files contain b_x, b_y, b_z (b is the mag. field unit vector), and B_total. The equilibrium IDS accepts B_R, B_Z, B_phi. Here x=R, y=Z (vertical), z=phi (toroidal).

    Argument

    Type

    Intent

    Description

    equilibrium_data

    type(equilibrium_data_set)

    inout

    structure that holds all magnetic field data


    subroutine save_input_to_equilibrium (idx, imas_controls, grid_controls, equilibrium_data, eirene_grid)

    Put EIRENE input to the equilibrium IDS. The input consists of (1) a triangular grid; (2) a set of quantities (characteristics of several plasma species) defined on this grid. The first item is provided in 'eirene_grid'; the second one, in 'equilibrium_data'. 

    Uses the subroutines: put_quantity_to_ids (module imas_data_io), put_eirene_grid_to_equilibrium (module triangular_grid_ids_io), transform_equilibrium_for_ids (this module).

    Argument

    Type

    Intent

    Description

    idxintegerinindex of the I/O unit attached to the IMAS database
    imas_controlstype(imas_control_panel)inparameters of the IMAS database and basic information to be put to IDS
    grid_controlstype(grid_control_panel)inparameters controlling the grid saving

    equilibrium_data

    type(equilibrium_data_set)

    inout

    structure holding the distributions of physical quantities

    eirene_gridtype(triangular_grid)instructure keeping the EIRENE triangular grid


    subroutine fetch_input_from_equilibrium (idx, grid_controls, fetch_grid, equilibrium_data, eirene_grid)

    Get all physical quantities from the equilibrium IDS, putting them to a type(equilibrium_data_set) structure. If required, get the triangular grid.

    Uses the subroutines: get_triangular_grid_from_equilibrium (module triangular_grid_ids_io), get_quantities_from_equilibrium (this module), transform_equilibrium_for_eirene (this module

    function get_quantity_from_ids (grid_ggd_aos, quantity_aos, code_to_imas_unit_ratio) result (quantity)

    Get a quantity from a given IDS slot (sub-AoS of the ggd AoS intended for the storage of a single physical quantity). The subroutine scans the slot, investigating the identifier names of the grid subsets to which the slot array elements are attached (the 'grid_index' and the 'subset_index' components of the element are used to reach this subset). The subroutine obtains the value arrays attached to two grid subsets: the subset of all triangles and the subset organized to store the averages. These subsets are found by their identifier names, which are given by the module constants main_subset_label and average_subset_label, respectively. The obtained arrays are put into the components 'main_data' and 'average' of the function result. Not suitable for the 'equilibrium' IDS (use get_quantity_from_equilibrium for this IDS).

    Argument

    Type

    Intent

    Description

    quantity

    type(eirene_data)

    result

    structure holding the obtained quantity

    grid_ggd_aostype(ids_generic_grid_aos3_root), intent(in), dimension(:)ingrid_ggd (AoS holding the description of GGD grids)
    quantity_aostype(ids_generic_grid_scalar), dimension(:)inAoS (IDS slot) whence the quantity should be taken
    code_to_imas_unit_ratioreal(ids_real)inratio of the quantity unit in the code to that in IMAS

    function get_quantity_from_equilibrium (grid_ggd_aos, quantity_aos, code_to_imas_unit_ratio) result (quantity)

    idxintegerinindex of the I/O unit attached to the IMAS database
    grid_controlstype(grid_control_panel)inparameters controlling the grid saving/recovering
    fetch_gridlogicalinswitches on reading the grid

    equilibrium_data

    type(equilibrium_data_set)

    out

    the structure holding the data found in the equilibrium IDS (except for the grid)

    eirene_gridtype(triangular_grid)inoutstructure containing the grid; if fetch_input=.true., it is filled with data read from the IDS; otherwise, it remains unchanged.


    function get_quantities_from_equilibrium (ggd, grid_ggd_aos) result (equilibrium_data)

    Get all physical quantities from the equilibrium IDS, putting them to a type(equilibrium_data_set) structureGet a quantity from a given IDS slot (sub-AoS of the ggd AoS intended for the storage of a single physical quantity) of the 'equilibrium' IDS. The subroutine scans the slot, investigating the identifier names of the grid subsets to which the slot array elements are attached (the 'grid_index' and the 'subset_index' components of the element are used to reach this subset). The subroutine obtains the value arrays attached to two grid subsets: the subset of all triangles and the subset organized to store the averages. These subsets are found by their identifier names, which are given by the module constants main_subset_label and average_subset_label, respectively. The obtained arrays are put into the components 'main_data' and 'average' of the function result. Use get_quantity_from_ids for IDS other than 'equilibrium'.

    quantityeirene quantity

    Argument

    Type

    Intent

    Description

    equilibrium_datatype(equilibrium_data_set)resultthe structure holding the obtained data
    grid_ggd_aostype(ids_generic_grid_aos3_root), intent(in), dimension(:equilibrium_ggd)ingrid_ggd ( AoS holding the description of GGD grids)element where the quantities are written
    grid_ggdquantity_aostype(ids_generic_grid_scalardynamic), dimension(:)inAoS (IDS slot) whence the quantity should be taken
    code_to_imas_unit_ratioreal(ids_real)inratio of the quantity unit in the code to that in IMAS

    subroutine put_quantity_for_single_subset (quantity, ids_slot, code_to_imas_unit_ratio, grid_subset, grid_index, subset_label)

    containing the GGD grids


    subroutine transform_equilibrium_for_eirene (equilibrium_data)

    Transform the magnetic field data obtained from the equilibrium IDS into form suitable for EIRENE. On entry, only a part of the 'equilibrium_data' structure is filled. The subroutine fills the rest.

    The input files must contain b_x, b_y, b_z (b is the mag. field unit vector), and B_total. The equilibrium IDS accepts B_R, B_Z, B_phi. Here x=R, y=Z (vertical), z=phi (toroidal)Write a quantity given as array to a given IDS slot, attaching it to a grid subset with a given name. The array size must coincide with the size of the grid subset.

    Argument

    Type

    Intent

    Description

    quantityequilibrium_data

    type(eireneequilibrium_data_set)

    resultinout

    structure holding the obtained quantity

    ids_slottype(ids_generic_grid_scalar)outAoS (IDS slot) whence the quantity should be taken
    code_to_imas_unit_ratioreal(ids_real)inratio of the quantity unit in the code to that in IMAS
    grid_subsettype(ids_generic_grid_dynamic_grid_subset), dimension(:)inarray of grid subsets
    grid_indexintegerinindex of the grid used in the grid_ggd AOS (must be put to IDS)
    subset_labelcharacter(len=*)inidentifier name of the grid subset

    subroutine get_quantity_for_single_subset (ids_slot, subset_label, code_to_imas_unit_ratio, grid_ggd_aos, quantity, grid_index, subset_index)

    Get from a given IDS slot a quantity given as an array attached to the grid subset with a given name (not suitable for the 'equilibrium' IDS).

    ...

    Argument

    ...

    Type

    ...

    Intent

    ...

    Description

    ...

    that holds all magnetic field data


    subroutine write_input_data_from_equilibrium_ids (equilibrium_data, equilibrium_files)

    Write the data extracted from the edge_profiles IDS to files in the format of EIRENE input tallies.

    The names of the generated files are taken from the 'equilibrium_files' structure.

    Argument

    Type

    Intent

    Description

    equilibrium_datatype(equilibrium_data_set)inthe structure holding the obtained data
    equilibrium_filestype(equilibrium_file_set)inthe structure containing the file names


    Module global_objects

    The module contains global constants and service routines used in other modules.

    Constants

        real(IDS_real), parameter :: density_unit_ratio = 1.e6_IDS_real, &
                                   & velocity_unit_ratio = 1.e-2_IDS_real, &
                                   & temperature_unit_ratio = 1._IDS_real, &
                                   & Bfield_unit_ratio = 1._IDS_real
        real(IDS_real), parameter :: length_unit_ratio = 1.e-2_IDS_real

    Each of these constants is the ratio of an EIRENE unit to the corresponding IMAS unit (for example, 1 cm / 1 m = 10^(-2) for length).

    Methods

    • read_next_line
      Return the next file record not starting with '!'.
    • get_imas_version
      Get the versions of IMAS and IMAS Access Layer from the system environment.


    function read_next_line (io_unit, label) result (line)

    Return the next file record not starting with '!' (the function is used for reading only meaningful records, skipping the comment lines

    subroutine get_quantity_for_single_subset_in_equilibrium (ids_slot, subset_label, code_to_imas_unit_ratio, grid_ggd_aos, quantity, grid_index, subset_index)

    Get from a given IDS slot a quantity given as an array attached to the grid subset with a given name (suitable onlyfor the 'equilibrium' IDS).

    Argument

    Type

    Intent

    Description

    ids_slotlinetypecharacter(len=ids_generic_grid_scalar)inAoS (IDS slot) whence the quantity should be takenstring_length)resultthe next meaningful file record
    io_unitintegerinI/O unit attached to the file being read
    subset_labelcharacter(len=*)inidentifier name of the required grid subset
    code_to_imas_unit_ratioreal(ids_real)inratio of the quantity unit in the code to that in IMAS
    grid_ggd_aostype(ids_generic_grid_dynamic), dimension(:)ingrid_ggd AOS
    quantityreal(ids_real), dimension(:), allocatableoutvalues of the quantity at a grid subset
    grid_indexintegeroutindex of the used grid in grid_ggd AOS
    subset_indexintegeroutindex of the grid subset in the 'subset' AoS.

    Module edge_profiles_io

    The module provides tools for information exchange with the 'edge_profiles' IDS.

    Data types provided

    type ion_file_set
        character(len=32) :: n, T !, vx, vy, vz ! To be added
    end type ion_file_set

    This structure holds the collection of names of data files that store characteristics for one ion sort.

    type ion_data_set
        type(eirene_data) :: n, T  !, vx, vy, vz ! To be added
    end type ion_data_set

    This structure holds the collection of data for one ion sort.

    type ion_parameters
        character(len=ids_string_length) :: label
        real(ids_real) :: mass, Z_ion, Z_element
        type(ion_file_set) :: files
        type(ion_data_set) :: data
    end type ion_parameters

    This structure holds all parameters characterizing an ion sort.

    Methods provided

    ...

    text characterizing the expected record content (used in error messages)


    function get_imas_version () result (version)

    Get the versions of IMAS and IMAS Access Layer from the system environment. The function result is a structure with the type 'ids_version_dd_al' (the type used in IMAS for holding this information).

    An example of the environment variable used by the function is as follows:
    IMAS_PREFIX=/gw/swimas/core/IMAS/3.37.0/AL/4.11.0/intel/2020

    Argument

    Type

    Intent

    Description

    versiontype(ids_version_dd_al)resultstructure holding the version information


    Module imas_controls_for_input

    The module contains the tools that permit to control the wrappers via the content of the command file.

     Data types

    type imas_control_panel
        character(len=16) :: database          !! Name of the database/machine
                                               !! Note: the database must exist
                                               !! before running the wrapper
        integer :: shot, run
        character(len=4) :: imas_major_version = '3'
        character(len=16) :: username             !! current login username;
                                                  !! to be provided with
                                                  !! getlog() Fortran routine.
        type(ids_ids_properties) :: ids_properties
        type(ids_code) :: code                 !! Code properties
        character(len=16) :: generic_suffix    !! The last part of the file name if the
                                               !! is generated automatically
    end type imas_control_panel

    This type is designed to hold the control parameters taken from the command file.

     Methods

    • get_imas_controls_for_input_saving
    • get_imas_controls_for_input_fetching


    function get_imas_controls_for_input_saving (io_unit) result (imas_controls)

    Prepare control parameters for saving the EIRENE input to IMAS. Most control parameters are taken from a command file

    ...

    subroutine deallocate_edge_profiles_data (all_data)

    Deallocate all components of the structure.

    alldataedgeprofilesdata_setinout to be deallocated

    Argument

    Type

    Intent

    Description

    imas_controlstype(imas_control_panel)resultStructure hilding the control parameters
    io_unitintegerinI/O unit attached to the command file


    function get_imas_controlsfunction initiate_ion_list_for_input_saving fetching (io_unit) result (ionimas_listcontrols)

    Read that part of the command file of the input wrapper which concerns ionsrepare control parameters for getting the EIRENE input from IMAS. Most control parameters are taken from a command file.

    ionlistionparameters), allocatable, dimension(:)Array that holds parameters of all ions

    Argument

    Type

    Intent

    Description

    imas_controlstype(imas_control_panel)resultStructure hilding the control parameters
    io_unitintegerinindex of the I/O unit attached to the command file

    function initiate_edge_profiles_data_for_input_saving (io_unit) result (edge_profiles_data)

    Read the part of the command file that controls saving the EIRENE data to the edge_profiles IDS.

    ...

    Argument

    ...

    Type

    ...

    Intent

    ...

    Description

    ...

    edge_profiles_data

    ...

    type(edge_profiles_data_set)

    ...

    result

    ...

    Set of parameters controlling the to the ''

    ...

    function collect_data_for_edge_profiles_input (edge_profiles_data)

    Read the EIRENE input data intended for the edge_profiles IDS from files.

    ...

    Argument

    ...

    Type

    ...

    Intent

    ...

    Description

    ...

    edge_profiles_data

    ...

    type(edge_profiles_data_set)

    ...

    inout

    ...

    structure that contains the names of the input files and accepts the data read from the files

    Module equilibrium_io

    ????????????

    Module global_parameters

    ??????????????

    Module imas_controls_for_input

    ????????????

    Main files  save_input_main.f90   and  provide_input_main .f90 

    The wrapper program contained in the file  save_input_main .f90  performs the following actions:

    • ????????      Initializes an instance of the  edge_profiles   IDS in the code memory with writing some mandatory fields.
    • Writes some labels to the IDS.
    • Allocates the  grid_ggd  AOS with only one element.
    • Reads information about the grid from files and establishes grid edges, using the  read_eirene_grid  function (module  triangular_grid_module).
    • Puts the grid information into the IDS, using the  put_triangular_grid_to_ids  subroutine (module  triangular_grid_ids_io).
    • Creates the corresponding IDS in an IMAS database.
    • Writes the IDS prepared in the code memory to the IMAS database and closes the database.

    The program contained in the file  recover_grid.f90  performs the following actions:

    ...


    Main files  save_input_main.f90   and  provide_input_main .f90 

    The wrapper program contained in the file  save_input_main .f90  performs the following actions:

    • Reads the command file 'save_input.par', putting its content to the structures 'imas_controls', 'grid_controls', 'equilibrium_files', and 'edge_profiles_data'.
    • Reads information about the grid from files and establishes grid edges, using the  read_eirene_grid  function (module  triangular_grid_module).
    • Inputs distributions of input tallies from data files, invoking the functions 'collect_data_for_edge_profiles_input' and 'collect_data_for_equilibrium_input'.
    • Creates an IMAS database entry, invoking the IMAS library subroutine 'imas_create_env'.
    • Puts the information (the grid and the tallies) into 2 IMAS IDS's, using the subroutines  'save_input_to_edge_profiles' and 'save_input_to_equilibrium'. 
    • Closes the database, invoking the IMAS library subroutine 'imas_close'.
    • Deallocates the structures holding the data.

    The program contained in the file  provide_input_main .f90  performs the following actions:

    • Reads the command file 'provide_input.par', putting its content to the structures 'imas_controls', 'grid_controls', and 'equilibrium_files'.
    • Opens the IMAS database, invoking the IMAS library subroutine  imas_open_env  .
    • Inputs the data (the grid and the tallies) from 2 IMAS IDS's, using the subroutines  'fetch_input_from_edge_profiles' and 'fetch_input_from_equilibrium'.
    • Writes these data to EIRENE-format files, invoking the subroutines 'write_eirene_grid', 'write_input_data_from_edge_profiles_ids', and 'write_input_data_from_equilibrium_ids'.
    • Closes the database, invoking the IMAS library subroutine 'imas_close'.
    • Deallocates the structures holding the data.

     Known issues

    The statements that are to deallocate the IDS's in the program memory when they are not needed anymore are now commented out (they are in the modules 'edge_profiles_io' and 'equilibrium_io'). The reason is that the IMAS library subroutine 'ids_deallocate' hangs the program 'save_input.exe' if it is called for both IDS's ('edge_profiles' and 'equilibrium'). This issue is yet to be resolved

    ...

    .

    Things to be done

    • Code parameters
    • Headers of data files
    • Generalize to multi-atom ions
    • Resolve the issue with non-deallocated structures
    • Implement ion velocities (after IMAS 3.38 appears)
    • Extend the list of input quantities
    • IMASification of the EIRENE output
    • Try to adjust the processing of exceptions to GSL practices (if worthwhile)

    ...