openFOAM-RANS-to-GPU/python/src/foam_stepper/gpu/constants.py

82 lines
4.2 KiB
Python
Raw Normal View History

"""GPU RANS backend constants."""
from __future__ import annotations
FULL_GPU_RANS_GUARD = "scripts/verify_gpu_rans_solver.sh"
GPU_PRIMITIVE_PROOF = "scripts/verify_gpu_algorithm.sh"
GPU_PRIMITIVE_NAME = "cell_flux_imbalance"
PRIMARY_FIELDS = ("U", "p", "phi")
TURBULENCE_FIELDS = ("nut", "k", "omega")
REQUIRED_FIELDS = (*PRIMARY_FIELDS, *TURBULENCE_FIELDS)
GPU_BACKEND_PROVIDER = "quadrants_cuda_rans_solver"
GPU_RUNTIME_UNAVAILABLE = "gpu_runtime_unavailable"
GPU_KERNELS_MISSING = "missing_gpu_solver_kernels"
GPU_STAGE_UNSUPPORTED = "unsupported_gpu_solver_stage"
GPU_NUMERICAL_MISMATCH = "gpu_numerical_mismatch"
GPU_STAGE_CAPABILITY_PREFIX = "solver_stage_contract:"
GPU_INPUT_SCHEMA_VERSION = 1
DEFAULT_LAMINAR_NU = 1.5e-5
DEFAULT_MOMENTUM_RELAXATION_ALPHA = 0.9
DEFAULT_MOMENTUM_PBICGSTAB_ITERATIONS = 50
DEFAULT_MOMENTUM_PBICGSTAB_RESIDUAL_TOLERANCE_SQUARED = 1.0e-16
DEFAULT_PRESSURE_CG_ITERATIONS = 300
DEFAULT_SIMPLE_CONSISTENT_RATU_FACTOR = 10.0
DEFAULT_OMEGA_WALL_BETA1 = 0.075
STAGE_OBSERVABILITY_GROUPS = (
{
"name": "momentum_assembly",
"split_stages": ("assemble_momentum_terms", "assemble_UEqn"),
"run_one_stages": ("assemble_UEqn",),
"split_outputs": {
"assemble_momentum_terms": ("terms",),
"assemble_UEqn": ("UEqn",),
},
},
{
"name": "pressure_assembly",
"split_stages": ("compute_pressure_inputs", "assemble_pEqn"),
"run_one_stages": ("compute_pressure_inputs", "assemble_pEqn"),
"split_outputs": {
"compute_pressure_inputs": ("HbyA", "phiHbyA", "rAU"),
"assemble_pEqn": ("pEqn",),
},
},
{
"name": "linear_solve_results",
"split_stages": ("solve_UEqn", "solve_pEqn"),
"run_one_stages": ("solve_UEqn", "solve_pEqn"),
"split_outputs": {
"solve_UEqn": ("performance", "field_after"),
"solve_pEqn": ("performance", "p", "phi"),
},
},
{
"name": "final_correction",
"split_stages": ("correct_velocity_pressure_flux",),
"run_one_stages": ("update_phi_from_pEqn_flux", "correct_velocity_pressure_flux"),
"split_outputs": {
"correct_velocity_pressure_flux": ("U", "p", "phi"),
},
},
{
"name": "turbulence_updates",
"split_stages": ("momentum_transport_predict", "momentum_transport_correct"),
"run_one_stages": ("momentum_transport_predict", "momentum_transport_correct"),
"split_outputs": {
"momentum_transport_predict": ("case_path", "solver_name"),
"momentum_transport_correct": ("U", "p", "phi", "nut", "k", "omega"),
},
},
)
GPU_STAGE_KERNEL_ENTRYPOINTS = {
"momentum_assembly": ["gpu_rans_momentum_assembly", "gpu_rans_momentum_diffusion_coefficients", "gpu_rans_momentum_wall_diffusion_coefficients", "gpu_rans_momentum_convection_coefficients", "gpu_rans_momentum_equation_relaxation"],
"pressure_assembly": ["gpu_rans_pressure_inputs", "gpu_rans_consistent_rAtU", "gpu_rans_momentum_hbyA_source", "gpu_rans_momentum_hbyA_face_accumulate", "gpu_rans_momentum_hbyA_finish", "gpu_rans_momentum_hbyA_fixed_value_boundary", "gpu_rans_surface_flux_from_cells", "gpu_rans_pressure_assembly", "gpu_rans_pressure_laplacian_coefficients", "gpu_rans_pressure_mixed_boundary_laplacian", "gpu_rans_pressure_source_from_flux", "gpu_rans_pressure_source_from_boundary_flux"],
"linear_solve_results": ["gpu_ldu_matvec_vector_asymmetric_diag", "gpu_ldu_matvec_vector_asymmetric_face_accumulate", "gpu_bicgstab_initialize_vector", "gpu_bicgstab_dot_vector", "gpu_bicgstab_update_direction_vector", "gpu_bicgstab_precondition_vector", "gpu_bicgstab_update_intermediate_vector_preconditioned", "gpu_bicgstab_update_solution_residual_vector_preconditioned", "gpu_vector_residual_squared", "gpu_ldu_matvec_scalar_symmetric_diag", "gpu_ldu_matvec_scalar_symmetric_face_accumulate", "gpu_pcg_initialize_scalar", "gpu_cg_dot_scalar", "gpu_pcg_update_solution_residual_scalar", "gpu_pcg_update_direction_scalar"],
"final_correction": ["gpu_rans_pressure_flux_correction", "gpu_rans_final_correction", "gpu_rans_pressure_velocity_correction"],
"turbulence_updates": ["gpu_rans_turbulence_update", "gpu_rans_omega_wall_update"],
}