inciter::FVPDE class

Partial differential equation base for discontinuous Galerkin PDEs.

This class uses runtime polymorphism without client-side inheritance: inheritance is confined to the internals of the this class, invisible to client-code. The class exclusively deals with ownership enabling client-side value semantics. Credit goes to Sean Parent at Adobe: https://github.com/sean-parent/sean-parent.github.com/wiki/ Papers-and-Presentations. For example client code that models a FVPDE, see inciter::CompFlow.

Constructors, destructors, conversion operators

FVPDE() defaulted explicit
Default constructor taking no arguments for Charm++.
template<typename T>
FVPDE(T x) explicit
Constructor taking an object modeling Concept.
template<typename T, typename... Args>
FVPDE(std::function<T(Args...)> x, Args&&... args) explicit
Constructor taking a function pointer to a constructor of an object modeling Concept.
FVPDE(const FVPDE& x)
Copy constructor.
FVPDE(FVPDE&&) noexcept defaulted
Move constructor.

Public functions

auto nprim() const -> std::size_t
Public interface to find number of primitive quantities for the diff eq.
auto nmat() const -> std::size_t
Public interface to find number of materials for the diff eq.
void IcBoxElems(const tk::Fields& geoElem, std::size_t nielem, std::vector<std::unordered_set<std::size_t>>& inbox) const
Public interface to determine elements that lie inside the IC box.
void initialize(const tk::Fields& L, const std::vector<std::size_t>& inpoel, const tk::UnsMesh::Coords& coord, const std::vector<std::unordered_set<std::size_t>>& inbox, const std::unordered_map<std::size_t, std::set<std::size_t>>& elemblkid, tk::Fields& unk, tk::real t, const std::size_t nielem) const
Public interface to setting the initial conditions for the diff eq.
void lhs(const tk::Fields& geoElem, tk::Fields& l) const
Public interface to computing the left-hand side matrix for the diff eq.
void updatePrimitives(const tk::Fields& unk, tk::Fields& prim, std::size_t nielem) const
Public interface to updating the primitives for the diff eq.
void cleanTraceMaterial(tk::real t, const tk::Fields& geoElem, tk::Fields& unk, tk::Fields& prim, std::size_t nielem) const
Public interface to cleaning up trace materials for the diff eq.
void reconstruct(const tk::Fields& geoElem, const inciter::FaceData& fd, const std::map<std::size_t, std::vector<std::size_t>>& esup, const std::vector<std::size_t>& inpoel, const tk::UnsMesh::Coords& coord, tk::Fields& U, tk::Fields& P) const
Public interface to reconstructing the second-order solution.
void limit(const tk::Fields& geoFace, const inciter::FaceData& fd, const std::map<std::size_t, std::vector<std::size_t>>& esup, const std::vector<std::size_t>& inpoel, const tk::UnsMesh::Coords& coord, const std::vector<int>& srcFlag, tk::Fields& U, tk::Fields& P) const
Public interface to limiting the second-order solution.
void rhs(tk::real t, const tk::Fields& geoFace, const tk::Fields& geoElem, const inciter::FaceData& fd, const std::vector<std::size_t>& inpoel, const tk::UnsMesh::Coords& coord, const std::unordered_map<std::size_t, std::set<std::size_t>>& elemblkid, const tk::Fields& U, const tk::Fields& P, tk::Fields& R, std::vector<int>& srcFlag) const
Public interface to computing the P1 right-hand side vector.
auto dt(const inciter::FaceData& fd, const tk::Fields& geoFace, const tk::Fields& geoElem, const tk::Fields& U, const tk::Fields& P, const std::size_t nielem, const std::vector<int>& srcFlag, std::vector<tk::real>& local_dte) const -> tk::real
Public interface for computing the minimum time step size.
auto OutVarFn() const -> std::map<std::string, tk::GetVarFn>
Public interface to returning maps of output var functions.
auto analyticFieldNames() const -> std::vector<std::string>
Public interface to returning analytic field output labels.
auto surfNames() const -> std::vector<std::string>
Public interface to returning surface output labels.
auto histNames() const -> std::vector<std::string>
Public interface to returning time history field output labels.
auto names() const -> std::vector<std::string>
Public interface to returning variable names.
auto surfOutput(const inciter::FaceData& fd, const tk::Fields& U, const tk::Fields& P) const -> std::vector<std::vector<tk::real>>
Public interface to returning surface field output.
auto histOutput(const std::vector<HistData>& h, const std::vector<std::size_t>& inpoel, const tk::UnsMesh::Coords& coord, const tk::Fields& U, const tk::Fields& P) const -> std::vector<std::vector<tk::real>>
Public interface to return point history output.
auto analyticSolution(tk::real xi, tk::real yi, tk::real zi, tk::real t) const -> tk::InitializeFn::result_type
Public interface to returning analytic solution.
auto solution(tk::real xi, tk::real yi, tk::real zi, tk::real t) const -> tk::InitializeFn::result_type
Public interface to returning the analytic solution for conserved vars.
auto sp_totalenergy(std::size_t e, const tk::Fields& unk) const -> tk::real
Public interface to returning the specific total energy.
void soundspeed(std::size_t nielem, const tk::Fields& U, const tk::Fields& P, std::vector<tk::real>& ss) const
Public interface to returning the relevant sound speed in each cell.
auto operator=(const FVPDE& x) -> FVPDE&
Copy assignment.
auto operator=(FVPDE&&) noexcept -> FVPDE& defaulted
Move assignment.

Function documentation

template<typename T>
inciter::FVPDE::FVPDE(T x) explicit

Constructor taking an object modeling Concept.

Parameters
in Instantiated object of type T given by the template argument.

The object of class T comes pre-constructed.

template<typename T, typename... Args>
inciter::FVPDE::FVPDE(std::function<T(Args...)> x, Args&&... args) explicit

Constructor taking a function pointer to a constructor of an object modeling Concept.

Parameters
in Function pointer to a constructor of an object modeling Concept.
args in Zero or more constructor arguments

Passing std::function allows late execution of the constructor, i.e., as late as inside this class' constructor, and thus usage from a factory. Note that there are at least two different ways of using this constructor:

  • Bind T's constructor arguments and place it in std::function<T()> and passing no arguments as args.... This case then instantiates the model via its constructor and stores it in here.
  • Bind a single placeholder argument to T's constructor and pass it in as host's args..., which then forwards it to model's constructor. This allows late binding, i.e., binding the argument only here.