Initialise this module and all its dependencies, including defining NetCDF vars, call real_init, which calls read_parameters; broadcast all the different write flags.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
logical, | intent(in) | :: | list |
If true, this is a "list-mode run" and so turn off print_flux_line and print_line if set |
||
integer, | intent(in) | :: | nstep |
Maximum number of steps to take |
||
type(diagnostics_config_type), | intent(in), | optional | :: | gs2_diagnostics_config_in |
Input parameters for this module |
|
type(standard_header_type), | intent(in), | optional | :: | header |
Header for files with build and run information |
subroutine init_gs2_diagnostics (list, nstep, gs2_diagnostics_config_in, header)
use theta_grid, only: init_theta_grid
use kt_grids, only: init_kt_grids, ntheta0, naky
use run_parameters, only: init_run_parameters
use species, only: init_species, nspec
use dist_fn, only: init_dist_fn
use init_g, only: init_init_g
use gs2_io, only: init_gs2_io
use gs2_heating, only: init_htype
use collisions, only: collision_model_switch, init_lorentz_error
use collisions, only: collision_model_lorentz, collision_model_lorentz_test
use mp, only: broadcast, proc0, mp_abort
use le_grids, only: init_weights, wdim
use gs2_save, only: restart_writable
use normalisations, only: init_normalisations
use diagnostics_final_routines, only: init_par_filter
use standard_header, only: standard_header_type
implicit none
!> If true, this is a "list-mode run" and so turn off
!> [[gs2_diagnostics_knobs:print_flux_line]] and
!> [[gs2_diagnostics_knobs:print_line]] if set
logical, intent (in) :: list
!> Maximum number of steps to take
integer, intent (in) :: nstep
!> Input parameters for this module
type(diagnostics_config_type), intent(in), optional :: gs2_diagnostics_config_in
!> Header for files with build and run information
type(standard_header_type), intent(in), optional :: header
! Actual value for optional `header` input
type(standard_header_type) :: local_header
integer :: nmovie_tot
if (present(header)) then
local_header = header
else
local_header = standard_header_type()
end if
if (initialized) return
initialized = .true.
call init_normalisations
call init_theta_grid
call init_kt_grids
call init_run_parameters
call init_species
call init_init_g
call init_dist_fn
call real_init (list, gs2_diagnostics_config_in, header=local_header)
nmovie_tot = nstep/nmovie
! initialize weights for less accurate integrals used
! to provide an error estimate for v-space integrals (energy and untrapped)
if (write_verr) then
if (proc0) call init_weights
call broadcast(wdim)
end if
! allocate heating diagnostic data structures
if (write_heating) then
allocate (h_hist(0:navg-1))
call init_htype (h_hist, nspec)
allocate (hk_hist(ntheta0,naky,0:navg-1))
call init_htype (hk_hist, nspec)
call init_htype (h, nspec)
allocate (hk(ntheta0, naky))
call init_htype (hk, nspec)
else
allocate (h_hist(0))
allocate (hk(1,1))
allocate (hk_hist(1,1,0))
end if
!GGH Allocate density and velocity perturbation diagnostic structures
if (write_jext) then
allocate (j_ext_hist(ntheta0, naky,0:navg-1))
j_ext_hist = 0
end if
call init_gs2_io (append_old, make_movie, &
write_correlation_extend, &
write_phi_over_time, write_apar_over_time, write_bpar_over_time, &
nout, ob_midplane=ob_midplane, header=local_header)
call broadcast (nout)
if (write_cerr) then
if (collision_model_switch == collision_model_lorentz .or. &
collision_model_switch == collision_model_lorentz_test) then
call init_lorentz_error
else
write_cerr = .false.
end if
end if
if(.not. allocated(pflux_avg)) then
allocate (pflux_avg(nspec), qflux_avg(nspec), heat_avg(nspec), vflux_avg(nspec))
pflux_avg = 0.0 ; qflux_avg = 0.0 ; heat_avg = 0.0 ; vflux_avg = 0.0
endif
call check_restart_file_writeable(file_safety_check, save_for_restart, save_distfn)
!Setup the parallel fft if we're writing/using the parallel spectrum
if (write_kpar .or. write_gs) call init_par_filter
end subroutine init_gs2_diagnostics