gs2_diagnostics_config_type Derived Type

type, public, extends(diagnostics_base_config_type) :: gs2_diagnostics_config_type


Contents


Components

Type Visibility Attributes Name Initial
logical, public :: exist = .false.

Does the related namelist exist in the target input file?

integer, public :: index = 0

Used to hold the specific index of numbered namelists

logical, public :: skip_read = .false.

Do we want to skip the read step in init?

logical, public :: skip_broadcast = .false.

Do we want to skip the broadcast step in init?

logical, public :: append_old = .false.

Append output data to a previous output file <run name>.out.nc if it already exists. Grid sizes must be unchanged.

integer, public :: conv_max_step = 80000

Used for Trinity nonlinear convergence (use_nonlin_convergence). The maximum number of Trinity steps, after which consider the run converged regardless

integer, public :: conv_min_step = 4000

Used for the Trinity nonlinear convergence check (use_nonlin_convergence). The minimum number of Trinity steps before checking convergence condition

integer, public :: conv_nstep_av = 4000

Used for the Trinity nonlinear convergence check (use_nonlin_convergence). The number of timesteps the convergence condition averages over

integer, public :: conv_nsteps_converged = 10000

Used for the Trinity nonlinear convergence check (use_nonlin_convergence). The number of steps where convergence is true before convergence is accepted

real, public :: conv_test_multiplier = 4e-1

Used for the Trinity nonlinear convergence check (use_nonlin_convergence). Multiplier for the cumulative average of the heat flux

logical, public :: dump_check1 = .false.

Write out the field-line average of to dump.check1. This option is usually used for Rosenbluth-Hinton calculations.

logical, public :: dump_check2 = .false.

Write out at igomega to <run name>.dc2.

logical, public :: dump_fields_periodically = .false.

Write out to dump.fields.t=(time) every 10 * nwrite timesteps.

logical, public :: enable_parallel = .false.

Enable parallel IO in the .out.nc file. Currently disabled by default and doesn't activate feature when set to true as we hard code that parallel IO isn't supported for the .out.nc file.

logical, public :: exit_when_converged = .true.

Exit when the run has reached convergence

logical, public :: file_safety_check = .true.

Verify that the restart file(s) can be written before starting the run

integer, public :: igomega = 0

Index in to measure various diagnostics at. By default, this is the outboard midplane , but it may be useful to set this to a non-zero value for tearing parity modes.

logical, public :: make_movie = .false.

Write out in real space over time, suitable for creating animations. Timestep period is controlled with nmovie

integer, public :: navg = 10

Number of timesteps to average over for time-averaged diagnostics

integer, public :: ncheck = 10

correction by varying collisionality. But doesn't happen on timesteps when diagnostics are written.

integer, public :: nc_sync_freq = 10

Sets the number of output steps between syncing the netcdf file. Higher values may reduce disk overheads but increase the risk of data loss on unclean exit.

integer, public :: nmovie = -1

Timestep period to write real space fields

integer, public :: nsave = -1

Timestep period for writing restart data if save_for_restart is .true.. Negative values disable the periodic checkpoints.

integer, public :: nwrite = 10

Timestep period for writing outputs

integer, public :: nwrite_mult = 10

Timestep period multiplier for certain "large" diagnostics, which are written every nwrite_mult * nwrite timesteps.

FIXME: What datasets? phicorr_sum, phiextend_sum in old diagnostics, f and fyx in new diagnostics?

logical, public :: ob_midplane = .false.

If .true., write moments at the outboard midplane only, as opposed to along the entire flux surface

real, public :: omegatinst = 1.0e6

Threshold complex frequency () for detecting a numerical instability. If averaged over navg timesteps is greater than omegatinst, abort the run.

real, public :: omegatol = 1e-3

Frequency () convergence tolerance. Consider the simulation converged and finish the run if has changed by less than omegatol over the last navg timesteps.

More explicitly, the convergence criterion is:

