Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/Inciter/alecg.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 ALECG.h and ALECG.C for more info. 13 : : */ 14 : : // ***************************************************************************** 15 : : 16 : : module alecg { 17 : : 18 : : //! [External modules and includes] 19 : : extern module transporter; 20 : : extern module discretization; 21 : : 22 : : include "UnsMesh.hpp"; 23 : : include "PUPUtil.hpp"; 24 : : //! [External modules and includes] 25 : : 26 : : namespace inciter { 27 : : 28 : : //! [1D Charm++ chare array] 29 : : array [1D] ALECG { 30 : : //! [1D Charm++ chare array] 31 : : //! [Entry methods] 32 : : entry ALECG( const CProxy_Discretization& disc, 33 : : const std::map< int, std::vector< std::size_t > >& bface, 34 : : const std::map< int, std::vector< std::size_t > >& bnode, 35 : : const std::vector< std::size_t >& triinpoel ); 36 : : initnode void registerReducers(); 37 : : entry void setup(); 38 : : entry void box( tk::real v ); 39 : : entry void resizeComm(); 40 : 1614 : entry void nodeNeighSetup(); 41 : : entry void start(); 42 : 46806 : entry void refine( const std::vector< tk::real >& l2ref ); 43 : : entry [reductiontarget] void advance( tk::real newdt ); 44 : 46806 : entry void comdfnorm( 45 : : const std::unordered_map< tk::UnsMesh::Edge, 46 : : std::array< tk::real, 3 >, 47 [ + + ]: 62408 : tk::UnsMesh::Hash<2>, tk::UnsMesh::Eq<2> >& dfnorm ); 48 : : entry void comnorm( const std::unordered_map< int, 49 : : std::unordered_map< std::size_t, std::array< tk::real, 4 > > >& innorm ); 50 : : entry void comChBndGrad( const std::vector< std::size_t >& gid, 51 : : const std::vector< std::vector< tk::real > >& G ); 52 : : entry void comrhs( const std::vector< std::size_t >& gid, 53 : : const std::vector< std::vector< tk::real > >& R ); 54 : : entry void resized(); 55 : : entry void meshveldone(); 56 : : entry void lhs(); 57 : : entry void step(); 58 : : entry void next(); 59 : : entry void stage(); 60 : : entry void evalLB( int nrestart ); 61 : : //! [Entry methods] 62 : : 63 : : // SDAG code follows. See http://charm.cs.illinois.edu/manuals/html/ 64 : : // charm++/manual.html, Sec. "Structured Control Flow: Structured Dagger". 65 : : 66 : : //! [DAG] 67 : : entry void wait4norm() { 68 : : when ownnorm_complete(), comnorm_complete(), 69 : : owndfnorm_complete(), comdfnorm_complete(), 70 : : transfer_complete() serial "norm" { mergelhs(); } } 71 : : 72 : : entry void wait4grad() { 73 : : when owngrad_complete(), comgrad_complete() serial "grad" { rhs(); } } 74 : : 75 : : entry void wait4rhs() { 76 : : when ownrhs_complete(), comrhs_complete() serial "rhs" { solve(); } } 77 : : 78 : : entry void wait4mesh() { 79 : : when norm_complete(), resize_complete() serial "trans" { 80 : : if (m_newmesh == 0) meshvelstart(); else transfer(); } } 81 : : 82 : : entry void ownnorm_complete(); 83 : : entry void comnorm_complete(); 84 : : entry void owndfnorm_complete(); 85 : : entry void comdfnorm_complete(); 86 : : entry void transfer_complete(); 87 : : entry void ownrhs_complete(); 88 : : entry void comrhs_complete(); 89 : : entry void owngrad_complete(); 90 : : entry void comgrad_complete(); 91 : : entry void norm_complete(); 92 : : entry void resize_complete(); 93 : : //! [DAG] 94 : : } 95 : : 96 : : } // inciter:: 97 : : 98 : : }