CP
The CP solver is the collision-probability method. It expands the volumetric and surface fluxes in Legendre polynomials of arbitrary order, assembles the collision, leakage and transmission probability matrices, and solves the resulting linear system directly ("global" mode) or by an interface-current sweep ("sweeping" mode). It is currently available in one-dimensional Cartesian geometry for the Boltzmann transport equation, with vacuum, reflective and surface-source boundaries.
Structure
Radiant.CP — Type
CPStructure used to define the collision-probability method (CP) for the transport of a particle. The volumetric and surface fluxes are expanded in spherical harmonics of arbitrary order; in one-dimensional Cartesian geometry the azimuthal symmetry reduces the expansion to Legendre polynomials of degree up to legendre_order (see the TR-02 technical report). The method assembles the collision, leakage and transmission probability matrices and solves the resulting linear system directly, as an alternative to the SN and GN solvers.
Mandatory field(s)
particle::Particle: particle for which the discretization method is defined.solver_type::String: type of solver for the transport calculations ("BTE").
Optional field(s) - with default values
legendre_order::Int64 = 0: Legendre order of the volumetric flux expansion.surface_order::Int64 = 0: order of the surface (half-range) flux expansion.convergence_criterion::Float64 = 1e-7: convergence criterion of the group iterations.maximum_iteration::Int64 = 300: maximum number of group iterations.
Setters
Radiant.set_particle — Method
set_particle(this::CP,particle::Particle)To set the particle for which the transport discretization method is for.
Input Argument(s)
this::CP: collision-probability method.particle::Particle: particle.
Output Argument(s)
N/A
Examples
julia> m = CP()
julia> m.set_particle(electron)Radiant.set_solver_type — Method
set_solver_type(this::CP,solver_type::String)To set the solver for the particle transport.
Input Argument(s)
this::CP: collision-probability method.solver_type::String: solver type, which can take the following value:solver_type = "BTE": Boltzmann transport equation.
Output Argument(s)
N/A
Examples
julia> m = CP()
julia> m.set_solver_type("BTE")Radiant.set_legendre_order — Method
set_legendre_order(this::CP,legendre_order::Int64)
set_legendre_order(this::CP,volume_order::Int64,surface_order::Int64)To set the Legendre order of the volumetric and surface flux expansions. The single-argument form sets both the volumetric and the surface order to the same value; the two-argument form sets them independently.
Input Argument(s)
this::CP: collision-probability method.legendre_order::Int64: Legendre order of both the volumetric and surface flux expansions.volume_order::Int64: Legendre order of the volumetric flux expansion.surface_order::Int64: Legendre order of the surface (half-range) flux expansion.
Output Argument(s)
N/A
Examples
julia> m = CP()
julia> m.set_legendre_order(2) # volume = surface = 2
julia> m.set_legendre_order(2,4) # volume = 2, surface = 4Radiant.set_surface_order — Method
set_surface_order(this::CP,surface_order::Int64)To set the order of the surface (half-range) flux expansion used by the boundary-coupling probabilities.
Input Argument(s)
this::CP: collision-probability method.surface_order::Int64: order of the surface flux expansion.
Output Argument(s)
N/A
Radiant.set_mode — Method
set_mode(this::CP,mode::String)To set the solution mode of the collision-probability method.
Input Argument(s)
this::CP: collision-probability method.mode::String: solution mode, which can take the following values:mode = "global": finite-domain method. The collision-probability matrices couple all regions and surfaces directly and the resulting linear system is solved by a direct factorization. This is the default.mode = "sweeping": sweeping method. The unit cell is a single voxel and the surface (interface) fluxes are propagated cell by cell, in direct analogy with the discrete- ordinates sweep; the within-group scattering is resolved by source iteration.
Output Argument(s)
N/A
Examples
julia> m = CP()
julia> m.set_mode("sweeping")Radiant.set_acceleration — Method
set_acceleration(this::CP,acceleration::String,parameter::Int64=0)To set the acceleration method for the in-group source iteration of the sweeping mode (unused by the direct "global" solve).
Input Argument(s)
this::CP: collision-probability method.acceleration::String: acceleration method, which takes the following values:acceleration = "none": plain source iteration.acceleration = "livolant": Livolant two-point extrapolation.acceleration = "anderson": depth-mAnderson acceleration.acceleration = "gmres": matrix-free restarted GMRES.acceleration = "bicgstab": matrix-free BiCGStab.
parameter::Int64: optional tuning parameter (GMRES restart or Anderson depth;0keeps the current default).
Output Argument(s)
N/A
Radiant.set_convergence_criterion — Method
set_convergence_criterion(this::CP,convergence_criterion::Float64)To set the convergence criterion for the group iterations.
Input Argument(s)
this::CP: collision-probability method.convergence_criterion::Float64: convergence criterion.
Output Argument(s)
N/A
Radiant.set_maximum_iteration — Method
set_maximum_iteration(this::CP,maximum_iteration::Int64)To set the maximum number of group iterations.
Input Argument(s)
this::CP: collision-probability method.maximum_iteration::Int64: maximum number of group iterations.
Output Argument(s)
N/A
Getters
Radiant.get_particle — Method
get_particle(this::CP)Get the particle associated with the discretization method.
Input Argument(s)
this::CP: collision-probability method.
Output Argument(s)
particle::Particle: particle.
Radiant.get_solver_type — Method
get_solver_type(this::CP)Get the type of solver for transport calculations.
Input Argument(s)
this::CP: collision-probability method.
Output Argument(s)
solver::Int64: type of solver for transport calculations.isCSD::Bool: indicate if the continuous slowing-down term is used or not.
Radiant.get_legendre_order — Method
get_legendre_order(this::CP)Get the Legendre order of the volumetric flux expansion.
Input Argument(s)
this::CP: collision-probability method.
Output Argument(s)
legendre_order::Int64: Legendre order.
Radiant.get_surface_order — Method
get_surface_order(this::CP)Get the order of the surface (half-range) flux expansion.
Input Argument(s)
this::CP: collision-probability method.
Output Argument(s)
surface_order::Int64: surface order.
Radiant.get_mode — Method
get_mode(this::CP)Get the solution mode of the collision-probability method.
Input Argument(s)
this::CP: collision-probability method.
Output Argument(s)
mode::String: solution mode ("global"or"sweeping").
Radiant.get_schemes — Method
get_schemes(this::CP,geometry::Geometry,isFC::Bool)Get the space and/or energy schemes informations. The CP assumes a flat (region-averaged) flux, so a single spatial/energy moment is carried per region.
Input Argument(s)
this::CP: collision-probability method.geometry::Geometry: geometry.isFC::Bool: boolean indicating if the high-order moments are fully coupled.
Output Argument(s)
schemes::Vector{String}: scheme types.𝒪::Vector{Int64}: order of the schemes.Nm::Vector{Int64}: numbers of moments.
Radiant.get_is_full_coupling — Method
get_is_full_coupling(this::CP)Get whether the high-order moments are fully coupled or not.
Input Argument(s)
this::CP: collision-probability method.
Output Argument(s)
isFC::Bool: boolean indicating if the high-order moments are fully coupled or not.
Radiant.get_acceleration — Method
get_acceleration(this::CP)Get the acceleration method (used only by the sweeping mode's in-group source iteration).
Input Argument(s)
this::CP: collision-probability method.
Output Argument(s)
acceleration::String: acceleration method.
Radiant.get_gmres_restart — Method
get_gmres_restart(this::CP)Get the GMRES restart parameter (sweeping mode).
Radiant.get_anderson_depth — Method
get_anderson_depth(this::CP)Get the Anderson acceleration memory depth (sweeping mode).
Radiant.get_convergence_criterion — Method
get_convergence_criterion(this::CP)Get the convergence criterion for the group iterations.
Input Argument(s)
this::CP: collision-probability method.
Output Argument(s)
convergence_criterion::Float64: convergence criterion.
Radiant.get_maximum_iteration — Method
get_maximum_iteration(this::CP)Get the maximum number of group iterations.
Input Argument(s)
this::CP: collision-probability method.
Output Argument(s)
maximum_iteration::Int64: maximum number of group iterations.