read_parameters Subroutine

public subroutine read_parameters(is_list_run, gs2_diagnostics_config_in)

Read the input parameters for the diagnostics module

Arguments

Type IntentOptional 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


Contents

Source Code


Source Code

  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