Reads in the ballstab_knobs namelist and populates the member variables
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ballstab_config_type), | intent(inout) | :: | self |
subroutine read_ballstab_config(self)
use file_utils, only: input_unit_exist, get_indexed_namelist_unit
use mp, only: proc0
implicit none
class(ballstab_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.
integer :: n_beta, n_shat
logical :: make_salpha
real :: beta_div, beta_mul, diff, shat_max, shat_min, theta0
namelist /ballstab_knobs/ beta_div, beta_mul, diff, make_salpha, n_beta, n_shat, shat_max, shat_min, theta0
! Only proc0 reads from file
if (.not. proc0) return
! First set local variables from current values
beta_div = self%beta_div
beta_mul = self%beta_mul
diff = self%diff
make_salpha = self%make_salpha
n_beta = self%n_beta
n_shat = self%n_shat
shat_max = self%shat_max
shat_min = self%shat_min
theta0 = self%theta0
! Now read in the main namelist
in_file = input_unit_exist(self%get_name(), exist)
if (exist) read(in_file, nml = ballstab_knobs)
! Now copy from local variables into type members
self%beta_div = beta_div
self%beta_mul = beta_mul
self%diff = diff
self%make_salpha = make_salpha
self%n_beta = n_beta
self%n_shat = n_shat
self%shat_max = shat_max
self%shat_min = shat_min
self%theta0 = theta0
self%exist = exist
end subroutine read_ballstab_config