6. Turbulence with synthetic diagnostics workflows

The turbulence with synthetic diagnostics workflows consist of the HESEL and RENATE actors for turbulence simulation and synthetic diagnostics.

6.1. HESEL Documentation

The HESEL code is a numerical solver for the set of equations that describe the HESEL model. The HESEL model is a drift-reduced Braginskii type of two-fluid model for electron density, electron and ion pressures, and E-cross-B vorticity of a quasi-neutral plasma. The domain is a 2D slab perpendicular to the magnetic field line located at the outboard-midplane of a tokamak. The slab domain covers parts of the turbulent edge and SOL regions.

_images/hesel_location.png _images/hesel_domain.png

The HESEL 2D slab domain. Images from A.H. Nielsen et al 2019 Nucl. Fusion 59 086059.

The solutions typically show the development of filaments (blobs) near the last-closed-flux-surface. The filaments propagate radially outwards through the SOL region, and carry heat and paticles away from the confined edge region.

_images/hesel_simulation.png

Snapshot of solution fields for HESEL simulation

There are plenty of publications in scientific journals based on HESEL (and its precessor ESEL) simulation data, in which the model equations are also described in detail. Below is listed a selected set of publications:

The HESEL code structure and how to run it as a stand alone code is described in HESEL as stand-alone, the workflow wrapper documentation is described in HESEL as an actor, and a guide on how to include HESEL in the KEPLER workflow is given in HESEL in the KEPLER workflow.

6.1.1. HESEL as stand-alone

HESEL can be run outside the workflow as a stand-alone code, where input are read from an input file and, optionally, from experimental data profiles. The output data are stored in a HDF5 datafile.

6.1.1.1. Obtaining and building HESEL

The HESEL source code is currenty maintained in a private Github repository (C-HESEL). For obtaining the source code please request access from ahnie@fysik.dtu.dk.

The following recipe describes how to load and build HESEL on the EUROfusion Gateway infrastructure.

On the Gateway first make sure the required modules are loaded. This can be assured by

module purge
module load cineca
module load imasenv
imasdb AUG
module unload hdf5
module load hdf5/1.8.17--intelmpi--2017--binary

For future convenience the above code block can be added to the ~/.login file and, if it does not load upon login, executed by source ~/.login.

Navigate to your Gateway public directory cd ~/public and clone the C-HESEL repository from GitHub

git clone https://github.com/PPFE-Turbulence/C-HESEL.git

Navigate into the C-HESEL directory cd C-HESEL and checkout the develop branch to work with the most recent updates

git checkout develop

Navigate into the FUTILS source directory cd FUTILS_version2.2/src and return

make clean && make -f Makefile.gateway

Navigate back to C-HESEL cd ../.. and return

make clean && make esel

Everything is now set up for you to run HESEL, which is located in C-HESEL/bin/esel.marconi.A3.

6.1.1.2. HESEL input

The stand-alone version of HESEL can be run either entirely from an input file, or in a setup where the initial density and temperature fields are read from an additional datafile. The probe positions for synthetic diagnogstics probes are provided in a separate datafile. All input files must be located in the same directory.

6.1.1.2.1. HESEL input

The HESEL input is read from a plain text file, with the input variables separated by line breaks. An example of an input file is given here. The main variables are

Variable

Unit

Decription

codenametype

Machine identifier

shot_no

Experiment shot number

run_no

Simulation run number

nx

Number of spatial grid points in x direction

ny

Number of spatial grid points in y direction

xmin

rhos

Minimum x-axis limit

xmax

rhos

Maximum x-axis limit

ymin

rhos

Minimum y-axis limit

ymax

rhos

Maximum y-axis limit

dt

oci^-1

Value of discrete timestep

end_time

oci^-1

Duration of simulation

out_time

oci^-1

Time between small outputs

outmult

Number of small outputs before full fields are written out

edge

rhos

Width of edge region

SOL

rhos

Width of SOL region

wall

rhos

Width of wall region

n0

m^-3

Electron density at last closed flux surface

te0

eV

Electron temperature at last closed flux surface

ti0

eV

Ion temperature at last closed flux surface

Mp

eV

Parallel Mach number

A

Mass number

Z

Charge number

Zeff

Effective charge

q

Safety factor at last closed flux surface

B0

T

Magnetic field on axis