where is averaged over the last navg timesteps.

logical, public :: print_flux_line = .false.

Print the instantaneous fluxes to screen/stdout every nwrite timesteps

logical, public :: print_line = .false.

Print estimated frequencies and growth rates to screen/stdout every nwrite timesteps

logical, public :: save_distfn = .false.

Write the distribution function to <rootname>.nc.dfn.<processor> files. Only written at end of simulation

logical, public :: save_for_restart = .false.

Write restart files at the end of the simulation. If nsave is positive, then also enable checkpoints by writing restart files every nsave timesteps.

logical, public :: save_glo_info_and_grids = .false.

Save some layout and distribution information in restart files

logical, public :: save_many = .false.

If .true., write one restart file per processor, otherwise write a single restart file.

If gs2 has not been built with parallel netCDF, save_many is ignored and there is always one file per processor (equivalent to save_many = .true.).

If write_many is enabled, you probably want to also set read_many in order to restart from multiple files.

logical, public :: save_velocities = .false.

Save parallel and perpendicular velocities in final restart and/or distribution function files

logical, public :: serial_netcdf4 = .false.

logical, public :: use_nonlin_convergence = .false.

For nonlinear runs, stop the run when the averaged differential of the summed averaged heat flux drops below a threshold for a period of time, controlled by conv_test_multiplier, conv_nsteps_converged, gs2_diagnostics_knobs, conv_max_step, and conv_min_step.

logical, public :: write_any = .true.

If .false., skip writing any diagnostics

logical, public :: write_apar_over_time = .false.

Write the entire field every nwrite timesteps

logical, public :: write_ascii = .true.

Write diagnostics to text files. Generally this creates a different text file for each diagnostic. Note that this independent of whether or not netCDF files are used.

FIXME: Verify old and new diagnostics write these files in same format

logical, public :: write_avg_moments = .false.

Write flux surface averaged low-order moments of every nwrite timesteps

logical, public :: write_bpar_over_time = .false.

Write the entire field every nwrite timesteps

logical, public :: write_cerr = .false.

Write the collision error every nwrite timesteps to text file with suffix .cres

FIXME: What does this mean?

logical, public :: write_collisional = .false.

Write collisional heating (collisional and hyper viscous rate of loss of free energy for each mode) every nwrite timesteps

logical, public :: write_correlation = .true.

Write two point parallel correlation function calculated from the electric potential as a function of and parallel separation every nwrite timesteps

logical, public :: write_correlation_extend = .false.

Write two point parallel correlation function calculated from the electric potential as a function of and parallel separation, time averaged and calculated along the extended domain every nwrite timesteps once istep > nstep/4.

logical, public :: write_cross_phase = .false.

Write the cross phase between electron density and perpendicular electron temperature every nwrite timesteps. Calculated at both the outboard midplane, averaged across and ; and averaged across all space

logical, public :: write_density_over_time = .false.

Write the whole non-adiabatic part of the density moment every nwrite timesteps

logical, public :: write_eigenfunc = .false.

Write normalised to the value of at the outboard midplane every nwrite timesteps.

If write_ascii is enabled, the text file is <runname>.eigenfunc.

logical, public :: write_fields = .true.

Enable writing every nwrite timesteps

logical, public :: write_final_antot = .false.

Write the right-hand sides of the field equations at the final timestep. If write_ascii is enabled, the file suffix is .antot

logical, public :: write_final_db = .false.

Write at the final timestep. If write_ascii is enabled, the file suffix is .db

logical, public :: write_final_epar = .false.

Write at the final timestep. If write_ascii is enabled, the file suffix is .epar

logical, public :: write_final_fields = .false.

Write at the final timestep. If write_ascii is enabled, the file suffix is .fields

logical, public :: write_final_moments = .false.

