class
ALECGALECG Charm++ chare array used to advance PDEs in time with ALECG+RK.
Contents
Public static functions
- static void registerReducers()
- Configure Charm++ custom reduction types initiated from this chare array.
Constructors, destructors, conversion operators
- ALECG(CkMigrateMessage* msg) explicit
- Migrate constructor.
Public functions
- auto ALECG(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>>& bnode, const std::vector<std::size_t>& triinpoel) -> ALECG_SDAG_CODE explicit
- Constructor.
- void ResumeFromSync() override
- Return from migration.
- void resizeComm()
- Size communication buffers (no-op)
- void nodeNeighSetup()
- Setup node-neighborhood (no-op)
- void transferSol()
- (no-op)
- void setup()
- Start setup for solution.
-
void box(tk::
real v, const std::vector<tk:: real>& blkvols) - Receive total box IC volume and set conditions in box.
- void start()
- [start]
-
void advance(tk::
real newdt, tk:: real) - Advance equations to next time step.
- void lhs()
- Compute left-hand side of transport equations.
-
void comdfnorm(const std::unordered_map<tk::
UnsMesh:: Edge, std::array<tk:: real, 3>, tk:: UnsMesh:: Hash<2>, tk:: UnsMesh:: Eq<2>>& dfnorm) - Receive contributions to duual-face normals on chare boundaries.
-
void comnorm(const std::unordered_map<int, std::unordered_map<std::size_t, std::array<tk::
real, 4>>>& innorm) - Receive boundary point normals on chare-boundaries.
- void comblk(const std::vector<std::size_t>& gid, const std::vector<std::set<std::size_t>>& mb)
- Receive mesh block information for nodes on chare-boundaries.
-
void comChBndGrad(const std::vector<std::size_t>& gid,
const std::vector<std::vector<tk::
real>>& G) - Receive contributions to gradients 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 refine(const std::vector<tk::
real>& l2res) - Optionally refine/derefine mesh.
-
void resizePostAMR(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::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>>& bnode, 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&, const tk:: UnsMesh:: Coords&, const std::unordered_map<std::size_t, tk:: UnsMesh:: Edge>&, const std::unordered_map<std::size_t, std::size_t>&, const tk:: NodeCommMap&, const std::map<int, std::vector<std::size_t>>&, const std::map<int, std::vector<std::size_t>>&, const std::vector<std::size_t>&, CkCallback) - Extract field output to file.
- auto solution() const -> const tk::Fields&
- void meshvelstart()
- Start computing the mesh mesh velocity for ALE.
- void meshveldone()
- Done with computing the mesh velocity for ALE mesh motion.
- void resized()
- Resizing data sutrctures after mesh refinement has been completed.
- void step()
- Evaluate whether to continue with next time step.
- void evalLB(int nrestart)
- void stage()
- Evaluate whether to continue with next time step stage.
- void next()
- Continue to next time step.
Charm++ pack/unpack serializer member functions
- CProxy_Discretization m_disc
- Discretization proxy.
- std::size_t m_nsol
- Counter for high order solution vector nodes updated.
- std::size_t m_ngrad
- Counter for nodal gradients updated.
- std::size_t m_nrhs
- Counter for right-hand side vector nodes updated.
- std::size_t m_nbnorm
- Counter for receiving boundary point normals.
- std::size_t m_ndfnorm
- Counter for receiving dual-face normals on chare-boundary edges.
- std::size_t m_nmblk
- Counter for mesh block nodes updated.
- std::map<int, std::vector<std::size_t>> m_bnode
- Boundary node lists mapped to side set ids used in the input file.
- std::map<int, std::vector<std::size_t>> m_bface
- Boundary face lists mapped to side set ids used in the input file.
- std::vector<std::size_t> m_triinpoel
- Boundary triangle face connecitivity where BCs are set by user.
- std::vector<std::size_t> m_bndel
- Elements along mesh boundary.
- std::unordered_map<tk::
UnsMesh:: Edge, std::array<tk:: real, 3>, tk:: UnsMesh:: Hash<2>, tk:: UnsMesh:: Eq<2>> m_dfnorm - Dual-face normals along edges.
- std::unordered_map<tk::
UnsMesh:: Edge, std::array<tk:: real, 3>, tk:: UnsMesh:: Hash<2>, tk:: UnsMesh:: Eq<2>> m_dfnormc - Receive buffer for dual-face normals along chare-boundary edges.
- std::vector<tk::
real> m_dfn - Streamable dual-face normals.
- std::pair<std::vector<std::size_t>, std::vector<std::size_t>> m_esup
- El;ements surrounding points.
- std::pair<std::vector<std::size_t>, std::vector<std::size_t>> m_psup
- Points surrounding points.
- tk::Fields m_u
- Unknown/solution vector at mesh nodes.
- tk::Fields m_un
- Unknown/solution vector at mesh nodes at previous time.
- tk::Fields m_rhs
- Right-hand side vector (for the high order system)
- std::unordered_map<std::size_t, std::vector<tk::
real>> m_rhsc - tk::Fields m_chBndGrad
- Nodal gradients at chare-boundary nodes.
- std::unordered_map<std::size_t, std::vector<std::pair<bool, tk::
real>>> m_dirbc - std::unordered_map<std::size_t, std::vector<tk::
real>> m_chBndGradc - NodeDiagnostics m_diag
- Diagnostics object.
- std::unordered_map<int, std::unordered_map<std::size_t, std::array<tk::
real, 4>>> m_bnorm - std::unordered_map<int, std::unordered_map<std::size_t, std::array<tk::
real, 4>>> m_bnormc - Receive buffer for communication of the boundary point normals associated to side sets.
- std::unordered_set<std::size_t> m_symbcnodes
- Unique set of nodes at which symmetry BCs are set.
- std::unordered_set<std::size_t> m_farfieldbcnodes
- Unique set of nodes at which farfield BCs are set.
- std::vector<int> m_symbctri
- Vector with 1 at symmetry BC boundary triangles.
- std::vector<std::unordered_set<std::size_t>> m_timedepbcnodes
- Unique set of nodes at which time dependent BCs are set.
- std::vector<tk::
Table<5>> m_timedepbcFn - User defined discrete function of time used in the time dependent.
- std::size_t m_stage
- Runge-Kutta stage counter.
- std::vector<std::unordered_set<std::size_t>> m_boxnodes
- Mesh node ids at which user-defined box ICs are defined (multiple boxes)
- std::vector<std::size_t> m_edgenode
- Local node IDs of edges.
- std::vector<std::size_t> m_edgeid
- Edge ids in the order of access.
- std::vector<tk::
real> m_dtp - Time step size for each mesh node.
- std::vector<tk::
real> m_tp - Physical time for each mesh node.
- int m_finished
- True in the last time step.
- int m_newmesh
- State indicating the reason we are recomputing the normals.
- int m_refinedmesh
- State indicating if the mesh has been refined by dtref.
- std::size_t m_nusermeshblk
- Number of mesh-blocks with user-defined ICs.
- std::unordered_map<std::size_t, std::set<std::size_t>> m_nodeblockid
- Local node ids associated with mesh block ids.
- std::unordered_map<std::size_t, std::set<std::size_t>> m_nodeblockidc
- 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 [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:/
ALECG_SDAG_CODE inciter:: ALECG:: ALECG(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>>& bnode,
const std::vector<std::size_t>& triinpoel) explicit
Constructor.
Parameters | |
---|---|
disc in | Discretization proxy |
ghostsproxy | |
bface in | Boundary-faces mapped to side sets used in the input file |
bnode in | Boundary-node lists mapped to side sets used in input file |
triinpoel in | Boundary-face connectivity where BCs set (global 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:: lhs()
Compute left-hand side of transport equations.
[start]
[Compute lhs]
Also (re-)compute all data structures if the mesh changed.
void inciter:: ALECG:: comdfnorm(const std::unordered_map<tk:: UnsMesh:: Edge, std::array<tk:: real, 3>, tk:: UnsMesh:: Hash<2>, tk:: UnsMesh:: Eq<2>>& dfnorm)
Receive contributions to duual-face normals on chare boundaries.
Parameters | |
---|---|
dfnorm in | Incoming partial sums of dual-face normals associated to chare-boundary edges |
void inciter:: ALECG:: comnorm(const std::unordered_map<int, std::unordered_map<std::size_t, std::array<tk:: real, 4>>>& innorm)
Receive boundary point normals on chare-boundaries.
Parameters | |
---|---|
innorm in | Incoming partial sums of boundary point normal contributions to normals (first 3 components), inverse distance squared (4th component), associated to side set ids |
void inciter:: ALECG:: comblk(const std::vector<std::size_t>& gid,
const std::vector<std::set<std::size_t>>& mb)
Receive mesh block information for nodes on chare-boundaries.
Parameters | |
---|---|
gid in | Global mesh node IDs at which we receive RHS contributions |
mb in | Block ids for each node on chare-boundaries |
This function receives mesh block information for nodes on chare boundaries. While m_nodeblockid stores block information for own nodes, m_nodeblockidc collects the neighbor chare information during communication. This way work on m_nodeblockid and m_nodeblockidc is overlapped. The two are combined in continueSetup().
void inciter:: ALECG:: comChBndGrad(const std::vector<std::size_t>& gid,
const std::vector<std::vector<tk:: real>>& G)
Receive contributions to gradients on chare-boundaries.
Parameters | |
---|---|
gid in | Global mesh node IDs at which we receive grad contributions |
G in | Partial contributions of gradients to chare-boundary nodes |
This function receives contributions to m_chBndGrad, which stores nodal gradients at mesh chare-boundary nodes. While m_chBndGrad stores own contributions, m_chBndGradc collects the neighbor chare contributions during communication. This way work on m_chBndGrad and m_chBndGradc is overlapped. The two are combined in rhs().
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 |
R 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:: resizePostAMR(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::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>>& bnode,
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 | |
---|---|
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) |
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 |
bnode in | Boundary-node lists mapped to side set ids |
triinpoel in | Boundary-face connectivity |
elemblockid in | Local tet ids associated with mesh block ids |
[Refine]
[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.
[Resize]
void inciter:: ALECG:: evalLB(int nrestart)
Parameters | |
---|---|
nrestart in | Number of times restarted |
void inciter:: ALECG:: 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::vector<std::pair<bool, tk:: real>>> inciter:: ALECG:: m_dirbc
Boundary conditions evaluated and assigned to local mesh node IDs
Vector of pairs of bool and boundary condition value associated to local mesh node IDs at which the user has set Dirichlet boundary conditions for all PDEs integrated. The bool indicates whether the BC is set at the node for that component the if true, the real value is the increment (from t to dt) in the BC specified for a component.
std::unordered_map<std::size_t, std::vector<tk:: real>> inciter:: ALECG:: m_chBndGradc
Receive buffer for communication of the nodal gradients
Key: chare id, value: gradients for all scalar components per node
std::unordered_map<int, std::unordered_map<std::size_t, std::array<tk:: real, 4>>> inciter:: ALECG:: m_bnormc
Receive buffer for communication of the boundary point normals associated to side sets.
Key: global node id, value: normals (first 3 components), inverse distance squared (4th component), outer key, side set id
std::unordered_map<std::size_t, std::set<std::size_t>> inciter:: ALECG:: m_nodeblockidc
Receive buffer for communication of the mesh block ids
Key: mesh block id, value: set of global node ids for nodes in this mesh block.