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-2024 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 void comnorm( const std::unordered_map< int, 37 : : std::unordered_map< std::size_t, std::array< tk::real, 4 > > >& inbnd ); 38 : : entry void comvgrad( const std::unordered_map< std::size_t, 39 : : std::vector< tk::real > >& ingrad ); 40 : : entry void comflux( const std::unordered_map< std::size_t, 41 : : std::vector< tk::real > >& influx ); 42 : : entry void comsgrad( const std::unordered_map< std::size_t, 43 : : std::vector< tk::real > >& ingrad ); 44 : : entry void compgrad( const std::unordered_map< std::size_t, 45 : : std::vector< tk::real > >& ingrad ); 46 : : entry void comrhs( const std::unordered_map< std::size_t, 47 : : std::vector< tk::real > >& inrhs ); 48 : : entry void comdiv( const std::unordered_map< std::size_t, 49 : : tk::real >& indiv ); 50 : : entry void comaec( const std::unordered_map< std::size_t, 51 : : std::vector< tk::real > >& inaec ); 52 : 365 : entry void comalw( const std::unordered_map< std::size_t, 53 : : std::vector< tk::real > >& inalw ); 54 : 4328 : entry void comlim( const std::unordered_map< std::size_t, 55 : : std::vector< tk::real > >& inlim ); 56 : : entry void pinit(); 57 [ + + ]: 3413 : entry void psolve(); 58 : : entry void psolved(); 59 : : entry void msolve(); 60 : : entry void msolved(); 61 : 333 : entry void feop(); 62 : : entry void step(); 63 : 3995 : entry void sgrad(); 64 : : entry void diag(); 65 : 3963 : entry void integrals(); 66 : : entry void evalLB( int nrestart ); 67 : 3750 : 68 : : entry void wait4int() { 69 : 2920 : when ownnorm_complete(), comnorm_complete() serial { merge(); } } 70 : : 71 : 2920 : entry void wait4div() { 72 : : when owndiv_complete(), comdiv_complete() serial { pinit(); } } 73 : 2920 : 74 : : entry void wait4vgrad() { 75 : 3662 : when ownvgrad_complete(), comvgrad_complete() serial { 76 : : if (Disc()->Initial()) flux(); else corr(); 77 : : } 78 : : } 79 : : 80 : : entry void wait4flux() { 81 : : when ownflux_complete(), comflux_complete() serial { div( m_flux ); } } 82 : : 83 : : entry void wait4sgrad() { 84 : : when ownsgrad_complete(), comsgrad_complete() serial { psolved(); } } 85 : : 86 : : entry void wait4pgrad() { 87 : : when ownpgrad_complete(), compgrad_complete() serial { finpgrad(); } } 88 : : 89 : : entry void wait4rhs() { 90 : : when ownrhs_complete(), comrhs_complete() serial { fct(); } } 91 : : 92 : : entry void wait4aec() { 93 : : when ownaec_complete(), comaec_complete() serial { alw(); } } 94 : : 95 : : entry void wait4alw() { 96 : : when ownalw_complete(), comalw_complete() serial { lim(); } } 97 : : 98 : : entry void wait4sol() { 99 : : when ownlim_complete(), comlim_complete() serial { solve(); } } 100 : : 101 : : entry void wait4step() { 102 : : when feop_complete(), resize_complete() serial { out(); } } 103 : : 104 : : entry void ownnorm_complete(); 105 : : entry void comnorm_complete(); 106 : : entry void owndiv_complete(); 107 : : entry void comdiv_complete(); 108 : : entry void ownsgrad_complete(); 109 : : entry void comsgrad_complete(); 110 : : entry void ownpgrad_complete(); 111 : : entry void compgrad_complete(); 112 : : entry void ownvgrad_complete(); 113 : : entry void comvgrad_complete(); 114 : : entry void ownflux_complete(); 115 : : entry void comflux_complete(); 116 : : entry void ownrhs_complete(); 117 : : entry void comrhs_complete(); 118 : : entry void ownaec_complete(); 119 : : entry void comaec_complete(); 120 : : entry void ownalw_complete(); 121 : : entry void comalw_complete(); 122 : : entry void ownlim_complete(); 123 : : entry void comlim_complete(); 124 : : entry void feop_complete(); 125 : : entry void resize_complete(); 126 : : } 127 : : 128 : : } // inciter:: 129 : : 130 : : }