case_params_t Derived Type

type, public :: case_params_t

Global container for all parsed simulation parameters.

This structure acts as the source of truth for the entire solver. It is populated once at startup and accessed as a read-only object by the various solver modules.


Components

Type Visibility Attributes Name Initial
real(kind=rk), public :: background_press = 101325.0_rk
real(kind=rk), public :: background_temp = 300.0_rk
real(kind=rk), public :: body_force(3) = zero
character(len=path_len), public :: cantera_mech_file = "gri30.yaml"
character(len=name_len), public :: convection_scheme = "upwind"
real(kind=rk), public :: dt = zero
logical, public :: enable_cantera_fluid = .false.

name: Cantera Bridge Integration

logical, public :: enable_cantera_species = .false.
logical, public :: enable_cantera_thermo = .false.
logical, public :: enable_energy = .false.

name: Enthalpy Energy Equation Controls

logical, public :: enable_profiling = .true.

name: Profiling Controls

logical, public :: enable_reactions = .false.
logical, public :: enable_species = .false.

name: Multi-Species Transport

logical, public :: enable_variable_density = .false.
logical, public :: enable_variable_nu = .false.
real(kind=rk), public :: energy_cp = 1005.0_rk
real(kind=rk), public :: energy_lambda = 2.6e-2_rk
real(kind=rk), public :: energy_reference_T = 298.15_rk
real(kind=rk), public :: energy_reference_h = zero
real(kind=rk), public :: initial_T = 300.0_rk
real(kind=rk), public :: initial_Y(max_species) = 0.0_rk
real(kind=rk), public :: max_cfl = 0.5_rk
character(len=path_len), public :: mesh_dir = "mesh_native"
integer, public :: n_patches = 0

name: Boundary Condition Mapping

integer, public :: namelist_nspecies = 0

name: Internal Registry (Reacting discovery)

character(len=name_len), public :: namelist_species_name(max_species) = ""
logical, public :: nested_profiling = .true.
integer, public :: nspecies = 0
integer, public :: nsteps = 0

name: Time Stepping

real(kind=rk), public :: nu = 1.0e-2_rk
character(len=path_len), public :: output_dir = "output"

name: Data Output

integer, public :: output_interval = 1
real(kind=rk), public :: patch_T(max_patches) = 300.0_rk
real(kind=rk), public :: patch_Y(max_species,max_patches) = zero
real(kind=rk), public :: patch_dpdn(max_patches) = zero
character(len=name_len), public :: patch_name(max_patches) = ""
real(kind=rk), public :: patch_p(max_patches) = zero
character(len=name_len), public :: patch_pressure_type(max_patches) = ""
character(len=name_len), public :: patch_species_type(max_patches) = ""

Species Boundary Conditions

character(len=name_len), public :: patch_temperature_type(max_patches) = ""
character(len=name_len), public :: patch_type(max_patches) = ""
real(kind=rk), public :: patch_u(max_patches) = zero
real(kind=rk), public :: patch_v(max_patches) = zero
character(len=name_len), public :: patch_velocity_type(max_patches) = ""

Field-specific BC Overrides

real(kind=rk), public :: patch_w(max_patches) = zero
integer, public :: pressure_max_iter = 300

name: Linear Solver & Numerics

real(kind=rk), public :: pressure_tol = 1.0e-10_rk
real(kind=rk), public :: rho = one

name: Fluid Properties

real(kind=rk), public :: species_diffusivity(max_species) = 0.0_rk
character(len=name_len), public :: species_name(max_species) = ""
character(len=name_len), public :: thermo_default_species = 'N2'
integer, public :: thermo_update_interval = 1
integer, public :: transport_update_interval = 1
logical, public :: use_dynamic_dt = .false.
logical, public :: write_diagnostics = .true.
logical, public :: write_vtu = .true.