r0

m

Minor radius

R0

m

Major radius

Lp

m

Parallel connection length in the SOL region

Lpwall

m

Parallel connection length in the wall shadow region

The remaining variables in the input file are better left unchanged.

Variable

Default value

coordsys

0

gamma

0.00

sigma

0.00

bprof

1.0

damping_nt

1

dissipation_nt

beta

0

mue_n_fac

1.0

mue_p_fac

1.0

mue_P_fac

1.0

mue_w_fac

1.0

ballooning

2

visc_layer_size

0.25

drift_wave_term

2

drift_wave_Te

1

radial_electric_field

0

MP

0

MP_NS

100000

MP_SR

0.0000005

hyper_factor

0.00000

sheath

2

background

1

background_n

0.025

background_t

1.0

background_time

20

ramb_up

1

ramb_up_time

5000

fp

10

fixed_time

50

init

999

init_ds

1

mean_flow

5

mean_flow_time

0.025

mean_flow_radial

1.0

mean_dissipation

0

randbedingung0

2

bdvala0

0.000000

bdvalb0

0.000000

amp_random0

0.0001

randbedingung1

2

bdvala1

1

bdvalb1

0.00

amp_random1

0.0001

randbedingung2

2

bdvala2

1

bdvalb2

0.00

amp_random2

0.0001

randbedingung3

2

bdvala3

1

bdvalb3

0.00

amp_random3

0.0001

6.1.1.2.2. Profile datafile

The profile datafile provide the initial density and temperature field profiles, which also serve as reference profiles towards which the solution is relaxed in the innermost edge region of the HESEL domain. The datafile must have the filename exp_profiles.dat and an example can be found here.

The datafile consists of four space-separated columns of data, so that each row constitute a datapoint. In each datapoint is the following data

Column

Variable

Unit

1

Radial position with LCFS at 0

m

2

Electron density

10^19 m^-3

3

Electron temperature

eV

4

Ion temperature

eV

6.1.1.2.3. Probe positions

The HESEL code will produce a set of default output data described in HESEL output. Additional temporally highly resolved 1D data can be added from synthetic probes located in a row througout the domain. They are poloidally centered in the domain and located with a radial distance of 1 rhos. In the probe datafile, which must be named myprobe.dat, is specified the number of tips and their relative location, and the fields measured. An example of a probe datafile is found here.

The format must follow that of the provided example. Each tip has a specified relative position to the probe position in units of grid point spacing. I.e., the block

# -------------------------------------------------------------------
#  TIP1
# -------------------------------------------------------------------
@TIP1   10.0    0.0     hdf5
density
vorticity
temperature
potential
velocity_radial
velocity_poloidal

adds a probe-tip at 10 grid points radially outwards and at the same poloidal position as that of the probe. It outputs the electron density (density), E-cross-B vorticity (vorticity), electron temperature (temperature), the electrostatic potential (potential), radial velocity (volocity_radial), and poloidal velocity (velocity_poloidal) at the specified gridpoint. All output are in Bohm-normalized units.

6.1.1.3. HESEL code structure

The HESEL stand-alone code structure is graphed below

_images/hesel_esel_c_GRAPH.png

HESEL structure graph