Write various moments (densities, parallel and perpendicular velocities and temperatures, and heat and momentum fluxes) at the final timestep. If write_ascii is enabled, the file suffix is .fields and contains the moments, their magnitudes, and field-line averages. The netCDF output has only the values.

logical, public :: write_flux_line = .false.

Write instantaneous fluxes to output file every nwrite timesteps

logical, public :: write_fluxes = .false.

Write fluxes (heat, momentum and particle; total and per-species) every nwrite timesteps.

If run is nonlinear, this defaults to true

logical, public :: write_fluxes_by_mode = .false.

Write fluxes (heat, momentum and particle; total and per-species) as a function of Fourier mode every nwrite timesteps.

If run is nonlinear, this defaults to true

logical, public :: write_full_moments_notgc = .false.

Write moments (density, parallel flow, and parallel and perpendicular temperatures) in non-guiding centre coordinates every nwrite timesteps

logical, public :: write_g = .false.

Write at ik=it=is=1, ig=0 to text file <runname>.dist

logical, public :: write_gs = .false.

logical, public :: write_gyx = .false.

Write as a function of real space every nmovie timesteps to text file ".yxdist"

logical, public :: write_heating = .false.

Write out various heating, free energy and energy injection diagnostics. Text file extension is .heat

logical, public :: write_jext = .false.

Write time averaged external current in the antenna, , as a function of . File suffix is .jext

logical, public :: write_kpar = .false.

Write the parallel spectrum of at final timestep. File suffix is .kpar

logical, public :: write_line = .true.

Print estimated frequencies and growth rates to text file every nwrite timesteps

logical, public :: write_lorentzian = .false.

Write antenna_w every nwrite timesteps

FIXME: Define antenna_w

logical, public :: write_max_verr = .false.

Write the estimated maximum error from velocity space integrals for various quantities

logical, public :: write_moments = .true.

Write various moments (total and non-adiabatic part of perturbed species density, perturbed parallel flow, perturbed parallel and perpendicular temperatures, parallel heat flux, particule flux and heat flux) every nwrite timesteps

logical, public :: write_nl_flux_dist = .false.

Write the poloidal distributions of the fluxes of particles, parallel momentum, perpendicular momentum, and energy every nwrite timesteps.

See section 3.1 and appendix A of Ball et al. PPCF 58 (2016) 045023 as well as section 5 of "GS2 analytic geometry specification"

logical, public :: write_ntot_over_time = .false.

Write the whole total density moment every nwrite timesteps

logical, public :: write_omavg = .true.

Write time-averaged growth rate and frequency to the output text file every nwrite timesteps. Time average is rolling window over the previous navg timesteps

logical, public :: write_omega = .true.

Write instantaneous growth rate and frequency every nwrite timesteps

logical, public :: write_parity = .false.

Write parities in distribution and particle fluxes to text file with the suffix .parity

FIXME: Clarify what this means

logical, public :: write_pflux_sym = .false.

Write particle flux density as a function of and velocity space every nwrite timesteps. Used for looking at the effect of asymmetry. See Parra et al POP 18 062501 2011 and ask Jung-Pyo Lee

logical, public :: write_pflux_tormom = .false.

Write toroidal angular momentum flux carried by particle flux every nwrite timesteps. Only calculated if gs2 is built with LOWFLOW on.

logical, public :: write_phi_over_time = .false.

Write the entire field every nwrite timesteps

logical, public :: write_ql_metric = .true.

Write a simple quasi-linear metric to netcdf.

logical, public :: write_symmetry = .false.

Write the particle and momentum flux as a function of and velocity space. See write_pflux_sym and write_pflux_tormom

logical, public :: write_tperp_over_time = .false.

Write the whole perturbed perpendicular temperature moment every nwrite timesteps

logical, public :: write_upar_over_time = .false.

Write the whole perturbed parallel velocity moment every nwrite timesteps

logical, public :: write_verr = .false.

Write estimates of error resulting from velocity space integrals in the calculation of various quantities every nwrite timesteps.

