Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/Inciter/oversetfe.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 for continuous Galerkin + ALE + RK 9 : : \details Charm++ module interface file for the continuous Galerkin (CG) 10 : : finite element scheme in the arbitrary Lagrangian-Eulerian (ALE) 11 : : reference frame + Runge-Kutta (RK) time stepping. 12 : : \see OversetFE.hpp and OversetFE.cpp for more info. 13 : : */ 14 : : // ***************************************************************************** 15 : : 16 : : module oversetfe { 17 : : 18 : : //! [External modules and includes] 19 : : extern module transporter; 20 : : extern module discretization; 21 : : extern module ghosts; 22 : : 23 : : include "UnsMesh.hpp"; 24 : : include "PUPUtil.hpp"; 25 : : //! [External modules and includes] 26 : : 27 : : namespace inciter { 28 : : 29 : : //! [1D Charm++ chare array] 30 : : array [1D] OversetFE { 31 : : //! [1D Charm++ chare array] 32 : : //! [Entry methods] 33 : : entry OversetFE( const CProxy_Discretization& disc, 34 : : const CProxy_Ghosts& ghostsproxy, 35 : : const std::map< int, std::vector< std::size_t > >& bface, 36 : : const std::map< int, std::vector< std::size_t > >& bnode, 37 : : const std::vector< std::size_t >& triinpoel ); 38 : : initnode void registerReducers(); 39 : : entry void setup(); 40 : : entry void box( tk::real v, const std::vector< tk::real >& blkvol ); 41 : : entry void resizeComm(); 42 : : entry void nodeNeighSetup(); 43 : 307 : entry void start(); 44 : : entry void refine( const std::vector< tk::real >& l2ref ); 45 : : entry [reductiontarget] void advance( tk::real newdt, tk::real nmovedmesh ); 46 : : entry void comdfnorm( 47 : 763 : const std::unordered_map< tk::UnsMesh::Edge, 48 : : std::array< tk::real, 3 >, 49 : 10188 : tk::UnsMesh::Hash<2>, tk::UnsMesh::Eq<2> >& dfnorm ); 50 : : entry void comnorm( const std::unordered_map< int, 51 : 10188 : std::unordered_map< std::size_t, std::array< tk::real, 4 > > >& innorm ); 52 : : entry void comblk( const std::vector< std::size_t >& gid, 53 : : const std::vector< std::set< std::size_t > >& mb ); 54 : : entry void comChBndGrad( const std::vector< std::size_t >& gid, 55 : : const std::vector< std::vector< tk::real > >& G ); 56 : : entry void comrhs( const std::vector< std::size_t >& gid, 57 : : const std::vector< std::vector< tk::real > >& R ); 58 : : entry void resized(); 59 : : entry void lhs(); 60 : : entry void transferSol(); 61 : : entry void step(); 62 : : entry void next(); 63 : : entry void stage(); 64 : : entry void evalLB( int nrestart ); 65 : : //! [Entry methods] 66 : : 67 : : // SDAG code follows. See http://charm.cs.illinois.edu/manuals/html/ 68 : : // charm++/manual.html, Sec. "Structured Control Flow: Structured Dagger". 69 : : 70 : : //! [DAG] 71 : : entry void wait4meshblk() { 72 : : when ownblk_complete(), comblk_complete() serial "meshblk" 73 : : { continueSetup(); } } 74 : : 75 : : entry void wait4norm() { 76 : : when ownnorm_complete(), comnorm_complete(), 77 : : owndfnorm_complete(), comdfnorm_complete() 78 : : serial "norm" { mergelhs(); } } 79 : : 80 : : entry void wait4grad() { 81 : : when owngrad_complete(), comgrad_complete() serial "grad" { rhs(); } } 82 : : 83 : : entry void wait4rhs() { 84 : : when ownrhs_complete(), comrhs_complete() serial "rhs" { solve(); } } 85 : : 86 : : entry void ownblk_complete(); 87 : : entry void comblk_complete(); 88 : : entry void ownnorm_complete(); 89 : : entry void comnorm_complete(); 90 : : entry void owndfnorm_complete(); 91 : : entry void comdfnorm_complete(); 92 : : entry void ownrhs_complete(); 93 : : entry void comrhs_complete(); 94 : : entry void owngrad_complete(); 95 : : entry void comgrad_complete(); 96 : : //! [DAG] 97 : : } 98 : : 99 : : } // inciter:: 100 : : 101 : : }