Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/LinearSolver/conjugategradients.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 distributed conjugate gradients
10 : : \details Charm++ module interface file for asynchronous distributed
11 : : conjugate gradients linear solver.
12 : : */
13 : : // *****************************************************************************
14 : :
15 : : module conjugategradients {
16 : :
17 : : include "CSR.hpp";
18 : :
19 : : namespace tk {
20 : :
21 : : array [1D] ConjugateGradients {
22 : : entry ConjugateGradients(
23 : : const CSR& A,
24 : : const std::vector< tk::real >& x,
25 : : const std::vector< tk::real >& b,
26 : : const std::vector< std::size_t >& gid,
27 : : const std::unordered_map< std::size_t, std::size_t >& lid,
28 : : const std::unordered_map< int,
29 : : std::unordered_set< std::size_t > >& nodecommmap );
30 : : entry ConjugateGradients(
31 : : std::tuple< tk::CSR,
32 : : std::vector< tk::real >,
33 : : std::vector< tk::real > >&& system,
34 : : const std::vector< std::size_t >& gid,
35 : : const std::unordered_map< std::size_t, std::size_t >& lid,
36 : : const std::unordered_map< int,
37 : : std::unordered_set< std::size_t > >& nodecommmap );
38 : : entry void init( const std::vector< tk::real >& x,
39 : : const std::vector< tk::real >& b,
40 : : const std::vector< tk::real >& neubc,
41 : : const std::unordered_map< std::size_t,
42 : : std::vector< std::pair< int, tk::real > > >& dirbc,
43 : : const std::string& pc,
44 : : CkCallback cb );
45 : : entry void setup( CkCallback cb );
46 : : entry void solve( std::size_t maxit,
47 : : tk::real tol,
48 : : int pe,
49 : : uint64_t verbose,
50 : : CkCallback c );
51 : : entry [reductiontarget] void normb( tk::real n );
52 : : entry [reductiontarget] void rho( tk::real r );
53 : : entry [reductiontarget] void pq( tk::real n );
54 : : entry [reductiontarget] void normres( tk::real r );
55 : : entry [reductiontarget] void rz( tk::real rz );
56 : 5024 : entry void comres( const std::vector< std::size_t >& gid,
57 : : const std::vector< std::vector< tk::real > >& rc );
58 : : entry void combc( const std::map< std::size_t,
59 : : std::vector< std::pair< int, tk::real > > >& dbc,
60 [ + - ]: 5018 : const std::vector< std::size_t >& gid,
61 : : const std::vector< std::vector< tk::real > >& qc );
62 : : entry void comq( const std::vector< std::size_t >& gid,
63 : : const std::vector< std::vector< tk::real > >& qc );
64 [ + - ]: 5018 : entry void comr( const std::vector< std::size_t >& gid,
65 : : const std::vector< std::vector< tk::real > >& rc );
66 : : entry void comd( const std::vector< std::size_t >& gid,
67 : : const std::vector< std::vector< tk::real > >& qc );
68 : 98282 : entry void comx( const std::vector< std::size_t >& gid,
69 : : const std::vector< std::vector< tk::real > >& xc );
70 : :
71 : : entry void wait4res() {
72 : 98282 : when ownres_complete(), comres_complete(), normb_complete(),
73 : : ownd_complete(), comd_complete() serial
74 : : { initres(); }
75 : : }
76 : :
77 : : entry void wait4bc() {
78 : : when ownbc_complete( CkCallback cb ), combc_complete() serial
79 : : { apply( cb ); }
80 : : }
81 : :
82 : : entry void wait4r() {
83 : : when ownr_complete( CkCallback cb ), comr_complete() serial
84 : : { r( cb ); }
85 : : }
86 : :
87 : : entry void wait4q() {
88 : : when ownq_complete(), comq_complete() serial
89 : : { q(); }
90 : : }
91 : :
92 : : entry void wait4x() {
93 : : when ownx_complete(), comx_complete(), normr_complete() serial
94 : : { x(); }
95 : : }
96 : :
97 : : entry void ownres_complete();
98 : : entry void comres_complete();
99 : : entry void normb_complete();
100 : : entry void ownbc_complete( CkCallback cb );
101 : : entry void combc_complete();
102 : : entry void ownd_complete();
103 : : entry void comd_complete();
104 : : entry void ownq_complete();
105 : : entry void comq_complete();
106 : : entry void ownr_complete( CkCallback cb );
107 : : entry void comr_complete();
108 : : entry void ownx_complete();
109 : : entry void comx_complete();
110 : : entry void normr_complete();
111 : : };
112 : :
113 : : } // tk::
114 : :
115 : : }
|