The workflow of the top level functions are described in the following. The function description is meant to give an high-lelvel overview of the workflow and supplement the in-code comments.

  • main(int argc, char *argv[])

    The main function is a wrapper for passing the programme arguments argc and argv to the esel_start_from_c function. The variable argv is a character list of programme arguments and argc is an integer that denote the number of items in argv.

    • esel_start_from_c(itype argc, ctype **argv)

      The esel_start_from_c function contains the core workflow of the solver. It creates the two structures, data and para, that, together with argc and argv, are passed through the HESEL workflow.

      Everything up to the run_esel function is initialization of data, MPI, etc.

      The programme arguments are interpreted and applied in func_passing_argv

      • func_passing_argv(argc, argv, &data, &para)

        The function determine if the simulation is starting from previous simulation data or not, by checking, if the flag -restart is in the programme arguments. It iterates through the other arguments; if -I the input data are to be loaded from an ini-file, if -H the input data are to beloaded from an HDF5 file, and if -wrapper the data are to passed from a programme wrapper. The input file option is stored in the para structure and applied after the set_default_parameters function.

      and the set_default_parameters function is called.

      • set_default_parameters(&data,&para)

        This function is deprecated and does not alter the data and para structures.

      Depending on where the input parameters are stored, one of three functions are called. The information of input file type is set in the para structure by the func_passing_argv function. If the input are stored in a c-file func_wrapper is called, in an ini-file func_inifile is called, and in a HDF5 file func_hdf5file is called.

      • func_wrapper(argc, argv, &data, &para)

        Checks if the restart option is set to true in the para structure; if so, the code exits, as that option is not compatible with the wrapper setup.

        The function calls a number of subfuntions to initialize the para and data structures from the input given by the wrapper, that would otherwise be read from an ini-file as described in HESEL input. All data are appended to the para and data structures.

      • func_inifile(argc, argv, &data, &para)

        Checks if the restart option is set to true in the para structure; if so, the code exits, as that option is not compatible with the inifile setup.

        The function calls a number of subfuntions to initialize the para and data structures from the input file described in HESEL input. All data are appended to the para and data structures.

      • func_hdf5file(argc, argv, &data, &para)

        The function calls a number of subfuntions to initialize the para and data structures from the input given by a HDF5 file, that would otherwise be read from an ini-file as described in HESEL input. The data are stored in the /params/structure_data and /params/structure_param groups described in HESEL output. All data are appended to the para and data structures.

      The data and para structures are initialized further in func_common_init

      • func_common_init(&data, &para)

        The current time variables are stored in the para structure, and the data attribute range is set from the domain limits stored in para. The function checks the para attribute coordsys to determine the labels on the data attributes coordsys and dim_label.

      and settings defined in esel_settings.

      • esel_settings(&data, &para)

        Derived parameters are stored in the para and data structures. This includes grid spacings, output switches, datafile name (based on the para attributes codename, shot_no and run_no), and computer specific attributes.

      The MPI communicaters and parameters are set up in PH_MPI_Prepare

      • PH_MPI_Prepare(&data,&para)

        The geometry is specified for the MPI. Periodic boundaries are set and neighbouring coordinates are defined for parallelization in the x-direction.

      and fields are initialized in func_common_init_fields.

      • func_common_init_fields(&data, &para)

        The solution fields are initialized with random noise. If no input files are provided the solution fields are assigned default initial profiles.

      The probe configuration, for obtaining high temporally resolved data at probe positions, are loaded in the function read_probe_configuration.

      • read_probe_configuration()

        The probe configuration is obtained from the probe configuration file Probe positions. A structure array of pype probe_t is created to store the probe information.

      Everything is now initialized and the system of differential equations is solved in run_esel

      • run_esel(&data, &para)

        The first half of the run_esel function finalizes the initialization; variables and fields are allocated and some loaded from the data and para structures. The logarithm of boundary values and fields is calculated for the solution fields. The field background values are derived. The ion temperature ramp-up scheme is initialized, and boundary values are applied.

        The HDF5 output file is created and initial data stored in the para and data structures are written to this.

        The second half of the run_esel function consists of a loop which iterates through the time range in steps of dt. The time loop has the following steps:

        • Print datasets to the HDF5 output file

          At specified time intervals the soulution fields and derived fields (w.g. profiles and integrated values) are written to the output file.

        • The fields are testet for nan values

        • The ion temperature is ramped up

          If a ramp-up scheme is chosen for the ion temperature the increase in ion edge pressure profile is executed at this stage, and the inner boundary condition updated accordingly.

        • The forward time step values of the (logarithmic) solution fields are calculated

          In the order; generalized vorticity, density, electron temperature, ion temperature. After each time step is calculated the step is made and dissipation applied.

        • The solution fields are derived

          From their log values, and the vorticity and electrostatic potential is calculated from the generalized forticity.

        • The higly resolved probe data is written

        • Running avarages, turbulent energy, particle flux are calculated

          And the energies are written to the output file

      The program is terminated by an exit() command after the time loop termination condition is reached.

6.1.1.4. Running a HESEL simulation

HESEL is run in from the data directory, containing the input file (and optional data files) using mpirun. In the data directory return

mpirun -np=<number_of_processors> <path_to_esel> -I <input_file_name>

