Reads in the nonlinear_terms_knobs namelist and populates the member variables
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(nonlinear_terms_config_type), | intent(inout) | :: | self |
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