class
DGDG Charm++ chare array used to advance PDEs in time with DG+RK.
Contents
Public static functions
- static void registerReducers()
- Configure Charm++ reduction types for concatenating BC nodelists.
Constructors, destructors, conversion operators
- DG(CkMigrateMessage* msg) explicit
- Migrate constructor.
Public functions
- auto DG(const CProxy_Discretization& disc, const CProxy_Ghosts& ghostsproxy, const std::map<int, std::vector<std::size_t>>& bface, const std::map<int, std::vector<std::size_t>>&, const std::vector<std::size_t>& triinpoel) -> DG_SDAG_CODE explicit
- Constructor.
- void ResumeFromSync() override
- Return from migration.
- void resizeSolVectors()
- Resize solution vectors after extension due to Ghosts and continue setup.
- void setup()
- Setup: query boundary conditions, output mesh, etc.
-
void box(tk::
real v, const std::vector<tk:: real>& blkvols) - Receive total box IC volume and set conditions in box.
- void evalLB(int nrestart)
- void start()
- Start time stepping.
- void next()
- Continue to next time step.
- void comrefine(int fromch, const std::vector<std::size_t>& tetid, const std::vector<std::size_t>& ndof)
- Receive chare-boundary updated solution from neighboring chares.
- void comsmooth(int fromch, const std::vector<std::size_t>& tetid, const std::vector<std::size_t>& ndof)
-
void comlim(int fromch,
const std::vector<std::size_t>& tetid,
const std::vector<std::vector<tk::
real>>& u, const std::vector<std::vector<tk:: real>>& prim) - Receive chare-boundary limiter function data from neighboring chares.
-
void comreco(int fromch,
const std::vector<std::size_t>& tetid,
const std::vector<std::vector<tk::
real>>& u, const std::vector<std::vector<tk:: real>>& prim) - Receive chare-boundary reconstructed data from neighboring chares.
-
void comsol(int fromch,
std::size_t fromstage,
const std::vector<std::size_t>& tetid,
const std::vector<std::vector<tk::
real>>& u, const std::vector<std::vector<tk:: real>>& prim, const std::vector<std::size_t>& interface, const std::vector<std::size_t>& ndof) - Receive chare-boundary ghost data from neighboring chares.
-
void comnodalExtrema(const std::vector<std::size_t>& gid,
const std::vector<std::vector<tk::
real>>& G1, const std::vector<std::vector<tk:: real>>& G2) - Receive contributions to nodal gradients on chare-boundaries.
- void resizeNodalExtremac()
- Initialize the vector of nodal extrema.
-
void evalNodalExtrmRefEl(const std::size_t ncomp,
const std::size_t nprim,
const std::size_t ndof_NodalExtrm,
const std::vector<std::size_t>& bndel,
const std::vector<std::size_t>& inpoel,
const std::vector<std::size_t>& gid,
const std::unordered_map<std::size_t, std::size_t>& bid,
const tk::Fields& U,
const tk::Fields& P,
std::vector<std::vector<tk::
real>>& uNodalExtrm, std::vector<std::vector<tk:: real>>& pNodalExtrm) - Compute the nodal extrema of ref el derivatives for chare-boundary nodes.
-
void comnodeout(const std::vector<std::size_t>& gid,
const std::vector<std::size_t>& nesup,
const std::vector<std::vector<tk::
real>>& Lu, const std::vector<std::vector<tk:: real>>& Lp) - Receive nodal solution (ofor field output) contributions from neighboring chares.
-
void refine(const std::vector<tk::
real>& l2res) - Optionally refine/derefine mesh.
-
void resizePostAMR(const std::vector<std::size_t>&,
const tk::
UnsMesh:: Chunk& chunk, const tk:: UnsMesh:: Coords& coord, const std::unordered_map<std::size_t, tk:: UnsMesh:: Edge>&, const std::unordered_map<std::size_t, std::size_t>& addedTets, const std::set<std::size_t>& removedNodes, const std::unordered_map<std::size_t, std::size_t>& amrNodeMap, const tk:: NodeCommMap& nodeCommMap, const std::map<int, std::vector<std::size_t>>& bface, const std::map<int, std::vector<std::size_t>>&, const std::vector<std::size_t>& triinpoel, const std::unordered_map<std::size_t, std::set<std::size_t>>& elemblockid) - Receive new mesh from Refiner.
-
void extractFieldOutput(const std::vector<std::size_t>&,
const tk::
UnsMesh:: Chunk& chunk, const tk:: UnsMesh:: Coords& coord, const std::unordered_map<std::size_t, tk:: UnsMesh:: Edge>&, const std::unordered_map<std::size_t, std::size_t>& addedTets, const tk:: NodeCommMap& nodeCommMap, const std::map<int, std::vector<std::size_t>>& bface, const std::map<int, std::vector<std::size_t>>&, const std::vector<std::size_t>& triinpoel, CkCallback c) - Extract field output going to file.
- auto solution() const -> const tk::Fields&
- void lhs()
- Compute left hand side.
- void resized()
- Unused in DG.
- void transferSol()
- (no-op)
-
void advance(tk::
real, tk:: real) - (no-op)
-
void solve(tk::
real newdt) - Compute right hand side and solve system.
- void step()
- Evaluate whether to continue with next time step.
Charm++ pack/unpack serializer member functions
- CProxy_Discretization m_disc
- Discretization proxy.
- CProxy_Ghosts m_ghosts
- Distributed Ghosts proxy.
- std::size_t m_ndof_NodalExtrm
- Degree of freedom for nodal extrema vector. When DGP1 is applied, there is one degree of freedom for cell average variable. When DGP2 is applied, the degree of freedom is 4 which refers to cell average and gradients in three directions.
- std::size_t m_nsol
- Counter signaling that we have received all our solution ghost data.
- std::size_t m_ninitsol
- Counter signaling that we have received all our solution ghost data during setup.
- std::size_t m_nlim
- Counter signaling that we have received all our limiter function ghost data.
- std::size_t m_nnod
- Counter signaling that we have received all our node solution contributions.
- std::size_t m_nrefine
- Counter signaling that we have received all refined ndof.
- std::size_t m_nsmooth
- Counter signaling that we have received all smoothed ndof.
- std::size_t m_nreco
- Counter signaling that we have received all our reconstructed ghost data.
- std::size_t m_nnodalExtrema
- Counter signaling that we have received all our nodal extrema from ghost chare partitions.
- std::size_t m_nstiffeq
- Counters signaling how many stiff and non-stiff equations in the system.
- tk::Fields m_u
- Vector of unknown/solution average over each mesh element.
- tk::Fields m_un
- Vector of unknown at previous time-step.
- tk::Fields m_p
- Vector of primitive quantities over each mesh element.
- tk::Fields m_geoElem
- Element geometry.
- tk::Fields m_lhs
- Left-hand side mass-matrix which is a diagonal matrix.
- tk::Fields m_rhs
- Vector of right-hand side.
- tk::Fields m_rhsprev
- Vector of previous right-hand side values used in the IMEX-RK scheme.
- tk::Fields m_stiffrhs
- Vector of right-hand side for stiff equations.
- tk::Fields m_stiffrhsprev
- Vector of previous right-hand side values for stiff equations.
- std::vector<std::size_t> m_stiffEqIdx
- Vectors that indicates which equations are stiff and non-stiff.
- std::vector<std::vector<tk::
real>> m_mtInv - Inverse of Taylor mass-matrix.
- std::vector<std::vector<tk::
real>> m_uNodalExtrm - Vector of nodal extrema for conservative variables.
- std::vector<std::vector<tk::
real>> m_pNodalExtrm - Vector of nodal extrema for primitive variables.
- std::unordered_map<std::size_t, std::vector<tk::
real>> m_uNodalExtrmc - Buffer for vector of nodal extrema for conservative variables.
- std::unordered_map<std::size_t, std::vector<tk::
real>> m_pNodalExtrmc - Buffer for vector of nodal extrema for primitive variables.
- std::size_t m_npoin
- Counter for number of nodes on this chare excluding ghosts.
- ElemDiagnostics m_diag
- Diagnostics object.
- std::size_t m_stage
- Runge-Kutta stage counter.
- std::vector<std::size_t> m_ndof
- Vector of local number of degrees of freedom for each element.
- std::vector<std::size_t> m_interface
- Interface marker for field output.
- std::vector<std::size_t> m_numEqDof
- Vector of number of degrees of freedom for each PDE equation/component.
- std::array<std::vector<std::vector<tk::
real>>, 3> m_uc - Solution receive buffers for ghosts only.
- std::array<std::vector<std::vector<tk::
real>>, 3> m_pc - Primitive-variable receive buffers for ghosts only.
- std::array<std::vector<std::size_t>, 3> m_ndofc
- Number of degrees of freedom (for p-adaptive) receive buffers for ghosts only.
- std::array<std::vector<std::size_t>, 1> m_interfacec
- Interface marker receive buffers for ghost only.
- std::size_t m_initial
- 1 if starting time stepping, 0 if during time stepping
- tk::Fields m_uElemfields
- Solution elem output fields.
- tk::Fields m_pElemfields
- Primitive elem output fields.
- tk::Fields m_uNodefields
- Solution nodal output fields.
- tk::Fields m_pNodefields
- Primitive nodal output fields.
- std::unordered_map<std::size_t, std::pair<std::vector<tk::
real>, std::size_t>> m_uNodefieldsc - std::unordered_map<std::size_t, std::pair<std::vector<tk::
real>, std::size_t>> m_pNodefieldsc - Ghosts::
OutMesh m_outmesh - Storage for refined mesh used for field output.
- std::vector<std::unordered_set<std::size_t>> m_boxelems
- Element ids at which box ICs are defined by user (multiple boxes)
- std::vector<std::size_t> m_shockmarker
- Shock detection marker for field output.
- void pup(PUP::er& p) override
- Pack/Unpack serialize member function.
- void operator|(PUP::er& p, DG& i)
- Pack/Unpack serialize operator|.
Function documentation
static void inciter:: DG:: registerReducers()
Configure Charm++ reduction types for concatenating BC nodelists.
Since this is a [initnode] 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:/
DG_SDAG_CODE inciter:: DG:: DG(const CProxy_Discretization& disc,
const CProxy_Ghosts& ghostsproxy,
const std::map<int, std::vector<std::size_t>>& bface,
const std::map<int, std::vector<std::size_t>>&,
const std::vector<std::size_t>& triinpoel) explicit
Constructor.
Parameters | |
---|---|
disc in | Discretization proxy |
ghostsproxy | |
bface in | Boundary-faces mapped to side set ids |
triinpoel in | Boundary-face connectivity |
void inciter:: DG:: 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:: DG:: evalLB(int nrestart)
Parameters | |
---|---|
nrestart in | Number of times restarted |
void inciter:: DG:: comrefine(int fromch,
const std::vector<std::size_t>& tetid,
const std::vector<std::size_t>& ndof)
Receive chare-boundary updated solution from neighboring chares.
Parameters | |
---|---|
fromch in | Sender chare id |
tetid in | Ghost tet ids we receive solution data for |
ndof in | Number of degrees of freedom for chare-boundary elements |
This function receives contributions to the refined ndof data from fellow chares.
void inciter:: DG:: comsmooth(int fromch,
const std::vector<std::size_t>& tetid,
const std::vector<std::size_t>& ndof)
Parameters | |
---|---|
fromch in | Sender chare id |
tetid in | Ghost tet ids we receive solution data for |
ndof in | Number of degrees of freedom for chare-boundary elements |
This function receives contributions to the smoothed ndof data from fellow chares.
void inciter:: DG:: comlim(int fromch,
const std::vector<std::size_t>& tetid,
const std::vector<std::vector<tk:: real>>& u,
const std::vector<std::vector<tk:: real>>& prim)
Receive chare-boundary limiter function data from neighboring chares.
Parameters | |
---|---|
fromch in | Sender chare id |
tetid in | Ghost tet ids we receive solution data for |
u in | Limited high-order solution |
prim in | Limited high-order primitive quantities |
This function receives contributions to the limited solution from fellow chares.
void inciter:: DG:: comreco(int fromch,
const std::vector<std::size_t>& tetid,
const std::vector<std::vector<tk:: real>>& u,
const std::vector<std::vector<tk:: real>>& prim)
Receive chare-boundary reconstructed data from neighboring chares.
Parameters | |
---|---|
fromch in | Sender chare id |
tetid in | Ghost tet ids we receive solution data for |
u in | Reconstructed high-order solution |
prim in | Limited high-order primitive quantities |
This function receives contributions to the reconstructed solution from fellow chares.
void inciter:: DG:: comsol(int fromch,
std::size_t fromstage,
const std::vector<std::size_t>& tetid,
const std::vector<std::vector<tk:: real>>& u,
const std::vector<std::vector<tk:: real>>& prim,
const std::vector<std::size_t>& interface,
const std::vector<std::size_t>& ndof)
Receive chare-boundary ghost data from neighboring chares.
Parameters | |
---|---|
fromch in | Sender chare id |
fromstage in | Sender chare time step stage |
tetid in | Ghost tet ids we receive solution data for |
u in | Solution ghost data |
prim in | Primitive variables in ghost cells |
interface in | Interface marker in ghost cells |
ndof in | Number of degrees of freedom for chare-boundary elements |
This function receives contributions to the unlimited solution from fellow chares.
void inciter:: DG:: comnodalExtrema(const std::vector<std::size_t>& gid,
const std::vector<std::vector<tk:: real>>& G1,
const std::vector<std::vector<tk:: real>>& G2)
Receive contributions to nodal gradients on chare-boundaries.
Parameters | |
---|---|
gid in | Global mesh node IDs at which we receive grad contributions |
G1 in | Partial contributions of extrema for conservative variables to chare-boundary nodes |
G2 in | Partial contributions of extrema for primitive variables to chare-boundary nodes |
This function receives contributions to m_uNodalExtrm/m_pNodalExtrm , which stores nodal extrems at mesh chare-boundary nodes. While m_uNodalExtrm/m_pNodalExtrm stores own contributions, m_uNodalExtrmc /m_pNodalExtrmc collects the neighbor chare contributions during communication.
void inciter:: DG:: evalNodalExtrmRefEl(const std::size_t ncomp,
const std::size_t nprim,
const std::size_t ndof_NodalExtrm,
const std::vector<std::size_t>& bndel,
const std::vector<std::size_t>& inpoel,
const std::vector<std::size_t>& gid,
const std::unordered_map<std::size_t, std::size_t>& bid,
const tk::Fields& U,
const tk::Fields& P,
std::vector<std::vector<tk:: real>>& uNodalExtrm,
std::vector<std::vector<tk:: real>>& pNodalExtrm)
Compute the nodal extrema of ref el derivatives for chare-boundary nodes.
Parameters | |
---|---|
ncomp in | Number of conservative variables |
nprim in | Number of primitive variables |
ndof_NodalExtrm in | Degree of freedom for nodal extrema |
bndel in | List of elements contributing to chare-boundary nodes |
inpoel in | Element-node connectivity for element e |
gid in | Local->global node id map |
bid in | Local chare-boundary node ids (value) associated to global node ids (key) |
U in | Vector of conservative variables |
P in | Vector of primitive variables |
uNodalExtrm in/out | Chare-boundary nodal extrema for conservative variables |
pNodalExtrm in/out | Chare-boundary nodal extrema for primitive variables |
void inciter:: DG:: comnodeout(const std::vector<std::size_t>& gid,
const std::vector<std::size_t>& nesup,
const std::vector<std::vector<tk:: real>>& Lu,
const std::vector<std::vector<tk:: real>>& Lp)
Receive nodal solution (ofor field output) contributions from neighboring chares.
Parameters | |
---|---|
gid in | Global mesh node IDs at which we receive contributions |
nesup in | Number of elements surrounding points |
Lu in | Partial contributions of solution nodal fields to chare-boundary nodes |
Lp in | Partial contributions of primitive quantity nodal fields to chare-boundary nodes |
void inciter:: DG:: resizePostAMR(const std::vector<std::size_t>&,
const tk:: UnsMesh:: Chunk& chunk,
const tk:: UnsMesh:: Coords& coord,
const std::unordered_map<std::size_t, tk:: UnsMesh:: Edge>&,
const std::unordered_map<std::size_t, std::size_t>& addedTets,
const std::set<std::size_t>& removedNodes,
const std::unordered_map<std::size_t, std::size_t>& amrNodeMap,
const tk:: NodeCommMap& nodeCommMap,
const std::map<int, std::vector<std::size_t>>& bface,
const std::map<int, std::vector<std::size_t>>&,
const std::vector<std::size_t>& triinpoel,
const std::unordered_map<std::size_t, std::set<std::size_t>>& elemblockid)
Receive new mesh from Refiner.
Parameters | |
---|---|
chunk in | New mesh chunk (connectivity and global<->local id maps) |
coord in | New mesh node coordinates |
addedTets in | Newly added mesh cells and their parents (local ids) |
removedNodes in | Newly removed mesh node local ids |
amrNodeMap in | Node id map after amr (local ids) |
nodeCommMap in | New node communication map |
bface in | Boundary-faces mapped to side set ids |
triinpoel in | Boundary-face connectivity |
elemblockid in | Local tet ids associated with mesh block ids |
void inciter:: DG:: extractFieldOutput(const std::vector<std::size_t>&,
const tk:: UnsMesh:: Chunk& chunk,
const tk:: UnsMesh:: Coords& coord,
const std::unordered_map<std::size_t, tk:: UnsMesh:: Edge>&,
const std::unordered_map<std::size_t, std::size_t>& addedTets,
const tk:: NodeCommMap& nodeCommMap,
const std::map<int, std::vector<std::size_t>>& bface,
const std::map<int, std::vector<std::size_t>>&,
const std::vector<std::size_t>& triinpoel,
CkCallback c)
Extract field output going to file.
Parameters | |
---|---|
chunk in | Field-output mesh chunk (connectivity and global<->local id maps) |
coord in | Field-output mesh node coordinates |
addedTets in | Field-output mesh cells and their parents (local ids) |
nodeCommMap in | Field-output mesh node communication map |
bface in | Field-output meshndary-faces mapped to side set ids |
triinpoel in | Field-output mesh boundary-face connectivity |
c in | Function to continue with after the write |
const tk::Fields& inciter:: DG:: solution() const
Returns | Const-ref to current solution |
---|
Const-ref access to current solution
void inciter:: DG:: pup(PUP::er& p) override
Pack/Unpack serialize member function.
Parameters | |
---|---|
p in/out | Charm++'s PUP::er serializer object reference |
Variable documentation
std::unordered_map<std::size_t, std::pair<std::vector<tk:: real>, std::size_t>> inciter:: DG:: m_uNodefieldsc
Receive buffer for communication of solution node fields
Key: global node id, value: output fields and number of elements surrounding the node
std::unordered_map<std::size_t, std::pair<std::vector<tk:: real>, std::size_t>> inciter:: DG:: m_pNodefieldsc
Receive buffer for communication of primitive quantity node fields
Key: global node id, value: output fields and number of elements surrounding the node