Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/Inciter/lohcg.ci 4 : : \copyright 2012-2015 J. Bakosi, 5 : : 2016-2018 Los Alamos National Security, LLC., 6 : : 2019-2021 Triad National Security, LLC., 7 : : 2022-2024 J. Bakosi 8 : : All rights reserved. See the LICENSE file for details. 9 : : \brief Charm++ module interface for LohCG 10 : : */ 11 : : // ***************************************************************************** 12 : : 13 : : module lohcg { 14 : : 15 : : extern module transporter; 16 : : extern module discretization; 17 : : 18 : : include "UnsMesh.hpp"; 19 : : include "PUPUtil.hpp"; 20 : : 21 : : namespace inciter { 22 : : 23 : : array [1D] LohCG { 24 : : entry LohCG( const CProxy_Discretization& disc, 25 : : const tk::CProxy_ConjugateGradients& cgpre, 26 : : const std::map< int, std::vector< std::size_t > >& bface, 27 : : const std::map< int, std::vector< std::size_t > >& bnode, 28 : : const std::vector< std::size_t >& triinpoel ); 29 : : initnode void registerReducers(); 30 : : entry void setup( tk::real v ); 31 : : entry void start(); 32 : : entry void evalres( const std::vector< tk::real >& l2ref ); 33 : : entry [reductiontarget] void advance( tk::real newdt ); 34 : : entry void comnorm( const std::unordered_map< int, 35 : : std::unordered_map< std::size_t, std::array< tk::real, 4 > > >& inbnd ); 36 : : entry void comvgrad( const std::unordered_map< std::size_t, 37 : : std::vector< tk::real > >& ingrad ); 38 : : entry void comflux( const std::unordered_map< std::size_t, 39 : : std::vector< tk::real > >& influx ); 40 : : entry void comsgrad( const std::unordered_map< std::size_t, 41 : : std::vector< tk::real > >& ingrad ); 42 : 336 : entry void comdiv( const std::unordered_map< std::size_t, 43 : : tk::real >& indiv ); 44 : 672 : entry void comrhs( const std::unordered_map< std::size_t, 45 : : std::vector< tk::real > >& inrhs ); 46 : 336 : entry void comgrad( const std::unordered_map< std::size_t, 47 : : std::vector< tk::real > >& ingrad ); 48 : 336 : entry void pinit(); 49 : : entry void psolve(); 50 : 336 : entry void psolved(); 51 : : entry void feop(); 52 : 5100 : entry void step(); 53 : : entry void sgrad(); 54 : 5100 : entry void diag(); 55 : : entry void integrals(); 56 : 3750 : entry void evalLB( int nrestart ); 57 : : 58 : : entry void wait4int() { 59 : : when ownnorm_complete(), comnorm_complete() serial { merge(); } } 60 : : 61 : : entry void wait4div() { 62 : : when owndiv_complete(), comdiv_complete() serial { pinit(); } } 63 : : 64 : : entry void wait4vgrad() { 65 : : when ownvgrad_complete(), comvgrad_complete() serial { flux(); } } 66 : : 67 : : entry void wait4flux() { 68 : : when ownflux_complete(), comflux_complete() serial { div( m_flux ); } } 69 : : 70 : : entry void wait4sgrad() { 71 : : when ownsgrad_complete(), comsgrad_complete() serial { psolved(); } } 72 : : 73 : : entry void wait4grad() { 74 : : when owngrad_complete(), comgrad_complete() serial { rhs(); } } 75 : : 76 : : entry void wait4rhs() { 77 : : when ownrhs_complete(), comrhs_complete() serial { solve(); } } 78 : : 79 : : entry void wait4step() { 80 : : when feop_complete(), resize_complete() serial { out(); } } 81 : : 82 : : entry void ownnorm_complete(); 83 : : entry void comnorm_complete(); 84 : : entry void owndiv_complete(); 85 : : entry void comdiv_complete(); 86 : : entry void ownsgrad_complete(); 87 : : entry void comsgrad_complete(); 88 : : entry void ownvgrad_complete(); 89 : : entry void comvgrad_complete(); 90 : : entry void ownflux_complete(); 91 : : entry void comflux_complete(); 92 : : entry void owngrad_complete(); 93 : : entry void comgrad_complete(); 94 : : entry void ownrhs_complete(); 95 : : entry void comrhs_complete(); 96 : : entry void feop_complete(); 97 : : entry void resize_complete(); 98 : : } 99 : : 100 : : } // inciter:: 101 : : 102 : : }