Read the input parameters for the diagnostics module
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
logical, | intent(in) | :: | is_list_run |
If true, this is a "list-mode run" and so turn off print_flux_line and print_line if set |
||
type(gs2_diagnostics_config_type), | intent(in), | optional | :: | gs2_diagnostics_config_in |
Configuration for this module, can be used to set new default values or avoid reading the input file |
subroutine read_parameters (is_list_run, gs2_diagnostics_config_in)
use diagnostics_base_config, only: warn_about_nonfunctional_selection
use file_utils, only: input_unit, input_unit_exist
use run_parameters, only: has_phi
use nonlinear_terms, only: nonlin
use antenna, only: no_driver
use collisions, only: heating
use mp, only: proc0
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) :: is_list_run
!> Configuration for this module, can be used to set new default values or
!> avoid reading the input file
type(gs2_diagnostics_config_type), intent(in), optional :: gs2_diagnostics_config_in
if (present(gs2_diagnostics_config_in)) gs2_diagnostics_config = gs2_diagnostics_config_in
! Smart defaults
if (.not. gs2_diagnostics_config%is_initialised()) then
if (nonlin) then
gs2_diagnostics_config%write_fluxes = .true.
gs2_diagnostics_config%write_fluxes_by_mode = .true.
end if
call apply_old_defaults(gs2_diagnostics_config)
end if
call gs2_diagnostics_config%init(name = 'gs2_diagnostics_knobs', requires_index = .false.)
! Print some health warnings if switches are not their default
! values and are not available in this diagnostics module
call warn_about_nonfunctional_selection(gs2_diagnostics_config%enable_parallel, "enable_parallel")
call warn_about_nonfunctional_selection(gs2_diagnostics_config%ncheck /= 10, "ncheck")
call warn_about_nonfunctional_selection(gs2_diagnostics_config%serial_netcdf4, "serial_netcdf4")
call warn_about_nonfunctional_selection(.not. gs2_diagnostics_config%write_any, "write_any")
call warn_about_nonfunctional_selection(gs2_diagnostics_config%write_collisional, "write_collisional")
call warn_about_nonfunctional_selection(gs2_diagnostics_config%write_density_over_time, "write_density_over_time")
call warn_about_nonfunctional_selection(gs2_diagnostics_config%write_ntot_over_time, "write_ntot_over_time")
call warn_about_nonfunctional_selection(gs2_diagnostics_config%write_tperp_over_time, "write_tperp_over_time")
call warn_about_nonfunctional_selection(gs2_diagnostics_config%write_upar_over_time, "write_upar_over_time")
call warn_about_nonfunctional_selection(gs2_diagnostics_config%write_zonal_transfer, "write_zonal_transfer")
! Copy out internal values into module level parameters
append_old = gs2_diagnostics_config%append_old
conv_max_step = gs2_diagnostics_config%conv_max_step
conv_min_step = gs2_diagnostics_config%conv_min_step
conv_nstep_av = gs2_diagnostics_config%conv_nstep_av
conv_nsteps_converged = gs2_diagnostics_config%conv_nsteps_converged
conv_test_multiplier = gs2_diagnostics_config%conv_test_multiplier
dump_check1 = gs2_diagnostics_config%dump_check1
dump_check2 = gs2_diagnostics_config%dump_check2
dump_fields_periodically = gs2_diagnostics_config%dump_fields_periodically
exit_when_converged = gs2_diagnostics_config%exit_when_converged
file_safety_check = gs2_diagnostics_config%file_safety_check
igomega = gs2_diagnostics_config%igomega
make_movie = gs2_diagnostics_config%make_movie
navg = gs2_diagnostics_config%navg
nc_sync_freq = gs2_diagnostics_config%nc_sync_freq
nmovie = gs2_diagnostics_config%nmovie
nsave = gs2_diagnostics_config%nsave
nwrite = gs2_diagnostics_config%nwrite
nwrite_mult = gs2_diagnostics_config%nwrite_mult
ob_midplane = gs2_diagnostics_config%ob_midplane
omegatinst = gs2_diagnostics_config%omegatinst
omegatol = gs2_diagnostics_config%omegatol
print_flux_line = gs2_diagnostics_config%print_flux_line
print_line = gs2_diagnostics_config%print_line
save_distfn = gs2_diagnostics_config%save_distfn
save_for_restart = gs2_diagnostics_config%save_for_restart
save_glo_info_and_grids = gs2_diagnostics_config%save_glo_info_and_grids
save_velocities = gs2_diagnostics_config%save_velocities
save_many = gs2_diagnostics_config%save_many
use_nonlin_convergence = gs2_diagnostics_config%use_nonlin_convergence
write_apar_over_time = gs2_diagnostics_config%write_apar_over_time
write_ascii = gs2_diagnostics_config%write_ascii
write_avg_moments = gs2_diagnostics_config%write_avg_moments
write_bpar_over_time = gs2_diagnostics_config%write_bpar_over_time
write_cerr = gs2_diagnostics_config%write_cerr
write_correlation = gs2_diagnostics_config%write_correlation
write_correlation_extend = gs2_diagnostics_config%write_correlation_extend
write_cross_phase = gs2_diagnostics_config%write_cross_phase
write_eigenfunc = gs2_diagnostics_config%write_eigenfunc
write_fields = gs2_diagnostics_config%write_fields
write_final_antot = gs2_diagnostics_config%write_final_antot
write_final_db = gs2_diagnostics_config%write_final_db
write_final_epar = gs2_diagnostics_config%write_final_epar
write_final_fields = gs2_diagnostics_config%write_final_fields
write_final_moments = gs2_diagnostics_config%write_final_moments
write_flux_line = gs2_diagnostics_config%write_flux_line
write_full_moments_notgc = gs2_diagnostics_config%write_full_moments_notgc
write_g = gs2_diagnostics_config%write_g
write_gs = gs2_diagnostics_config%write_gs
write_gyx = gs2_diagnostics_config%write_gyx
write_heating = gs2_diagnostics_config%write_heating
write_kpar = gs2_diagnostics_config%write_kpar
write_line = gs2_diagnostics_config%write_line
write_lorentzian = gs2_diagnostics_config%write_lorentzian
write_max_verr = gs2_diagnostics_config%write_max_verr
write_moments = gs2_diagnostics_config%write_moments
write_fluxes = gs2_diagnostics_config%write_fluxes
write_fluxes_by_mode = gs2_diagnostics_config%write_fluxes_by_mode
write_nl_flux_dist = gs2_diagnostics_config%write_nl_flux_dist
write_omavg = gs2_diagnostics_config%write_omavg
write_omega = gs2_diagnostics_config%write_omega
write_parity = gs2_diagnostics_config%write_parity
write_pflux_sym = gs2_diagnostics_config%write_pflux_sym
write_pflux_tormom = gs2_diagnostics_config%write_pflux_tormom
write_phi_over_time = gs2_diagnostics_config%write_phi_over_time
write_ql_metric = gs2_diagnostics_config%write_ql_metric
write_symmetry = gs2_diagnostics_config%write_symmetry
write_verr = gs2_diagnostics_config%write_verr
exist = gs2_diagnostics_config%exist
!CMR, 12/8/2014:
! Ensure write_full_moments_notgc=.false. if (write_moments .and. ob_midplane)
! to avoid a conflict.
! FIXME: These two diagnostics do almost the same thing. Do we actually want both?
if (write_moments .and. ob_midplane) write_full_moments_notgc=.false.
!Override flags
if (write_max_verr) write_verr = .true.
print_summary = (is_list_run .and. (print_line .or. print_flux_line))
if (is_list_run) then
print_line = .false.
print_flux_line = .false.
end if
if (no_driver .and. write_lorentzian) then
write(*, "(a)") "WARNING: 'write_lorentzian = .true.' but antenna not enabled. Turning off 'write_lorentzian'"
write_lorentzian = .false.
end if
!These don't store any data if we don't have phi so don't bother
!calculating it.
if(.not. has_phi) write_symmetry = .false.
if(.not. has_phi) write_pflux_sym = .false.
if(.not. has_phi) write_nl_flux_dist = .false.
if(.not. has_phi) write_correlation = .false.
if(.not. has_phi) write_correlation_extend = .false.
if (.not. save_for_restart) nsave = -1
write_avg_moments = write_avg_moments
if (write_heating .and. .not. heating) then
if (proc0) write(*,'("Warning: Disabling write_heating as collisions:heating is false.")')
write_heating = .false.
else if (heating .and. .not. write_heating) then
heating = .false.
end if
write_any = write_line .or. write_omega .or. write_omavg &
.or. write_flux_line .or. write_fluxes .or. write_fluxes_by_mode &
.or. write_kpar .or. write_heating .or. write_lorentzian .or. write_gs
write_any_fluxes = write_flux_line .or. print_flux_line .or. write_fluxes .or. write_fluxes_by_mode
dump_any = dump_check1 .or. dump_fields_periodically &
.or. dump_check2 .or. make_movie .or. print_summary &
.or. write_full_moments_notgc
end subroutine read_parameters