Here <number_of_processors> is the number of processors to run the code and must be a power of 2, <path_to_esel> is the path to the compiled HESEL code conventionally located in C-HESEL/bin/esel.marconi.A3 for a MARCONI install, and <input_file_name> is the name of the input file described in HESEL input.

6.1.1.5. HESEL output

For a run with an input file filename HESEL produces two output files; filename.erh and filename.h5. The .erh file reviews the run settings and displays key parameters for the simulation. The full simulation data output is stored in the hdf5 file.

The structure of the output datafile filename.h5 is

/data
/data/var0d
/data/var1d
/data/var1d/fixed-probes
/data/var2d
/data/var2d/grid
/data/var3d
/data/xanimation
/documentation
/equil
/params
/params/structure_data
/params/structure_param

The content of the groups are described in detail below.

  • data

    The data group stores the subgroups with the solution data and derived data that are of interest. The data are grouped into the number of spatial dimensions of the data, e.g., the var1d group contains data of one spatial dimension (e.g., temporal evolution of profiles). The data subgroups are

    • var0d This group contains derived data of zero spatial dimension.

      Variable

      Dimensions

      Description

      SOL_density

      end_time/out_time

      Spatially iend_time/out_timeegrated SOL density

      SOL_energy_elec

      end_time/out_time

      Spatially iend_time/out_timeegrated SOL electron energy

      SOL_energy_ion

      end_time/out_time

      Spatially iend_time/out_timeegrated SOL ion energy

      Te0

      end_time/out_time

      Electron reference temperature at LCFS

      Ti0

      end_time/out_time

      Ion reference temperature at LCFS

      cflp

      end_time/out_time

      cflr

      end_time/out_time

      dEdt

      end_time/out_time

      energy_elec

      end_time/out_time

      Spatially iend_time/out_timeegrated electron energy for the domain

      energy_gkin

      end_time/out_time

      energy_ion

      end_time/out_time

      Spatially iend_time/out_timeegrated ion energy for the domain

      energy_kin

      end_time/out_time

      energy_kin_0

      end_time/out_time

      energy_kin_f

      end_time/out_time

      energy_out_P

      end_time/out_time

      energy_out_p

      end_time/out_time

      pe_curv_f

      end_time/out_time

      pe_curv_pi

      end_time/out_time

      pi_curv_f

      end_time/out_time

      shear

      end_time/out_time

      total_density

      end_time/out_time

      Spatially iend_time/out_timeegrated density for the domain

      total_energy

      end_time/out_time

      Spatially integrated total energy for the domain

    • var1d This group contains derived data of one spatial dimension.

      Variable

      Dimensions

      Description

      CLSOED field line

      Nx

      Array with 1 in edge region, 0 in SOL region

      Density-Prof

      end_time/(out_time*otmult) x Nx

      Low temporally resolved density profile

      Density-inst

      end_time/out_time x Nx

      High temporally resolved density profile

      Diff-Ion-Flux-Tgrad(n)-inst

      end_time/out_time x Nx

      Ti*grad(n) profile

      Diff-Ion-Flux-grad(P)-inst

      end_time/out_time x Nx

      grad(Pi) profile

      Diff-Ion-Flux-ngrad(T)-inst

      end_time/out_time x Nx

      n*grad(Ti) profile

      Diff-den-Flux-grad(n)-inst

      end_time/out_time x Nx

      grad(n) profile

      Diff-ele-Flux-grad(p)-inst

      end_time/out_time x Nx

      grad(Pe) profile

      Ele-Pres-Prof

      end_time/(out_time*otmult) x Nx

      Low temporally resolved electron pressure profile

      Ele-Pres-inst

      end_time/out_time x Nx

      High temporally resolved electron pressure profile

      Ele-Temp-Prof

      end_time/(out_time*otmult) x Nx

      Low temporally resolved electron temperature profile

      Ele-Temp-inst

      end_time/out_time x Nx

      High temporally resolved electron temperature profile

      Flux-P-tur

      end_time/(out_time*otmult) x Nx

      Flux-P-tur-inst

      end_time/(out_time*otmult) x Nx

      Flux-T-tur

      end_time/(out_time*otmult) x Nx

      Flux-heat-P-tur

      end_time/(out_time*otmult) x Nx

      Flux-heat-p-tur

      end_time/(out_time*otmult) x Nx

      Flux-p-tur

      end_time/(out_time*otmult) x Nx

      Flux-p-tur-inst

      end_time/(out_time*otmult) x Nx

      Flux-pres_tur

      end_time/(out_time*otmult) x Nx

      Flux-t-tur

      end_time/(out_time*otmult) x Nx

      Gen-Vort-Prof

      end_time/(out_time*otmult) x Nx

      Low temporally resolved generalized vorticity profile

      Gen-Vort-inst

      end_time/out_time x Nx

      High temporally resolved generalized vorticity profile

      Ion-Pres-Prof

      end_time/(out_time*otmult) x Nx

      Low temporally resolved ion pressure profile

      Ion-Pres-inst

      end_time/out_time x Nx

      High temporally resolved ion pressure profile

      Ion-Temp-Prof

      end_time/(out_time*otmult) x Nx

      Low temporally resolved ion temperature profile

      Ion-Temp-inst

      end_time/out_time x Nx

      High temporally resolved ion temperature profile

      OPEN field line

      Nx

      Array with 0 in edge region, 1 in SOL region

      Pot-Prof

      end_time/(out_time*otmult) x Nx

      Low temporally resolved electrostatic potential profile

      Pot-inst

      end_time/out_time x Nx

      High temporally resolved electrostatic potential profile

      Pressure-stress1-inst

      end_time/out_time x Nx

      Pressure-stress2-inst

      end_time/out_time x Nx

      Pressure-stress3-inst

      end_time/out_time x Nx

      Pressure-work1-inst

      end_time/out_time x Nx

      Pressure-work2-inst

      end_time/out_time x Nx

      Pressure-work3-inst

      end_time/out_time x Nx

      Reynolds-stress-inst

      end_time/out_time x Nx

      Reynolds-work-inst

      end_time/out_time x Nx

      Tur-par-Flux

      end_time/(out_time*otmult) x Nx

      Tur-par-Flux-inst

      end_time/out_time x Nx

      fp_P

      Nx

      fp_fluc

      Nx

      fp_mean

      Nx

      fp_n

      Nx

      fp_p

      Nx

      fp_w

      Nx

      gf-inst

      end_time/out_time x Nx

      mean_vp

      end_time/(out_time*otmult) x Nx

      mean_w

      end_time/(out_time*otmult) x Nx

      rcor

      Nx

      sheath_profile

      end_time/(out_time*otmult) x Nx

      Redundant

      visc_P

      end_time/(out_time*otmult) x Nx

      visc_n

      end_time/(out_time*otmult) x Nx

      visc_p

      end_time/(out_time*otmult) x Nx

      visc_w

      end_time/(out_time*otmult) x Nx

      • fixed-probes

        This group contains temporally higly resolved spatial data at probe postions. Below is given an example for probes with only one probe tip (TIP0). For multiple probe tips the output data list expands accordingly.

        Variable

        Dimensions

        Description

        TIP0_density

        end_time/10 x xmax

        Density at probe position at very high temporal resolution

        TIP0_potential

        end_time/10 x xmax

        Electrostatic potential at probe position at very high temporal resolution

        TIP0_temperature

        end_time/10 x xmax

        Electron temperature at probe position at very high temporal resolution

        TIP0_temperature_i

        end_time/10 x xmax

        Ion temperature at probe position at very high temporal resolution

        TIP0_velocity_poloidal

        end_time/10 x xmax

        Poloidal velocity at probe position at very high temporal resolution

        TIP0_velocity_radial

        end_time/10 x xmax

        Radial velocity at probe position at very high temporal resolution

        TIP0_vorticity

        end_time/10 x xmax

        Vorticity at probe position at very high temporal resolution

    • var2d

      This group contains the solution data (Density, Gen_Vorticity, Ion_Pressure, Pressure) and derived data of (mostly) two spatial dimensions.

      Variable

      Dimensions

      Description

      Density

      end_time/(out_time*otmult) x Nx x Ny

      Density

      Gen_Potential

      end_time/(out_time*otmult) x Nx x Ny

      Generalized potential

      Gen_Vorticity

      end_time/(out_time*otmult) x Nx x Ny

      Generalized vorticity

      Ion_Pressure

      end_time/(out_time*otmult) x Nx x Ny

      Ion pressure

      Ion_temp

      end_time/(out_time*otmult) x Nx x Ny

      Ion temperature

      Magnetic Field (b_0)

      Nx

      Magnetic field

      Potential

      end_time/(out_time*otmult) x Nx x Ny

      Electrostatic potential

      Pressure

      end_time/(out_time*otmult) x Nx x Ny

      Electron pressure

      Temperature

      end_time/(out_time*otmult) x Nx x Ny

      Electron temperature

      Vorticity

      end_time/(out_time*otmult) x Nx x Ny

      Vorticity

      • grid This group contains the two dimensional spatial grid.

      Variable

      Dimensions

      Description

      x

      Nx x Ny

      x-grid

      y

      Nx x Ny

      y-grid

    • var3d

      Currently no data are stored in this group.

    • xanimation This group contains the solution data (and the electric potential) at high spatial, low temporal resolution, aimed for visual representation of the data.

      Variable

      Dimensions

      Description

      density

      end_time/out_time x Nx/4 x Ny/4

      High temporal, low spatial resolved density (for animations)

      electron_pressure

      end_time/out_time x Nx/4 x Ny/4

      High temporal, low spatial resolved electron pressure (for animations)

      ion_pressure

      end_time/out_time x Nx/4 x Ny/4

      High temporal, low spatial resolved ion pressure (for animations)

      potential

      end_time/out_time x Nx/4 x Ny/4

      High temporal, low spatial resolved electrostatic potential (for animations)

      vorticity

      end_time/out_time x Nx/4 x Ny/4

      High temporal, low spatial resolved vorticity (for animations)

  • documentation

    The documentation group contains two datafiles, which are merely copies of the input files.

    Filename

    Description

    myprobe.dat

    Copy of myprobe.dat datafile described in Probe positions.

    run.ini

    Copy of input file described in HESEL input.

  • equil

    Currently no data are stored in this group.

  • params

    This group contains two subgroups with parameter data that are either defined in, or derived directly from, the input file. These data are mainly for the purpose of restarting a simulation from an existing HDF5 output file.

    • structure_data

      Variable

      Dimensions

      Description

      cwd

      1

      Current working directory

      desc

      1

      Redundant

      dims0

      1

      Same as ny

      dims1

      1

      Number of x gridpoints

      dims2

      1

      Redundant

      elements0

      1

      Same as ny

      elements1

      1

      Same as nx

      elements2

      1

      Redundant

      lnx

      1

      Same as nx

      lny

      1

      Same as ny

      lnz

      1

      Redundant

      maschine

      1

      Operating system

      number

      1

      Redundant

      nx

      1

      Number of x gridpoints per processor

      ny

      1

      Number of y gridpoints

      nz

      1

      Redundant

      offx

      1

      offy

      1

      offz

      1

      range00

      1

      Lower y boundary [rhos]

      range01

      1

      Upper y boundary [rhos]

      range10

      1

      Lower x boundary [rhos]

      range11

      1

      Upper x boundary [rhos]

      range20

      1

      Redundant

      range21

      1

      Redundant

      rank

      1

      2 for 2D code (only option)

    • structure_param

      Variable

      Dimensions

      Description

      A

      1

      Given in HESEL input

      B0

      1

      Given in HESEL input

      Lp

      1

      Given in HESEL input

      Lpwall

      1

      Given in HESEL input

      MP

      1

      Given in HESEL input

      MP_NS

      1

      Given in HESEL input

      MP_SR

      1

      Given in HESEL input

      Mp

      1

      R0

      1

      Given in HESEL input

      SOL

      1

      Given in HESEL input

      Te0

      1

      Given in HESEL input

      Ti0

      1

      Given in HESEL input

      Z

      1

      Given in HESEL input

      Zeff

      1

      Given in HESEL input

      adv_P

      1

      adv_n

      1

      adv_p

      1

      adv_w

      1

      amp_random0

      1

      Given in HESEL input

      amp_random1

      1

      Given in HESEL input

      amp_random2

      1

      Given in HESEL input

      amp_random3

      1

      Given in HESEL input

      background

      1

      Given in HESEL input

      background_n

      1

      Given in HESEL input

      background_t

      1

      Given in HESEL input

      background_time

      1

      Given in HESEL input

      bdval00

      1

      bdval01

      1

      bdval10

      1

      bdval11

      1

      bdval20

      1

      bdval21

      1

      bdval30

      1

      bdval31

      1

      bdval40

      1

      bdval41

      1

      beta

      1

      Given in HESEL input

      boundary0

      1

      boundary1

      1

      boundary2

      1

      boundary3

      1

      bprof

      1

      Given in HESEL input

      con_P

      1

      con_p

      1

      coordsys

      1

      Given in HESEL input

      cs

      1

      Ion sound speed [rhos w_ci]

      damping_nt

      1

      Given in HESEL input

      dissipation_nt

      1

      Given in HESEL input

      dkx

      1

      dky

      1

      dkz

      1

      drift_wave_Te

      1

      Given in HESEL input

      drift_wave_term

      1

      Given in HESEL input

      dt

      1

      Given in HESEL input

      dx

      1

      x grid point spacing [rhos]

      dy

      1

      y grid point spacing [rhos]

      dz

      1

      Redundant

      edge

      1

      Given in HESEL input

      end_time

      1

      Given in HESEL input

      energy

      1

      fixed_time

      1

      fp

      1

      Given in HESEL input

      gamma

      1

      Given in HESEL input

      gradB

      1

      hyper_factor

      1

      Given in HESEL input

      init

      1

      Given in HESEL input

      init_ds

      1

      Given in HESEL input

      lamda

      1

      limiter

      1

      mean_dissipation

      1

      mean_flow

      1

      mean_flow_radial

      1

      mean_flow_time

      1

      mue_P

      1

      mue_P_fac

      1

      Given in HESEL input

      mue_n

      1

      mue_n_fac

      1

      Given in HESEL input

      mue_p

      1

      mue_p_coupling

      1

      mue_p_fac

      1

      Given in HESEL input

      mue_t

      1

      mue_t_fac

      1

      mue_w

      1

      mue_w_fac

      1

      Given in HESEL input

      ne0

      1

      nprof

      1

      offset

      1

      otmult

      1

      Given in HESEL input

      out_time

      1

      Given in HESEL input

      phiprof

      1

      q

      1

      Given in HESEL input

      r0

      1

      Given in HESEL input

      ramb_up

      1

      Given in HESEL input

      ramb_up_time

      1

      Given in HESEL input

      rho_e

      1

      Electron thermal gyro-radius [m]

      rho_i

      1

      Ion thermal gyro-radius [m]

      rho_s

      1

      Cold-ion hybrid thermal gyro-radius [m]

      run_no

      1

      Given in HESEL input

      sheath

      1

      shot_no

      1

      Given in HESEL input

      sigma

      1

      Given in HESEL input

      time

      1

      tprof

      1

      w_ce

      1

      Electron cyclotron frequency [s^-1]

      w_ci

      1

      Ion cyclotron frequency [s^-1]

      wall

      1

      Given in HESEL input

      xmax

      1

      Given in HESEL input

      xmin

      1

      Given in HESEL input

      ymax

      1

      Given in HESEL input

      ymin

      1

      Given in HESEL input

