mod_radiation_p1 Module

Grey, absorbing-emitting, non-scattering P-1 radiation solver model for incident radiation diffusion.

[Physical Assumptions] - Grey (single wavenumber/band) absorbing-emitting medium. - Non-scattering; no scattering source is included and Gamma = 1 / (3*kappa).

[X-1 Contract] - This module computes and populates only the unreduced partial absorption-like term kappaG in source%qrad. - The radiation driver is responsible for performing MPI reductions and then locally subtracting the emission term 4kappasigmaT^4 on all ranks.

[Parallel Spectral Contract] - In a parallel spectral run, only the single rank assigned to wavenumber/band 1 computes the P-1 equation. Other ranks exit immediately returning zero source%qrad, which is subsequently synchronized globally by the driver using MPI_Allreduce(MPI_SUM).

This module solves the discretized finite-volume P-1 equation: -div(Gamma grad(G)) + kappaG = 4kappasigmaT^4 where Gamma = 1/(3*kappa), and G is the incident radiation. Marshak boundary conditions are applied at walls and open boundaries.



Variables

Type Visibility Attributes Name Initial
real(kind=rk), private, parameter :: sigma = 5.670374419e-8_rk

Stefan-Boltzmann constant [W/(m^2*K^4)]


Subroutines

public subroutine radiation_compute_p1(mesh, bc, context, state, source, params)

Main entry point for the P-1 radiation model.

Arguments

Type IntentOptional Attributes Name
type(mesh_t), intent(in) :: mesh
type(bc_set_t), intent(in) :: bc
type(radiation_context_t), intent(in) :: context
type(radiation_state_t), intent(in) :: state
type(radiation_source_t), intent(inout) :: source
type(case_params_t), intent(in) :: params

private subroutine apply_matrix(mesh, diag, coeff, nb, x, ax)

Sparse matrix-vector product for the assembled P-1 system.

Arguments

Type IntentOptional Attributes Name
type(mesh_t), intent(in) :: mesh
real(kind=rk), intent(in) :: diag(:)
real(kind=rk), intent(in) :: coeff(:,:)
integer, intent(in) :: nb(:,:)
real(kind=rk), intent(in) :: x(:)
real(kind=rk), intent(out) :: ax(:)

private subroutine solve_pcg(mesh, diag, coeff, nb, rhs, G, max_iter, tol)

Jacobi-preconditioned Conjugate Gradient solver for the symmetric P-1 system.

Arguments

Type IntentOptional Attributes Name
type(mesh_t), intent(in) :: mesh
real(kind=rk), intent(in) :: diag(:)
real(kind=rk), intent(in) :: coeff(:,:)
integer, intent(in) :: nb(:,:)
real(kind=rk), intent(in) :: rhs(:)
real(kind=rk), intent(inout) :: G(:)
integer, intent(in) :: max_iter
real(kind=rk), intent(in) :: tol