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.
| 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 | :: | cantera_phase_name | = | "" | ||
| integer, | public | :: | cantera_reaction_count | = | 0 | ||
| character(len=name_len), | public | :: | chemistry_active_species_name(max_species) | = | "" | ||
| real(kind=rk), | public | :: | chemistry_active_species_threshold | = | zero | ||
| real(kind=rk), | public | :: | chemistry_atol | = | 1.0e-15_rk | ||
| real(kind=rk), | public | :: | chemistry_dt_min_factor | = | 0.1_rk | ||
| real(kind=rk), | public | :: | chemistry_dt_safety | = | 0.5_rk | ||
| logical, | public | :: | chemistry_energy_enabled | = | .true. | ||
| logical, | public | :: | chemistry_limit_source_update | = | .false. | ||
| real(kind=rk), | public | :: | chemistry_max_dT_per_step | = | zero | ||
| real(kind=rk), | public | :: | chemistry_max_dY_per_step | = | zero | ||
| real(kind=rk), | public | :: | chemistry_max_rel_rho_change_per_step | = | zero | ||
| integer, | public | :: | chemistry_max_steps | = | 10000 | ||
| real(kind=rk), | public | :: | chemistry_min_reactive_mass_fraction | = | zero | ||
| integer, | public | :: | chemistry_n_active_species | = | 0 | ||
| real(kind=rk), | public | :: | chemistry_rtol | = | 1.0e-8_rk | ||
| real(kind=rk), | public | :: | chemistry_source_relaxation | = | one | ||
| real(kind=rk), | public | :: | chemistry_temperature_cutoff | = | zero | ||
| integer, | public | :: | chemistry_update_interval | = | 1 |
name: Operator-split Cantera chemistry controls |
|
| character(len=name_len), | public | :: | convection_scheme | = | "upwind" | ||
| character(len=name_len), | public | :: | density_eos | = | "constant" | ||
| real(kind=rk), | public | :: | dt | = | zero | ||
| real(kind=rk), | public | :: | dt_growth_limit | = | 1.02_rk | ||
| real(kind=rk), | public | :: | dt_old | = | 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_chemistry_load_balancing | = | .false. | ||
| logical, | public | :: | enable_chemistry_subcycling | = | .false. |
name: Chemistry and Reacting Flow Stability Upgrades |
|
| logical, | public | :: | enable_density_corrector_projection | = | .false. | ||
| logical, | public | :: | enable_energy | = | .false. |
name: Enthalpy Energy Equation Controls |
|
| logical, | public | :: | enable_ignition_kernel | = | .false. |
name: Ignition-kernel initialization |
|
| logical, | public | :: | enable_profiling | = | .true. |
name: Profiling Controls |
|
| logical, | public | :: | enable_radiation | = | .false. |
name: Spectral radiation coupling controls |
|
| logical, | public | :: | enable_reactions | = | .false. | ||
| logical, | public | :: | enable_species | = | .false. |
name: Multi-Species Transport |
|
| logical, | public | :: | enable_species_enthalpy_diffusion | = | .false. | ||
| logical, | public | :: | enable_step_rejection | = | .false. | ||
| logical, | public | :: | enable_variable_density | = | .false. | ||
| logical, | public | :: | enable_variable_nu | = | .false. | ||
| character(len=name_len), | public | :: | energy_convection_scheme | = | "upwind" | ||
| 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 | ||
| character(len=name_len), | public | :: | energy_time_scheme | = | "euler" | ||
| real(kind=rk), | public | :: | ignition_kernel_T | = | zero | ||
| character(len=name_len), | public | :: | ignition_kernel_blend | = | "overwrite" | ||
| real(kind=rk), | public | :: | ignition_kernel_center(3) | = | zero | ||
| character(len=1024), | public | :: | ignition_kernel_composition | = | "" | ||
| real(kind=rk), | public | :: | ignition_kernel_radius | = | zero | ||
| character(len=name_len), | public | :: | ignition_kernel_shape | = | "sphere" | ||
| real(kind=rk), | public | :: | initial_T | = | 300.0_rk | ||
| real(kind=rk), | public | :: | initial_Y(max_species) | = | 0.0_rk | ||
| character(len=1024), | public | :: | initial_composition | = | "" | ||
| real(kind=rk), | public | :: | ke_reject_floor | = | 1.0e-12_rk | ||
| real(kind=rk), | public | :: | max_KE_growth_per_step | = | 10.0_rk | ||
| real(kind=rk), | public | :: | max_cfl | = | 0.5_rk | ||
| real(kind=rk), | public | :: | max_cfl_overshoot_factor | = | 1.25_rk | ||
| integer, | public | :: | max_chemistry_subcycles | = | 8 | ||
| real(kind=rk), | public | :: | max_dt | = | huge(one) | ||
| real(kind=rk), | public | :: | max_pressure_residual_limit | = | 1.0e-2_rk | ||
| integer, | public | :: | max_step_retries | = | 6 | ||
| real(kind=rk), | public | :: | max_temperature_limit | = | 3200.0_rk | ||
| character(len=path_len), | public | :: | mesh_dir | = | "mesh_native" | ||
| real(kind=rk), | public | :: | min_density_ratio_limit | = | 0.05_rk | ||
| real(kind=rk), | public | :: | min_dt | = | 1.0e-12_rk | ||
| real(kind=rk), | public | :: | min_temperature_limit | = | 200.0_rk | ||
| character(len=name_len), | public | :: | momentum_convection_scheme | = | "" | ||
| 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 | ||
| character(len=1024), | public | :: | patch_composition(max_patches) | = | "" | ||
| real(kind=rk), | public | :: | patch_dpdn(max_patches) | = | zero | ||
| real(kind=rk), | public | :: | patch_mass_flux(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 |
positive magnitude for inlet/outlet_mass_flux. |
|
| real(kind=rk), | public | :: | pressure_abs_tol | = | 1.0e-8_rk | ||
| integer, | public | :: | pressure_max_iter | = | 300 |
name: Linear Solver & Numerics |
|
| real(kind=rk), | public | :: | pressure_tol | = | 1.0e-10_rk | ||
| real(kind=rk), | public | :: | radiation_absorption_coeff | = | 1.0_rk | ||
| logical, | public | :: | radiation_debug | = | .false. | ||
| character(len=name_len), | public | :: | radiation_dom_quadrature | = | "s2" | ||
| real(kind=rk), | public | :: | radiation_emissivity | = | 1.0_rk | ||
| integer, | public | :: | radiation_n_scalars | = | 0 | ||
| integer, | public | :: | radiation_n_species | = | 0 | ||
| integer, | public | :: | radiation_n_wavenumbers | = | 0 | ||
| character(len=name_len), | public | :: | radiation_pressure_source | = | "background" | ||
| character(len=name_len), | public | :: | radiation_scalar_name(max_species) | = | "" | ||
| character(len=name_len), | public | :: | radiation_source_model | = | "none" | ||
| real(kind=rk), | public | :: | radiation_source_scale | = | 0.0_rk | ||
| character(len=name_len), | public | :: | radiation_species_name(max_species) | = | "" | ||
| integer, | public | :: | radiation_update_interval | = | 1 | ||
| logical, | public | :: | reject_on_nan | = | .true. | ||
| logical, | public | :: | reject_on_pressure_max_iter | = | .true. | ||
| character(len=path_len), | public | :: | restart_file | = | "" | ||
| logical, | public | :: | restart_from_file | = | .false. |
name: Restart Controls |
|
| integer, | public | :: | restart_interval | = | 0 | ||
| integer, | public | :: | restart_keep | = | 0 | ||
| logical, | public | :: | restart_nsteps_are_additional | = | .false. | ||
| character(len=path_len), | public | :: | restart_output_dir | = | "restart" | ||
| logical, | public | :: | restart_use_file_dt | = | .false. | ||
| real(kind=rk), | public | :: | rho | = | one |
name: Fluid Properties |
|
| character(len=name_len), | public | :: | scalar_limiter | = | "barth_jespersen" | ||
| character(len=name_len), | public | :: | species_convection_scheme | = | "upwind" | ||
| 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 | :: | species_time_scheme | = | "euler" | ||
| real(kind=rk), | public | :: | step_reject_cut_factor | = | 0.5_rk | ||
| real(kind=rk), | public | :: | step_reject_min_dt | = | 1.0e-12_rk | ||
| logical, | public | :: | stop_on_min_dt_failure | = | .true. | ||
| real(kind=rk), | public | :: | subcycling_dT_threshold | = | 10.0_rk | ||
| character(len=name_len), | public | :: | terminal_detail | = | "health" | ||
| integer, | public | :: | terminal_interval | = | 1 | ||
| character(len=name_len), | public | :: | thermo_default_species | = | 'N2' | ||
| integer, | public | :: | thermo_update_interval | = | 1 | ||
| integer, | public | :: | transport_update_interval | = | 1 | ||
| logical, | public | :: | upwind_dilatation_density | = | .false. | ||
| logical, | public | :: | use_dynamic_dt | = | .false. | ||
| logical, | public | :: | variable_density_debug | = | .false. | ||
| integer, | public | :: | variable_density_debug_interval | = | 1 | ||
| character(len=name_len), | public | :: | vtu_format | = | "ascii" | ||
| logical, | public | :: | write_cantera_cache_stats | = | .false. | ||
| logical, | public | :: | write_chemistry_screening_stats | = | .false. | ||
| logical, | public | :: | write_diagnostics | = | .true. | ||
| logical, | public | :: | write_radiation_diagnostics | = | .true. | ||
| logical, | public | :: | write_restart | = | .false. | ||
| logical, | public | :: | write_vtu | = | .true. |
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]. real(rk) :: dt_old = zero !< Timestep size used in the previous step [s]. integer :: output_interval = 1 !< Frequency of VTK/PVD output (in steps). integer :: terminal_interval = 1 !< Frequency of lightweight terminal status updates (in steps). character(len=name_len) :: terminal_detail = "health" !< Terminal verbosity: brief, health, or full. 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. real(rk) :: max_dt = huge(one) !< Absolute timestep ceiling for dynamic dt [s]; huge disables. real(rk) :: min_dt = 1.0e-12_rk !< Absolute timestep floor for automatic dt cuts [s]. real(rk) :: dt_growth_limit = 1.02_rk !< Per-step dynamic-dt growth factor ceiling. logical :: enable_step_rejection = .false. !< If true, reject and retry a timestep when health checks fail. integer :: max_step_retries = 6 !< Maximum rejected attempts for a single timestep. real(rk) :: step_reject_cut_factor = 0.5_rk !< Multiplicative dt cut applied after a rejected trial step. real(rk) :: step_reject_min_dt = 1.0e-12_rk !< Absolute lower bound for rejection retries [s]. real(rk) :: max_KE_growth_per_step = 10.0_rk !< Reject if KE grows by more than this factor; <=0 disables. real(rk) :: ke_reject_floor = 1.0e-12_rk !< Do not apply relative KE-growth rejection when KE before the step is below this floor. real(rk) :: max_cfl_overshoot_factor = 1.25_rk !< Reject if post-step CFL exceeds factor*max_cfl; <=0 disables. logical :: reject_on_pressure_max_iter = .true. !< Reject if the pressure solve reaches pressure_max_iter. logical :: stop_on_min_dt_failure = .true. !< Stop if a rejected step can no longer reduce dt. !> @name Fluid Properties real(rk) :: rho = one !< Constant active flow/projection density [kg/m^3] when `enable_variable_density=.false.`. logical :: enable_variable_density = .false. !< Enable experimental variable-density low-Mach coupling. logical :: enable_density_corrector_projection = .false. !< Post-chemistry pressure-only projection to re-enforce div(u)=S after density change. logical :: upwind_dilatation_density = .false. !< Use upwind density in the advective divergence source calculation. character(len=name_len) :: density_eos = "constant" !< Density source selector; `cantera` uses the selected YAML phase density. 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) :: pressure_abs_tol = 1.0e-8_rk !< Absolute RMS residual tolerance; PCG exits when either criterion is met. 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" !< Legacy momentum advection selector: "upwind" or "central". character(len=name_len) :: momentum_convection_scheme = "" !< Optional momentum-specific scheme; blank falls back to convection_scheme. character(len=name_len) :: species_convection_scheme = "upwind" !< Species advection: upwind, central, bounded_central, bounded_linear, muscl, limited_linear. character(len=name_len) :: energy_convection_scheme = "upwind" !< Enthalpy advection: upwind, central, bounded_central, bounded_linear, muscl, limited_linear. character(len=name_len) :: scalar_limiter = "barth_jespersen" !< Local-bounds limiter for high-order scalar reconstruction. character(len=name_len) :: species_time_scheme = "euler" !< Species transport time scheme: euler or ab2. character(len=name_len) :: energy_time_scheme = "euler" !< Enthalpy transport time scheme: euler or ab2. !> @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]. !< Mass flux input [kg/m^2/s]. Signed for mass_flux; !! positive magnitude for inlet/outlet_mass_flux. real(rk) :: patch_mass_flux(max_patches) = zero real(rk) :: patch_p(max_patches) = zero !< Specified projection-pressure boundary value [Pa], not Cantera \(p_0\). 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 !< Legacy index-based \(Y_k\) mass fractions on patch. character(len=1024) :: patch_composition(max_patches) = "" !< Preferred named patch mixture, e.g. "CH4:1,O2:0.233,N2:0.767". !> @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`. character(len=name_len) :: vtu_format = "ascii" !< Output format: "ascii" or "binary". !> @name Restart Controls logical :: restart_from_file = .false. !< If true, initialize fields from restart_file after allocation. character(len=path_len) :: restart_file = "" !< Rank-independent restart file to read. logical :: write_restart = .false. !< If true, periodically write global restart files. integer :: restart_interval = 0 !< Restart write cadence [steps]; required when write_restart=.true. character(len=path_len) :: restart_output_dir = "restart" !< Restart directory, relative to output_dir unless absolute. integer :: restart_keep = 0 !< Number of newest restart files to keep; 0 keeps all. logical :: restart_use_file_dt = .false. !< If true, restore dt from restart; otherwise namelist dt wins. logical :: restart_nsteps_are_additional = .false. !< If true, add namelist nsteps to restart step. !> @name Multi-Species Transport logical :: enable_species = .false. !< Enable advection-diffusion of mass fractions. logical :: enable_reactions = .false. !< Reserved for chemical source terms; supported paths require non-reacting transport. 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 !< Legacy index/name-matched global initial mass fractions. character(len=1024) :: initial_composition = "" !< Preferred named initial mixture, e.g. "CH4:0.028,O2:0.225,N2:0.747". !> @name Operator-split Cantera chemistry controls integer :: chemistry_update_interval = 1 !< Chemistry source update cadence [steps]. real(rk) :: chemistry_rtol = 1.0e-8_rk !< Relative tolerance for Cantera ReactorNet chemistry integration. real(rk) :: chemistry_atol = 1.0e-15_rk !< Absolute tolerance for Cantera ReactorNet chemistry integration. integer :: chemistry_max_steps = 10000 !< Maximum internal ReactorNet steps per cell chemistry advance. logical :: chemistry_energy_enabled = .true. !< If true, Cantera chemistry solves the reactor energy equation. real(rk) :: chemistry_temperature_cutoff = zero !< Skip chemistry below this temperature [K]; zero disables the cutoff. real(rk) :: chemistry_min_reactive_mass_fraction = zero !< Legacy skip if max(Y_k) is below this threshold; zero disables. integer :: chemistry_n_active_species = 0 !< Number of named species used for optional chemistry activity screening. character(len=name_len) :: chemistry_active_species_name(max_species) = "" !< Species names used for optional chemistry screening. real(rk) :: chemistry_active_species_threshold = zero !< Skip chemistry if all named active-species Y are below this threshold. real(rk) :: chemistry_max_dT_per_step = zero !< Optional chemistry dt/source limiter threshold [K]; zero disables. real(rk) :: chemistry_max_rel_rho_change_per_step = zero !< Optional chemistry density-change threshold; zero disables. real(rk) :: chemistry_max_dY_per_step = zero !< Optional chemistry species-change threshold; zero disables. real(rk) :: chemistry_dt_safety = 0.5_rk !< Safety factor for next-step chemistry dt cuts. real(rk) :: chemistry_dt_min_factor = 0.1_rk !< Minimum multiplicative dt cut in one chemistry-control event. logical :: chemistry_limit_source_update = .false. !< If true, under-relax/clip committed chemistry source update. real(rk) :: chemistry_source_relaxation = one !< Max fraction of Cantera chemistry update to commit when source limiting. logical :: enable_chemistry_load_balancing = .false. !< If true, distribute active chemistry cells globally round-robin. !> @name Chemistry and Reacting Flow Stability Upgrades logical :: enable_chemistry_subcycling = .false. !< If true, subcycle Cantera chemistry integration. integer :: max_chemistry_subcycles = 8 !< Upper limit on chemistry subcycles per timestep. real(rk) :: subcycling_dT_threshold = 10.0_rk !< Local temperature change threshold [K] to trigger subcycling. logical :: reject_on_nan = .true. !< If true, reject trial steps containing NaN/Inf values. real(rk) :: min_density_ratio_limit = 0.05_rk !< Minimum density ratio relative to background before step rejection. real(rk) :: max_temperature_limit = 3200.0_rk !< Maximum temperature limit [K] before step rejection. real(rk) :: min_temperature_limit = 200.0_rk !< Minimum temperature limit [K] before step rejection. real(rk) :: max_pressure_residual_limit = 1.0e-2_rk !< Maximum allowed PCG pressure residual before step rejection. !> @name Ignition-kernel initialization logical :: enable_ignition_kernel = .false. !< If true, overwrite an initial hot spherical kernel before the first step. character(len=name_len) :: ignition_kernel_shape = "sphere" !< First supported shape is sphere. real(rk) :: ignition_kernel_center(3) = zero !< Kernel center [m]. real(rk) :: ignition_kernel_radius = zero !< Kernel radius [m]. real(rk) :: ignition_kernel_T = zero !< Kernel temperature [K]. character(len=1024) :: ignition_kernel_composition = "" !< Optional named composition inside kernel. character(len=name_len) :: ignition_kernel_blend = "overwrite" !< First supported blend mode is overwrite. !> @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. character(len=name_len) :: cantera_phase_name = "" !< Optional Cantera phase name; blank uses first/default phase. integer :: cantera_reaction_count = 0 !< Number of reactions reported by the selected Cantera phase. real(rk) :: background_temp = 300.0_rk !< Fixed temperature for property evaluation [K]. real(rk) :: background_press = 101325.0_rk !< Uniform thermodynamic pressure \(p_0\) passed to Cantera [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). logical :: enable_species_enthalpy_diffusion = .false. !< Include optional species-enthalpy diffusion correction in the \(h\) equation. 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 Spectral radiation coupling controls logical :: enable_radiation = .false. !< Enable radiation-source updates on the radiation communicator. integer :: radiation_update_interval = 1 !< Recompute qrad every N flow steps; otherwise reuse last qrad. integer :: radiation_n_wavenumbers = 0 !< Number of spectral/wavenumber tasks decomposed over radiation MPI ranks. integer :: radiation_n_species = 0 !< Number of transported species used by the radiation model. character(len=name_len) :: radiation_species_name(max_species) = "" !< Radiation-relevant transported species names. character(len=name_len) :: radiation_source_model = "none" !< Radiation source model: none or spectral_test. real(rk) :: radiation_source_scale = 0.0_rk !< Test-model source scale [W/m^3]. integer :: radiation_n_scalars = 0 !< Reserved number of generic scalar arrays for radiation. character(len=name_len) :: radiation_scalar_name(max_species) = "" !< Reserved selected scalar names for future radiation models. character(len=name_len) :: radiation_pressure_source = "background" !< Pressure source for radiation state: background or system. logical :: radiation_debug = .false. !< Write extra gather/checksum radiation diagnostics. logical :: write_radiation_diagnostics = .true. !< Write radiation_setup.txt and radiation_diagnostics.csv. real(rk) :: radiation_absorption_coeff = 1.0_rk !< Constant grey gas absorption coefficient [1/m]. real(rk) :: radiation_emissivity = 1.0_rk !< Wall boundary surface emissivity [0-1]. character(len=name_len) :: radiation_dom_quadrature = "s2" !< DOM angular quadrature type: s2 or s4. !> @name Profiling Controls logical :: enable_profiling = .true. !< Enable wall-clock profiling. logical :: nested_profiling = .true. !< If true, print nested profiling tree. logical :: write_cantera_cache_stats = .false. !< If true, print final Cantera cache hit/miss statistics. logical :: write_chemistry_screening_stats = .false. !< If true, print final chemistry screening/skipped-cell statistics. logical :: variable_density_debug = .false. !< If true, print verbose experimental variable-density diagnostics. integer :: variable_density_debug_interval = 1 !< Print variable-density debug every N energy steps when enabled. end type case_params_t