6.1.2. HESEL as an actor

In this part HESEL is build as a library. First ensure that you have access to the cpo_interface SVN repository. In a browser load

https://gforge-next.eufus.eu/

and ask for a new password if you cannot login. If you do not have access contact ahnie@fysik.dtu.dk. On the EUROfusion Gateway open a terminal, change directory to (suggested) your public folder. Download the C-HESEL repository by following the guide in HESEL as stand-alone. In the C-HESEL repository check out the branch called WPCD-workflow-dev

git checkout WPCD-workflow-dev

and make sure that the commit 40da0f4dcb9aa6063d500f6c4fa824071042b77e made on 23.6.2021 is included. Now, in the C_HESEL directory return

cd FUTILS_version2.2/src
make -f Makefile.gateway clean
make -f Makefile.gateway
cd ../..
make clean
make esel
make libhesel

After that, and still in you public folder, return the following

svn co https://gforge-next.eufus.eu/svn/cpo_interface

to checkout the wrapper repository. Now enter the directory

cd cpo_interface/tags/3.31.0/ids

and edit the file Makefile.gateway. In this file you will find four lines that contain a reference to a path belonging to the user g2ahnie. Those lines are line no. 11, 13, 20 and 23. Change the path in those lines to that which points to the corresponding files in the C-HESEL repository in your public directory. Save the edit, quit the editor and in the terminal return

