read_nonlinear_terms_config Subroutine

private subroutine read_nonlinear_terms_config(self)

Uses

Reads in the nonlinear_terms_knobs namelist and populates the member variables

Type Bound

nonlinear_terms_config_type

Arguments

Type IntentOptional Attributes Name
class(nonlinear_terms_config_type), intent(inout) :: self

Contents


Source Code

  subroutine read_nonlinear_terms_config(self)
    use file_utils, only: input_unit_exist, get_indexed_namelist_unit
    use mp, only: proc0
    implicit none
    class(nonlinear_terms_config_type), intent(in out) :: self
    logical :: exist
    integer :: in_file

    ! Note: When this routine is in the module where these variables live
    ! we shadow the module level variables here. This is intentional to provide
    ! isolation and ensure we can move this routine to another module easily.
    character(len = 20) :: nonlinear_mode
    integer :: istep_error_start
    logical :: include_apar, include_bpar, include_phi, nl_forbid_force_zero, split_nonlinear, use_cfl_limit, use_order_based_error, zip
    real :: cfl, densfac, error_target, qparfac, qprpfac, tparfac, tprpfac, uparfac

    namelist /nonlinear_terms_knobs/ cfl, densfac, error_target, include_apar, include_bpar, include_phi, istep_error_start, nl_forbid_force_zero, nonlinear_mode, qparfac, qprpfac, split_nonlinear, tparfac, tprpfac, uparfac, &
         use_cfl_limit, use_order_based_error, zip

    ! Only proc0 reads from file
    if (.not. proc0) return

    ! First set local variables from current values
    cfl = self%cfl
    densfac = self%densfac
    error_target = self%error_target
    include_apar = self%include_apar
    include_bpar = self%include_bpar
    include_phi = self%include_phi
    istep_error_start = self%istep_error_start
    nl_forbid_force_zero = self%nl_forbid_force_zero
    nonlinear_mode = self%nonlinear_mode
    qparfac = self%qparfac
    qprpfac = self%qprpfac
    split_nonlinear = self%split_nonlinear
    tparfac = self%tparfac
    tprpfac = self%tprpfac
    uparfac = self%uparfac
    use_cfl_limit = self%use_cfl_limit
    use_order_based_error = self%use_order_based_error
    zip = self%zip

    ! Now read in the main namelist
    in_file = input_unit_exist(self%get_name(), exist)
    if (exist) read(in_file, nml = nonlinear_terms_knobs)

    ! Now copy from local variables into type members
    self%cfl = cfl
    self%densfac = densfac
    self%error_target = error_target
    self%include_apar = include_apar
    self%include_bpar = include_bpar
    self%include_phi = include_phi
    self%istep_error_start = istep_error_start
    self%nl_forbid_force_zero = nl_forbid_force_zero
    self%nonlinear_mode = nonlinear_mode
    self%qparfac = qparfac
    self%qprpfac = qprpfac
    self%split_nonlinear = split_nonlinear
    self%tparfac = tparfac
    self%tprpfac = tprpfac
    self%uparfac = uparfac
    self%use_cfl_limit = use_cfl_limit
    self%use_order_based_error = use_order_based_error
    self%zip = zip

    self%exist = exist
  end subroutine read_nonlinear_terms_config