Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/Inciter/chocg.ci 4 : : \copyright 2012-2015 J. Bakosi, 5 : : 2016-2018 Los Alamos National Security, LLC., 6 : : 2019-2021 Triad National Security, LLC., 7 : : 2022-2025 J. Bakosi 8 : : All rights reserved. See the LICENSE file for details. 9 : : \brief Charm++ module interface for ChoCG 10 : : */ 11 : : // ***************************************************************************** 12 : : 13 : : module chocg { 14 : : 15 : : extern module transporter; 16 : : extern module discretization; 17 : : extern module conjugategradients; 18 : : 19 : : include "UnsMesh.hpp"; 20 : : include "PUPUtil.hpp"; 21 : : 22 : : namespace inciter { 23 : : 24 : : array [1D] ChoCG { 25 : : entry ChoCG( const CProxy_Discretization& disc, 26 : : const tk::CProxy_ConjugateGradients& cgpre, 27 : : const tk::CProxy_ConjugateGradients& cgmom, 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( tk::real v ); 33 : : entry void start(); 34 : : entry void evalres( const std::vector< tk::real >& l2ref ); 35 : : entry [reductiontarget] void advance( tk::real newdt ); 36 : : entry [reductiontarget] void rhs(); 37 : : entry void comnorm( const std::unordered_map< int, 38 : : std::unordered_map< std::size_t, std::array< tk::real, 4 > > >& inbnd ); 39 : : entry void comvgrad( const std::unordered_map< std::size_t, 40 : : std::vector< tk::real > >& ingrad ); 41 : : entry void comflux( const std::unordered_map< std::size_t, 42 : : std::vector< tk::real > >& influx ); 43 : : entry void comsgrad( const std::unordered_map< std::size_t, 44 : : std::vector< tk::real > >& ingrad ); 45 : : entry void compgrad( const std::unordered_map< std::size_t, 46 : : std::vector< tk::real > >& ingrad ); 47 : 415 : entry void comrhs( const std::unordered_map< std::size_t, 48 : : std::vector< tk::real > >& inrhs ); 49 : 5428 : entry void comdiv( const std::unordered_map< std::size_t, 50 : : tk::real >& indiv ); 51 : : entry void pinit(); 52 [ + + ]: 3623 : entry void psolve(); 53 : : entry void psolved(); 54 : : entry void msolve(); 55 : : entry void msolved(); 56 : 383 : entry void feop(); 57 : : entry void step(); 58 : 5045 : entry void sgrad(); 59 : : entry void diag(); 60 : 5013 : entry void integrals(); 61 : : entry void evalLB( int nrestart ); 62 : 6830 : 63 : : entry void wait4int() { 64 : 4662 : when ownnorm_complete(), comnorm_complete() serial { merge(); } } 65 : : 66 : : entry void wait4div() { 67 : : when owndiv_complete(), comdiv_complete() serial { pinit(); } } 68 : : 69 : : entry void wait4vgrad() { 70 : : when ownvgrad_complete(), comvgrad_complete() serial { 71 : : if (Disc()->Initial()) flux(); else corr(); 72 : : } 73 : : } 74 : : 75 : : entry void wait4flux() { 76 : : when ownflux_complete(), comflux_complete() serial { div( m_flux ); } } 77 : : 78 : : entry void wait4sgrad() { 79 : : when ownsgrad_complete(), comsgrad_complete() serial { psolved(); } } 80 : : 81 : : entry void wait4pgrad() { 82 : : when ownpgrad_complete(), compgrad_complete() serial { finpgrad(); } } 83 : : 84 : : entry void wait4rhs() { 85 : : when ownrhs_complete(), comrhs_complete() serial { solve(); } } 86 : : 87 : : entry void wait4step() { 88 : : when feop_complete(), resize_complete() serial { out(); } } 89 : : 90 : : entry void ownnorm_complete(); 91 : : entry void comnorm_complete(); 92 : : entry void owndiv_complete(); 93 : : entry void comdiv_complete(); 94 : : entry void ownsgrad_complete(); 95 : : entry void comsgrad_complete(); 96 : : entry void ownpgrad_complete(); 97 : : entry void compgrad_complete(); 98 : : entry void ownvgrad_complete(); 99 : : entry void comvgrad_complete(); 100 : : entry void ownflux_complete(); 101 : : entry void comflux_complete(); 102 : : entry void ownrhs_complete(); 103 : : entry void comrhs_complete(); 104 : : entry void feop_complete(); 105 : : entry void resize_complete(); 106 : : } 107 : : 108 : : } // inciter:: 109 : : 110 : : }