make -f Makefile.gateway clean
make -f Makefile.gateway libhesel

to make the HESEL library libheselwrapper.a.

6.1.3. HESEL in the KEPLER workflow

On the EUROfusion Gateway build the HESEL library as described in HESEL as an actor. Open a terminal and return the following to load the required modules

module purge
module load cineca
module load imasenv/3.31.0/rc
module unload itm-hdf5 hdf5
module load  itm-hdf5/1.8.17/intel/17.0/mpi
module switch kepler/2.5p5-3.1.1_3.31.0_rc
module switch imas-fc2k/4.13.0

If not installed already, install Kepler by returning

kepler_install <username>

where <username> is your usename for the Gateway and allow for the directory to be created if prompted for this. After installing Kepler load it by

kepler_load <username>

A number of directories have to be moved to other partitions and replaced by symbolic links. In the terminal return the following

cd ~
mkdir work (if it does not already exist)
mkdir work/KEPLEREXECUTION (if it does not already exist)
cd public
mv imasdb ../work/
ln -s ../work/imasdb imasdb
ln -s ../work/KEPLEREXECUTION KEPLEREXECUTION

And an IMAS database initiated

imasdbs -u <username>

In the terminal return

fc2k

This will open a new window to generate a Kepler actor.

_images/hesel_generate_actor.png

