Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/Inciter/dg.ci 4 : : \copyright 2012-2015 J. Bakosi, 5 : : 2016-2018 Los Alamos National Security, LLC., 6 : : 2019-2021 Triad National Security, LLC. 7 : : All rights reserved. See the LICENSE file for details. 8 : : \brief Charm++ module interface file for the discontinuous Galerkin scheme 9 : : \details Charm++ module interface file for the discontinuous Galerking 10 : : scheme. 11 : : \see DG.h and DG.C for more info. 12 : : */ 13 : : // ***************************************************************************** 14 : : 15 : : module dg { 16 : : 17 : : extern module transporter; 18 : : extern module discretization; 19 : : extern module ghosts; 20 : : 21 : : include "UnsMesh.hpp"; 22 : : include "PUPUtil.hpp"; 23 : : include "FaceData.hpp"; 24 : : 25 : : namespace inciter { 26 : : 27 : : array [1D] DG { 28 : : entry DG( const CProxy_Discretization& disc, 29 : : const CProxy_Ghosts& ghostsproxy, 30 : : const std::map< int, std::vector< std::size_t > >& bface, 31 : : const std::map< int, std::vector< std::size_t > >& /* bnode */, 32 : : const std::vector< std::size_t >& triinpoel ); 33 : : initnode void registerReducers(); 34 : : entry void resizeSolVectors(); 35 : : entry void setup(); 36 : : entry void box( tk::real v, const std::vector< tk::real >& blkvol ); 37 : : entry void comlim( int fromch, 38 : : const std::vector< std::size_t >& tetid, 39 : : const std::vector< std::vector< tk::real > >& u, 40 : : const std::vector< std::vector< tk::real > >& prim ); 41 : : entry void comnodeout( const std::vector< std::size_t >& gid, 42 : : const std::vector< std::size_t >& nesup, 43 : : const std::vector< std::vector< tk::real > >& Lu, 44 : : const std::vector< std::vector< tk::real > >& Lp ); 45 : : entry void comrefine( int fromch, 46 : : const std::vector< std::size_t >& tetid, 47 : : const std::vector< std::size_t >& ndof ); 48 : : entry void comsmooth( int fromch, 49 : : const std::vector< std::size_t >& tetid, 50 : : const std::vector< std::size_t >& ndof ); 51 : : entry void comreco( int fromch, 52 : : const std::vector< std::size_t >& tetid, 53 : : const std::vector< std::vector< tk::real > >& u, 54 : : const std::vector< std::vector< tk::real > >& prim ); 55 : : entry void comsol( int fromch, 56 : : std::size_t fromstage, 57 : 72480 : const std::vector< std::size_t >& tetid, 58 : : const std::vector< std::vector< tk::real > >& u, 59 : : const std::vector< std::vector< tk::real > >& prim, 60 : 72480 : const std::vector< std::size_t >& ndof ); 61 : : entry void refine( const std::vector< tk::real >& l2ref ); 62 : : entry [reductiontarget] void solve( tk::real newdt ); 63 : 72480 : entry void resized(); 64 : : entry void transferSol(); 65 : : entry void advance( tk::real newdt, tk::real ); 66 : : entry void lhs(); 67 : 72480 : entry void comnodalExtrema( const std::vector< std::size_t >& gid, 68 : : const std::vector< std::vector< tk::real > >& G1, 69 : : const std::vector< std::vector< tk::real > >& G2 ); 70 : 72480 : entry void step(); 71 : : entry void start(); 72 : 72480 : entry void next(); 73 : : entry void evalLB( int nrestart ); 74 : : 75 : : // SDAG code follows. See http://charm.cs.illinois.edu/manuals/html/ 76 : : // charm++/manual.html, Sec. "Structured Control Flow: Structured Dagger". 77 [ + - ][ - + ]: 4352 : 78 : : entry void wait4sol() { 79 : : when ownsol_complete(), comsol_complete() serial "sol" { refine(); } 80 : : } 81 : : 82 : : entry void wait4refine() { 83 : : when ownrefine_complete(), comrefine_complete() serial "refine" { smooth(); } 84 : : } 85 : : 86 : : entry void wait4smooth() { 87 : : when ownsmooth_complete(), comsmooth_complete() serial "smooth" { reco(); } 88 : : } 89 : : 90 : : entry void wait4reco() { 91 : : when ownreco_complete(), comreco_complete() serial "reco" 92 : : { nodalExtrema(); } } 93 : : 94 : : entry void wait4nodalExtrema() { 95 : : when ownnodalExtrema_complete(), comnodalExtrema_complete() 96 : : serial "nodalExtrema" { lim(); } } 97 : : 98 : : entry void wait4lim() { 99 : : when ownlim_complete(), comlim_complete() serial "lim" { dt(); } } 100 : : 101 : : entry void wait4nod() { 102 : : when ownnod_complete( CkCallback c, 103 : : const std::unordered_map< std::size_t, std::size_t >& addedTets ), 104 : : comnodeout_complete() 105 : : serial "nod" { writeFields( c, addedTets ); } } 106 : : 107 : : entry void ownsol_complete(); 108 : : entry void comsol_complete(); 109 : : entry void ownrefine_complete(); 110 : : entry void comrefine_complete(); 111 : : entry void ownsmooth_complete(); 112 : : entry void comsmooth_complete(); 113 : : entry void ownreco_complete(); 114 : : entry void comreco_complete(); 115 : : entry void ownnodalExtrema_complete(); 116 : : entry void comnodalExtrema_complete(); 117 : : entry void ownlim_complete(); 118 : : entry void comlim_complete(); 119 : : entry void ownnod_complete( CkCallback c, const std::unordered_map< std::size_t, std::size_t >& addedTets ); 120 : : entry void comnodeout_complete(); 121 : : } 122 : : 123 : : } // inciter:: 124 : : 125 : : }