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-2025 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 transferFL();
32 : entry void transferIC();
33 : entry void start();
34 : entry void evalres( const std::vector< tk::real >& l2ref );
35 : entry 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 comdiv( const std::unordered_map< std::size_t,
45 : tk::real >& indiv );
46 385 : entry void comrhs( const std::unordered_map< std::size_t,
47 : std::vector< tk::real > >& inrhs );
48 770 : entry void comgrad( const std::unordered_map< std::size_t,
49 : std::vector< tk::real > >& ingrad );
50 385 : entry void pinit();
51 : entry void psolve();
52 385 : entry void psolved();
53 : entry void solved();
54 385 : entry void feop();
55 : entry void step();
56 8600 : entry void sgrad();
57 : entry void diag();
58 8600 : entry void integrals();
59 : entry void evalLB( int nrestart );
60 4730 :
61 : entry void wait4int() {
62 : when ownnorm_complete(), comnorm_complete(), transfer_complete() serial
63 : { merge(); } }
64 :
65 : entry void wait4div() {
66 : when owndiv_complete(), comdiv_complete() serial { pinit(); } }
67 :
68 : entry void wait4vgrad() {
69 : when ownvgrad_complete(), comvgrad_complete() serial { flux(); } }
70 :
71 : entry void wait4flux() {
72 : when ownflux_complete(), comflux_complete() serial { div( m_flux ); } }
73 :
74 : entry void wait4sgrad() {
75 : when ownsgrad_complete(), comsgrad_complete() serial { psolved(); } }
76 :
77 : entry void wait4grad() {
78 : when owngrad_complete(), comgrad_complete() serial { rhs(); } }
79 :
80 : entry void wait4rhs() {
81 : when ownrhs_complete(), comrhs_complete() serial { solve(); } }
82 :
83 : entry void wait4step() {
84 : when feop_complete(), resize_complete() serial { out(); } }
85 :
86 : entry void ownnorm_complete();
87 : entry void comnorm_complete();
88 : entry void transfer_complete();
89 : entry void owndiv_complete();
90 : entry void comdiv_complete();
91 : entry void ownsgrad_complete();
92 : entry void comsgrad_complete();
93 : entry void ownvgrad_complete();
94 : entry void comvgrad_complete();
95 : entry void ownflux_complete();
96 : entry void comflux_complete();
97 : entry void owngrad_complete();
98 : entry void comgrad_complete();
99 : entry void ownrhs_complete();
100 : entry void comrhs_complete();
101 : entry void feop_complete();
102 : entry void resize_complete();
103 : }
104 :
105 : } // inciter::
106 :
107 : }
|