Kepler actor generator window

In the file menu click open and navigate to the file (most likely located in) public/cpo_interface/tags/3.31.0/scripts/Actors/HESEL_1.0.0.xml and click open. In the tabs Environment, Parameters, and Source, if applicable, change the paths that belong to the user g2ahnie to the corresponding paths in your system. Click Generate to generate the actor from the wrapper that calls the HESEL code.

In the terminal run KEPLER by returning

kepler

this will open a new window. In KEPLER open the HESEL actor that was just generated in file -> open to load the workflow.

_images/hesel_kepler_workflow.png

HESEL workflow in KEPLER

In the first actor, START, constrols the workflow input. By double clicking the box a window pops up which allows for the user to edit the workflow input parameters

_images/hesel_kepler_START.png

Edit HESEL workflow input parameters

The input have the following descriptions

Variable

Description

user_name

Name of user from which experiment imas database are loaded

machine_name

Short name of device

shot_number

Machine shot number

input_run

Input run number for HESEL realisation

output_run

Output run number for HESEL

time

Time at which experimental data are pulled

The second actor, MAP_EXP_DATA, maps the input profiles that HESEL will use as initial conditions and reference profiles in the forcing region. If you double click the box the following editing window is opened

_images/hesel_kepler_MAP.png

Edit HESEL workflow data mapping parameters

