Class DiscreteOrdinatesProblem

Inheritance Relationships

Base Type

Derived Type

Class Documentation

class DiscreteOrdinatesProblem : public opensn::LBSProblem

Base class for Discrete Ordinates solvers. This class mostly establishes utilities related to sweeping. From here we can derive a steady-state, transient, adjoint, and k-eigenvalue solver.

Subclassed by opensn::DiscreteOrdinatesCurvilinearProblem

Public Functions

explicit DiscreteOrdinatesProblem(const InputParameters &params)

Static registration based constructor.

~DiscreteOrdinatesProblem() override
inline const std::string &GetSweepType() const
virtual std::pair<size_t, size_t> GetNumPhiIterativeUnknowns() override

Gets the local and global number of iterative unknowns. This normally is only the flux moments, however, the sweep based solvers might include delayed angular fluxes in this number.

virtual void Initialize() override

Initialize function.

const std::map<uint64_t, std::shared_ptr<SweepBoundary>> &GetSweepBoundaries() const

Returns the sweep boundaries as a read only reference.

virtual void ReorientAdjointSolution() override

Reorient an adjoint solution to account for backwards streaming.

void ZeroOutflowBalanceVars(LBSGroupset &groupset)

Zeroes all the outflow data-structures required to compute balance.

Public Static Functions

static InputParameters GetInputParameters()
static std::shared_ptr<DiscreteOrdinatesProblem> Create(const ParameterBlock &params)

Protected Types

using SweepOrderGroupingInfo = std::pair<UniqueSOGroupings, DirIDToSOMap>

Protected Functions

explicit DiscreteOrdinatesProblem(const std::string &name, std::shared_ptr<MeshContinuum> grid_ptr)
virtual void InitializeBoundaries() override

Initializes boundaries.

virtual void InitializeWGSSolvers() override

Initializes Within-GroupSet solvers.

void InitializeSweepDataStructures()

This routine initializes basic sweep datastructures that are agnostic of the number of groups and essentially the groupsets. The routine rebuilds the data structures i) quadrature_unq_so_grouping_map_, ii) quadrature_spds_map_ and iii) quadrature_fluds_templates_map_. i) is a mapping, per quadrature, to a collection of angle-index-sets where all the angles in a particular angleset share the same sweep ordering. ii) is a mapping, per quadrature, to a collection of SPDSs where each SPDS mirrors an angle-index-set in i) iii) is again a mapping, per quadrature, to a collection of Template FLUDS where each FLUDS mirrors a SPDS in ii).

void InitFluxDataStructures(LBSGroupset &groupset)

Initializes fluds_ data structures.

void ResetSweepOrderings(LBSGroupset &groupset)

Clears all the sweep orderings for a groupset in preperation for another.

virtual std::shared_ptr<SweepChunk> SetSweepChunk(LBSGroupset &groupset)

Sets up the sweek chunk for the given discretization method.

Protected Attributes

std::map<std::shared_ptr<AngularQuadrature>, SweepOrderGroupingInfo> quadrature_unq_so_grouping_map_
std::map<std::shared_ptr<AngularQuadrature>, std::vector<std::shared_ptr<SPDS>>> quadrature_spds_map_
std::map<std::shared_ptr<AngularQuadrature>, std::vector<std::unique_ptr<FLUDSCommonData>>> quadrature_fluds_commondata_map_
std::vector<int> verbose_sweep_angles_
const std::string sweep_type_
std::map<uint64_t, std::shared_ptr<SweepBoundary>> sweep_boundaries_
std::size_t max_level_size_ = 0

Max level size.

std::size_t max_angleset_size_ = 0

Max angle-set size.

std::size_t max_groupset_size_ = 0

Max group-set size.

std::shared_ptr<GridFaceHistogram> grid_face_histogram_ = nullptr

Protected Static Functions

static std::pair<UniqueSOGroupings, DirIDToSOMap> AssociateSOsAndDirections(std::shared_ptr<MeshContinuum> grid, const AngularQuadrature &quadrature, AngleAggregationType agg_type, GeometryType lbs_geo_type)

This routine groups angle-indices to groups sharing the same sweep ordering. It also takes geometry into account.