inciter::ALECG class

ALECG Charm++ chare array used to advance PDEs in time with ALECG+RK.

Public static functions

static void registerReducers()
Configure Charm++ custom reduction types initiated from this chare array.

Constructors, destructors, conversion operators

ALECG(CkMigrateMessage*) explicit
Migrate constructor.

Public functions

auto ALECG(const CProxy_Discretization& disc, const std::map<int, std::vector<std::size_t>>&, const std::map<int, std::vector<std::size_t>>& bnode, const std::vector<std::size_t>&) -> ALECG_SDAG_CODE explicit
Constructor.
void ResumeFromSync() override
Return from migration.
void setup(tk::real v)
Setup: query boundary conditions, output mesh, etc.
void init()
[init and lhs]
void sendinit()
Send own chare-boundary data to neighboring chares.
void advance(tk::real newdt)
Advance equations to next time step.
void lhs()
Compute left-hand side of transport equations.
void comlhs(const std::vector<std::size_t>& gid, const std::vector<std::vector<tk::real>>& L)
Receive contributions to left-hand side matrix on chare-boundaries.
void comrhs(const std::vector<std::size_t>& gid, const std::vector<std::vector<tk::real>>& R)
Receive contributions to right-hand side vector on chare-boundaries.
void update(const tk::Fields& a)
Update solution at the end of time step.
void diag()
Signal the runtime system that diagnostics have been computed.
void refine()
Optionally refine/derefine mesh.
void resizeAfterRefined(const std::vector<std::size_t>& ginpoel, const tk::UnsMesh::Chunk& chunk, const tk::UnsMesh::Coords& coord, const std::unordered_map<std::size_t, tk::UnsMesh::Edge>& addedNodes, const std::unordered_map<std::size_t, std::size_t>& addedTets, const std::unordered_map<int, std::vector<std::size_t>>& msum, const std::map<int, std::vector<std::size_t>>&, const std::map<int, std::vector<std::size_t>>& bnode, const std::vector<std::size_t>&)
Receive new mesh from refiner.
auto solution() const -> const tk::Fields&
void resized()
Resizing data sutrctures after mesh refinement has been completed.
void step()
Evaluate whether to continue with next time step.

Charm++ pack/unpack serializer member functions

void pup(PUP::er& p) override
Pack/Unpack serialize member function.
void operator|(PUP::er& p, ALECG& i)
Pack/Unpack serialize operator|.

Function documentation

static void inciter::ALECG::registerReducers()

Configure Charm++ custom reduction types initiated from this chare array.

Since this is a [nodeinit] routine, the runtime system executes the routine exactly once on every logical node early on in the Charm++ init sequence. Must be static as it is called without an object. See also: Section "Initializations at Program Startup" at in the Charm++ manual http://charm.cs.illinois.edu/manuals/html/charm++/manual.html.

ALECG_SDAG_CODE inciter::ALECG::ALECG(const CProxy_Discretization& disc, const std::map<int, std::vector<std::size_t>>&, const std::map<int, std::vector<std::size_t>>& bnode, const std::vector<std::size_t>&) explicit

Constructor.

Parameters
disc in Discretization proxy
bnode in Boundary-node lists mapped to side set ids

void inciter::ALECG::ResumeFromSync() override

Return from migration.

This is called when load balancing (LB) completes. The presence of this function does not affect whether or not we block on LB.

void inciter::ALECG::setup(tk::real v)

Setup: query boundary conditions, output mesh, etc.

Parameters
in Total mesh volume

void inciter::ALECG::advance(tk::real newdt)

Advance equations to next time step.

Parameters
newdt in Size of this new time step

void inciter::ALECG::lhs()

Compute left-hand side of transport equations.

[Compute own and send lhs on chare-boundary]

void inciter::ALECG::comlhs(const std::vector<std::size_t>& gid, const std::vector<std::vector<tk::real>>& L)

Receive contributions to left-hand side matrix on chare-boundaries.

Parameters
gid in Global mesh node IDs at which we receive LHS contributions
in Partial contributions of LHS to chare-boundary nodes

[Compute own and send lhs on chare-boundary]

[Receive lhs on chare-boundary] This function receives contributions to m_lhs, which stores the diagonal (lumped) mass matrix at mesh nodes. While m_lhs stores own contributions, m_lhsc collects the neighbor chare contributions during communication. This way work on m_lhs and m_lhsc is overlapped. The two are combined in lhsmerge().

void inciter::ALECG::comrhs(const std::vector<std::size_t>& gid, const std::vector<std::vector<tk::real>>& R)

Receive contributions to right-hand side vector on chare-boundaries.

Parameters
gid in Global mesh node IDs at which we receive RHS contributions
in Partial contributions of RHS to chare-boundary nodes

This function receives contributions to m_rhs, which stores the right hand side vector at mesh nodes. While m_rhs stores own contributions, m_rhsc collects the neighbor chare contributions during communication. This way work on m_rhs and m_rhsc is overlapped. The two are combined in solve().

void inciter::ALECG::refine()

Optionally refine/derefine mesh.

[Refine]

[Refine]

void inciter::ALECG::resizeAfterRefined(const std::vector<std::size_t>& ginpoel, const tk::UnsMesh::Chunk& chunk, const tk::UnsMesh::Coords& coord, const std::unordered_map<std::size_t, tk::UnsMesh::Edge>& addedNodes, const std::unordered_map<std::size_t, std::size_t>& addedTets, const std::unordered_map<int, std::vector<std::size_t>>& msum, const std::map<int, std::vector<std::size_t>>&, const std::map<int, std::vector<std::size_t>>& bnode, const std::vector<std::size_t>&)

Receive new mesh from refiner.

Parameters
ginpoel in Mesh connectivity with global node ids
chunk in New mesh chunk (connectivity and global<->local id maps)
coord in New mesh node coordinates
addedNodes in Newly added mesh nodes and their parents (local ids)
addedTets in Newly added mesh cells and their parents (local ids)
msum in New node communication map
bnode in Boundary-node lists mapped to side set ids

[Resize]

const tk::Fields& inciter::ALECG::solution() const

Returns Const-ref to current solution

Const-ref access to current solution

void inciter::ALECG::resized()

Resizing data sutrctures after mesh refinement has been completed.

[Merge lhs and continue]

void inciter::ALECG::pup(PUP::er& p) override

Pack/Unpack serialize member function.

Parameters
in/out Charm++'s PUP::er serializer object reference

void inciter::ALECG::operator|(PUP::er& p, ALECG& i)

Pack/Unpack serialize operator|.

Parameters
in/out Charm++'s PUP::er serializer object reference
in/out ALECG object reference