The input have the following descriptions

Variable

Description

R_start

Radial profile coordinate starting position

R_end

Radial profile coordinate ending position

Z_start

Longitudinal profile coordinate starting position

Z_end

Longitudinal profile coordinate ending position

Npoints

Grid resolution

Visualize_data

Whether to visualize the profile data or not

Note that if yes is selected for Visualize_data, the data will be displayed as below and the workflow stops.

_images/hesel_kepler_profiles.png

Example of resulting window when Visualize_data is selected

To run the workflow beyond the MAP_EXP_DATA actor the value for Visualize_data has to be no when the workflow is initiated.

The third, and last editable, actor is the HESEL actor. Right-click this box and select Open Actor to edit the submission script and non-predetermined HESEL input parameters. The following window appears when the actor is opened.

_images/hesel_kepler_HESEL.png

Workflow within the HESEL actor

The only relevant actor within this sub-workflow is that called HESEL. When this box is double clicked the following window appears

_images/hesel_kepler_HESEL__edit.png

The HESEL actor where submission data can be edited

The batch file appears in this window and it is possible to adjust this to alter submission data. If the button Edit Code Parameters is clicked the following option to edit the (mainly numerical) HESEL input parameters that cannot be determined from experimental data appears

_images/hesel_kepler_HESEL__para.png

The non-predetermined HESEL input parameters can be edited

Where the descriptions of the parameters is given in HESEL input.

When the input parameters for all actors of the workflow are set the HESEL EDGE TURBULENCE WORKFLOW is initated by pressing the green triangle button in the outermost workflow.

The output data are stored in the ~/work/imasdb folder according to the structure described in HESEL output.

6.2. RENATE Documentation