read_solver_input Subroutine

private subroutine read_solver_input(filename, params)

Reads the &solver_input namelist block.

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: filename
type(case_params_t), intent(inout) :: params

Namelists

Namelist solver_input


Variables

Name Type Default Description
pressure_max_iter integer None
pressure_tol real(kind=rk) None
pressure_abs_tol real(kind=rk) None
body_force_x real(kind=rk) None
body_force_y real(kind=rk) None
body_force_z real(kind=rk) None
convection_scheme character(len=name_len) None
momentum_convection_scheme character(len=name_len) None
species_convection_scheme character(len=name_len) None
energy_convection_scheme character(len=name_len) None
scalar_limiter character(len=name_len) None
species_time_scheme character(len=name_len) None
energy_time_scheme character(len=name_len) None

Source Code

   subroutine read_solver_input(filename, params)
      character(len=*), intent(in) :: filename
      type(case_params_t), intent(inout) :: params

      integer :: pressure_max_iter
      real(rk) :: pressure_tol
      real(rk) :: pressure_abs_tol
      real(rk) :: body_force_x, body_force_y, body_force_z
      character(len=name_len) :: convection_scheme
      character(len=name_len) :: momentum_convection_scheme
      character(len=name_len) :: species_convection_scheme
      character(len=name_len) :: energy_convection_scheme
      character(len=name_len) :: scalar_limiter
      character(len=name_len) :: species_time_scheme
      character(len=name_len) :: energy_time_scheme
      integer :: unit_id, ios

      namelist /solver_input/ pressure_max_iter, pressure_tol, pressure_abs_tol, &
                              body_force_x, body_force_y, body_force_z, &
                              convection_scheme, momentum_convection_scheme, &
                              species_convection_scheme, energy_convection_scheme, &
                              scalar_limiter, species_time_scheme, energy_time_scheme

      pressure_max_iter = params%pressure_max_iter
      pressure_tol = params%pressure_tol
      pressure_abs_tol = params%pressure_abs_tol
      body_force_x = params%body_force(1)
      body_force_y = params%body_force(2)
      body_force_z = params%body_force(3)
      convection_scheme = params%convection_scheme
      momentum_convection_scheme = params%momentum_convection_scheme
      species_convection_scheme = params%species_convection_scheme
      energy_convection_scheme = params%energy_convection_scheme
      scalar_limiter = params%scalar_limiter
      species_time_scheme = params%species_time_scheme
      energy_time_scheme = params%energy_time_scheme

      call open_namelist_file(filename, unit_id, ios)

      if (ios == 0) then
         read(unit_id, nml=solver_input, iostat=ios)
         close(unit_id)
      end if

      if (ios > 0) call fatal_error('input', 'failed reading &solver_input')

      params%pressure_max_iter = pressure_max_iter
      params%pressure_tol = pressure_tol
      params%pressure_abs_tol = pressure_abs_tol
      params%body_force = [body_force_x, body_force_y, body_force_z]
      params%convection_scheme = trim(lowercase(convection_scheme))
      params%momentum_convection_scheme = trim(lowercase(momentum_convection_scheme))
      if (len_trim(params%momentum_convection_scheme) == 0) then
         params%momentum_convection_scheme = params%convection_scheme
      end if
      ! The legacy field remains the value consumed by the existing projection solver.
      params%convection_scheme = params%momentum_convection_scheme
      params%species_convection_scheme = trim(lowercase(species_convection_scheme))
      params%energy_convection_scheme = trim(lowercase(energy_convection_scheme))
      params%scalar_limiter = trim(lowercase(scalar_limiter))
      params%species_time_scheme = trim(lowercase(species_time_scheme))
      params%energy_time_scheme = trim(lowercase(energy_time_scheme))
   end subroutine read_solver_input