Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/Inciter/diagcg.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 FEM w/o matrix 9 : : \details Charm++ module interface file for the continuous Galerkin 10 : : discretization scheme using a diagonal matrix for the left hand side. 11 : : \see DiagCG.h and DiagCG.C for more info. 12 : : */ 13 : : // ***************************************************************************** 14 : : 15 : : module diagcg { 16 : : 17 : : extern module transporter; 18 : : extern module discretization; 19 : : 20 : : include "UnsMesh.hpp"; 21 : : include "PUPUtil.hpp"; 22 : : include "Fields.hpp"; 23 : : 24 : : namespace inciter { 25 : : 26 : : array [1D] DiagCG { 27 : : entry DiagCG( const CProxy_Discretization& disc, 28 : : const std::map< int, std::vector< std::size_t > >& bface, 29 : : const std::map< int, std::vector< std::size_t > >& bnode, 30 : : const std::vector< std::size_t >& triinpoel ); 31 : : initnode void registerReducers(); 32 : : entry void setup(); 33 : : entry void box( tk::real v ); 34 : : entry void resizeComm(); 35 : 654 : entry void nodeNeighSetup(); 36 : : entry void init(); 37 : : entry void refine( const std::vector< tk::real >& l2ref ); 38 : 730 : entry [reductiontarget] void advance( tk::real newdt ); 39 : : entry void comnorm( const std::unordered_map< int, 40 : : std::unordered_map< std::size_t, std::array< tk::real, 4 > > >& innorm ); 41 : 18283 : entry void comlhs( const std::vector< std::size_t >& gid, 42 : : const std::vector< std::vector< tk::real > >& L ); 43 : 18283 : entry void comrhs( const std::vector< std::size_t >& gid, 44 : : const std::vector< std::vector< tk::real > >& R, 45 : : const std::vector< std::vector< tk::real > >& D ); 46 : : entry void resized(); 47 : : entry void lhs(); 48 : : entry void step(); 49 : : entry void next(); 50 : : entry void evalLB( int nrestart ); 51 : : 52 : : // SDAG code follows. See http://charm.cs.illinois.edu/manuals/html/ 53 : : // charm++/manual.html, Sec. "Structured Control Flow: Structured Dagger". 54 : : 55 : : entry void wait4norm() { 56 : : when ownnorm_complete(), comnorm_complete() serial "normfinal" { 57 : : normfinal(); } } 58 : : 59 : : entry void wait4lhs() { 60 : : when ownlhs_complete(), comlhs_complete() serial "lhsmerge" { 61 : : lhsmerge(); } } 62 : : 63 : : entry void wait4rhs() { 64 : : when ownrhs_complete( tk::Fields& dif ), comrhs_complete() 65 : : serial "solve" { solve( dif ); } } 66 : : 67 : : entry void wait4out() { 68 : : when lhs_complete(), resize_complete() serial "out" { out(); } } 69 : : 70 : : entry void ownnorm_complete(); 71 : : entry void comnorm_complete(); 72 : : entry void ownlhs_complete(); 73 : : entry void comlhs_complete(); 74 : : entry void lhs_complete(); 75 : : entry void ownrhs_complete( tk::Fields& dif ); 76 : : entry void comrhs_complete(); 77 : : entry void resize_complete(); 78 : : } 79 : : 80 : : } // inciter:: 81 : : 82 : : }