Source Code

   type, public :: case_params_t
      !> @name Mesh Configuration
      character(len=path_len) :: mesh_dir = "mesh_native" !< Directory containing `points.dat`, `cells.dat`, etc.

      !> @name Time Stepping
      integer :: nsteps = 0              !< Total number of timesteps to execute.
      real(rk) :: dt = zero              !< Fixed timestep size [s].
      integer :: output_interval = 1     !< Frequency of VTK/PVD output (in steps).
      logical :: use_dynamic_dt = .false.!< If true, `dt` scales to maintain target `max_cfl`.
      real(rk) :: max_cfl = 0.5_rk       !< Target maximum CFL number for stability.

      !> @name Fluid Properties
      real(rk) :: rho = one              !< Constant flow/projection density [kg/m^3].
      logical :: enable_variable_density = .false. !< Reserved: variable-density/low-Mach flow is not enabled yet.
      real(rk) :: nu = 1.0e-2_rk         !< Constant kinematic viscosity [m^2/s].
      logical :: enable_variable_nu = .false.    !< Allow Cantera-updated flow viscosity/nu; default keeps validation Re fixed.
      integer :: transport_update_interval = 1 !< Cantera transport-property update interval for mu/D_k only [steps].

      !> @name Linear Solver & Numerics
      integer :: pressure_max_iter = 300 !< Maximum Conjugate Gradient iterations for the Poisson solver.
      real(rk) :: pressure_tol = 1.0e-10_rk !< Relative residual tolerance for pressure convergence.
      real(rk) :: body_force(3) = zero   !< Constant volumetric acceleration vector \((a_x, a_y, a_z)\) [m/s^2].
      character(len=name_len) :: convection_scheme = "upwind" !< Scheme for advection: "upwind" (stable) or "central" (accurate).

      !> @name Boundary Condition Mapping
      integer :: n_patches = 0           !< Total number of patches defined in the namelist.
      character(len=name_len) :: patch_name(max_patches) = "" !< Names identifying mesh patches.
      character(len=name_len) :: patch_type(max_patches) = "" !< Legacy BC type string.

      !> Field-specific BC Overrides
      character(len=name_len) :: patch_velocity_type(max_patches) = "" !< Override BC type for velocity.
      character(len=name_len) :: patch_pressure_type(max_patches) = "" !< Override BC type for pressure.
      character(len=name_len) :: patch_temperature_type(max_patches) = "" !< Override BC type for temperature/enthalpy.

      real(rk) :: patch_u(max_patches) = zero    !< Specified x-velocity on patch [m/s].
      real(rk) :: patch_v(max_patches) = zero    !< Specified y-velocity on patch [m/s].
      real(rk) :: patch_w(max_patches) = zero    !< Specified z-velocity on patch [m/s].
      real(rk) :: patch_p(max_patches) = zero    !< Specified static pressure on patch [Pa].
      real(rk) :: patch_dpdn(max_patches) = zero !< Specified pressure gradient on patch [Pa/m].
      real(rk) :: patch_T(max_patches) = 300.0_rk !< Specified temperature on patch [K].

      !> Species Boundary Conditions
      character(len=name_len) :: patch_species_type(max_patches) = "" !< Override BC type for mass fractions.
      real(rk) :: patch_Y(max_species, max_patches) = zero           !< Specified \(Y_k\) mass fractions on patch.

      !> @name Data Output
      character(len=path_len) :: output_dir = "output" !< Directory for result storage.
      logical :: write_vtu = .true.                    !< If true, generates Unstructured VTK files.
      logical :: write_diagnostics = .true.            !< If true, writes global residuals to `diagnostics.csv`.

      !> @name Multi-Species Transport
      logical :: enable_species = .false.                         !< Enable advection-diffusion of mass fractions.
      logical :: enable_reactions = .false.                       !< Reserved for chemical source terms; reactions are not implemented yet.
      integer :: nspecies = 0                                     !< Total number of transport species.
      character(len=name_len) :: species_name(max_species) = ""   !< List of species names.
      real(rk) :: species_diffusivity(max_species) = 0.0_rk       !< Constant species diffusivity \(D_k\) [m^2/s].
      real(rk) :: initial_Y(max_species) = 0.0_rk                 !< Global initial mass fractions in the domain.
      
      !> @name Internal Registry (Reacting discovery)
      integer :: namelist_nspecies = 0                            !< Number of species specified in `case.nml`.
      character(len=name_len) :: namelist_species_name(max_species) = "" !< Names specified in `case.nml`.
      
      !> @name Cantera Bridge Integration
      logical :: enable_cantera_fluid = .false.                   !< Use Cantera for mixture-averaged viscosity; flow density remains `rho`.
      logical :: enable_cantera_species = .false.                 !< Use Cantera for mixture-averaged \(D_k\).
      character(len=path_len) :: cantera_mech_file = "gri30.yaml" !< Path to YAML/CTI mechanism file.
      real(rk) :: background_temp = 300.0_rk                      !< Fixed temperature for property evaluation [K].
      real(rk) :: background_press = 101325.0_rk                  !< Fixed pressure for property evaluation [Pa].

      !> @name Enthalpy Energy Equation Controls
      logical :: enable_energy = .false.                         !< Enable enthalpy/temperature field storage.
      logical :: enable_cantera_thermo = .false.                 !< Use Cantera for sensible h(T,Y,p0) and T(h,Y,p0).
      integer :: thermo_update_interval = 1                     !< Reserved Cantera thermo interval [steps]; must remain 1.
      character(len=name_len) :: thermo_default_species = 'N2'   !< Single-species Cantera thermo fallback when species transport is off.
      real(rk) :: initial_T = 300.0_rk                           !< Initial gas temperature [K].
      real(rk) :: energy_reference_T = 298.15_rk                 !< Reference temperature for sensible enthalpy [K].
      real(rk) :: energy_reference_h = zero                      !< Reference sensible enthalpy for constant-cp mode [J/kg].
      real(rk) :: energy_cp = 1005.0_rk                          !< Constant heat capacity for non-Cantera thermo [J/kg/K].
      real(rk) :: energy_lambda = 2.6e-2_rk                      !< Constant thermal conductivity for non-Cantera thermo [W/m/K].

      !> @name Profiling Controls
      logical :: enable_profiling = .true.                       !< Enable wall-clock profiling.
      logical :: nested_profiling = .true.                       !< If true, print nested profiling tree.
   end type case_params_t