logical, public :: write_zonal_transfer = .false.

Write the transfer of free energy, , as a function of , averaged over , every nwrite timesteps


Type-Bound Procedures

procedure, public, :: is_initialised => is_initialised_generic

procedure, public, :: init => init_generic

  • private subroutine init_generic(self, name, requires_index, index)

    Fully initialise the config object

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(inout) :: self
    character(len=*), intent(in), optional :: name
    logical, intent(in), optional :: requires_index
    integer, intent(in), optional :: index

procedure, public, :: setup => setup_generic

  • private subroutine setup_generic(self, name, requires_index, index)

    Do some standard setup/checking

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(inout) :: self
    character(len=*), intent(in), optional :: name
    logical, intent(in), optional :: requires_index
    integer, intent(in), optional :: index

procedure, public, :: write_namelist_header

  • private subroutine write_namelist_header(self, unit)

    Write the namelist header for this instance

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(in) :: self
    integer, intent(in) :: unit

procedure, public, :: get_name => get_name_generic

  • private function get_name_generic(self)

    Returns the namelist name. Not very useful at the moment but may want to do more interesting things in the future

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(in) :: self

    Return Value character(len=CONFIG_MAX_NAME_LEN)

procedure, public, :: get_requires_index => get_requires_index_generic

  • private function get_requires_index_generic(self)

    Returns the requires_index value. Allows access whilst keeping the variable private

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(in) :: self

    Return Value logical

procedure, public, nopass :: write_namelist_footer

  • private subroutine write_namelist_footer(unit)

    Write the namelist footer

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: unit
  • private subroutine write_key_val_string(key, val, unit)

    Writes a {key,val} pair where the value is of type character

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: key
    character(len=*), intent(in) :: val
    integer, intent(in) :: unit
  • private subroutine write_key_val_real(key, val, unit)

    Writes a {key,val} pair where the value is of type real

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: key
    real, intent(in) :: val
    integer, intent(in) :: unit
  • private subroutine write_key_val_complex(key, val, unit)

    Writes a {key,val} pair where the value is of type complex

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: key
    complex, intent(in) :: val
    integer, intent(in) :: unit
  • private subroutine write_key_val_integer(key, val, unit)

    Writes a {key,val} pair where the value is of type integer

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: key
    integer, intent(in) :: val
    integer, intent(in) :: unit
  • private subroutine write_key_val_logical(key, val, unit)

    Writes a {key,val} pair where the value is of type logical

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: key
    logical, intent(in) :: val
    integer, intent(in) :: unit
  • private subroutine write_key_val_real_array(self, key, val, unit)

    Writes a {key,val} pair where the value is of type real array

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(in) :: self
    character(len=*), intent(in) :: key
    real, intent(in), dimension(:) :: val
    integer, intent(in) :: unit
  • private subroutine write_key_val_complex_array(self, key, val, unit)

    Writes a {key,val} pair where the value is of type complex array

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(in) :: self
    character(len=*), intent(in) :: key
    complex, intent(in), dimension(:) :: val
    integer, intent(in) :: unit
  • private subroutine write_key_val_integer_array(self, key, val, unit)

    Writes a {key,val} pair where the value is of type integer array

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_config_type), intent(in) :: self
    character(len=*), intent(in) :: key
    integer, intent(in), dimension(:) :: val
    integer, intent(in) :: unit

procedure, public :: read => read_diagnostics_base_config

procedure, public :: write => write_diagnostics_base_config

procedure, public :: reset => reset_diagnostics_base_config

procedure, public :: broadcast => broadcast_diagnostics_base_config

procedure, public, nopass :: get_default_name => get_default_name_diagnostics_base_config

procedure, public, nopass :: get_default_requires_index => get_default_requires_index_diagnostics_base_config

Source Code

  type, extends(diagnostics_base_config_type) :: gs2_diagnostics_config_type
  end type gs2_diagnostics_config_type