Class DiffusionMIPSolver
Defined in File diffusion_mip_solver.h
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public opensn::DiffusionSolver(Class DiffusionSolver)
Class Documentation
-
class DiffusionMIPSolver : public opensn::DiffusionSolver
Generalized diffusion solver for both WGDSA and TGDSA based on the MIP-method of Bruno Turcksin and Jean Ragusa.
Public Functions
-
DiffusionMIPSolver(std::string name, const opensn::SpatialDiscretization &sdm, const UnknownManager &uk_man, std::map<uint64_t, BoundaryCondition> bcs, MatID2XSMap map_mat_id_2_xs, const std::vector<UnitCellMatrices> &unit_cell_matrices, bool suppress_bcs, bool verbose)
-
~DiffusionMIPSolver() override = default
-
inline void SetSourceFunction(const ScalarSpatialFunction &function)
-
inline void SetReferenceSolutionFunction(const ScalarSpatialFunction &function)
-
inline void SetBoundaryClosureQuadrature(const std::vector<Vector3> &omegas, const std::vector<double> &weights)
Sets the angular quadrature (unit directions and weights) of the transport sweep.
It is required by the CLOSURE_R boundary type, which uses the quadrature’s half-range moment beta_f of each boundary face, and it replaces the constant 1/4 floor of the interior penalty by beta_f of each interior face (the transport operator’s own jump dissipation). Call before assembly.
-
void AssembleAand_b_wQpoints(const std::vector<double> &q_vector)
Assembles both the matrix and the RHS using quadrature points.
These routines exist for implementing MMS.
-
void Assemble_b_wQpoints(const std::vector<double> &q_vector)
Assembles just the RHS using quadrature points.
These routines exist for implementing MMS.
-
virtual void AssembleAand_b(const std::vector<double> &q_vector) override
Assembles both the matrix and the RHS using unit cell-matrices.
These are the routines used in the production versions.
-
virtual void Assemble_b(const std::vector<double> &q_vector) override
Assembles the RHS using unit cell-matrices.
These are the routines used in the production versions.
-
virtual void Assemble_b(Vec petsc_q_vector) override
-
double HPerpendicular(const Cell &cell, unsigned int f)
Still searching for a reference for this.
For Polygons: Defined from paper
Turcksin B, Ragusa J, “Discontinuous diffusion synthetic acceleration
for S_n transport on 2D arbitrary polygonal meshes”, Journal of Computational Physics 274, pg 356-369, 2014.
Nv = Number of vertices. If Nv <= 4 then the perimeter parameter should be replaced by edge length.
-
double PolygonPenaltyScale() const
Factor on the interior and boundary penalties of polygons: 2 for “face_side”, 1 for “cell” (OpenSn’s original polygon penalty).
-
DiffusionMIPSolver(std::string name, const opensn::SpatialDiscretization &sdm, const UnknownManager &uk_man, std::map<uint64_t, BoundaryCondition> bcs, MatID2XSMap map_mat_id_2_xs, const std::vector<UnitCellMatrices> &unit_cell_matrices, bool suppress_bcs, bool verbose)