Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/Inciter/distfct.ci 4 : : \copyright 2012-2015 J. Bakosi, 5 : : 2016-2018 Los Alamos National Security, LLC., 6 : : 2019-2021 Triad National Security, LLC. 7 : : All rights reserved. See the LICENSE file for details. 8 : : \brief Charm++ module interface for distributed flux-corrected transport 9 : : \details Charm++ module interface file for asynchronous distributed 10 : : flux-corrected transport (FCT). 11 : : \see DistFCT.[Ch] and FluxCorrector.[Ch] for more info. 12 : : */ 13 : : // ***************************************************************************** 14 : : 15 : : module distfct { 16 : : 17 : : include "unordered_map"; 18 : : include "CommMap.hpp"; 19 : : 20 : : namespace inciter { 21 : : 22 : : array [1D] DistFCT { 23 : : entry DistFCT( 24 : : int nchare, 25 : : std::size_t nu, 26 : 18283 : std::size_t np, 27 : : const tk::NodeCommMap& nodeCommMap, 28 : 18283 : const std::unordered_map< std::size_t, std::size_t >& bid, 29 : : const std::unordered_map< std::size_t, std::size_t >& lid, 30 : : const std::vector< std::size_t >& inpoel ); 31 : : entry void comaec( const std::vector< std::size_t >& gid, 32 : : const std::vector< std::vector< tk::real > >& P ); 33 : : entry void comalw( const std::vector< std::size_t >& gid, 34 : : const std::vector< std::vector< tk::real > >& Q ); 35 : : entry void comlim( const std::vector< std::size_t >& gid, 36 : : const std::vector< std::vector< tk::real > >& U ); 37 : : 38 : : // SDAG code follows. See http://charm.cs.illinois.edu/manuals/html/ 39 : : // charm++/manual.html, Sec. "Structured Control Flow: Structured Dagger". 40 : : 41 : : entry void wait4fct() { 42 : : when ownaec_complete( 43 : : const std::unordered_map< std::size_t, 44 : : std::vector< std::pair< bool, tk::real > > >& bcdir ), 45 : : comaec_complete(), 46 : : ownalw_complete(), 47 : : comalw_complete() serial "fct" { lim( bcdir ); } }; 48 : : 49 : : entry void wait4app() { 50 : : when ownlim_complete(), comlim_complete() serial "app" { apply(); } }; 51 : : 52 : : entry void ownaec_complete( 53 : : const std::unordered_map< std::size_t, 54 : : std::vector< std::pair< bool, tk::real > > >& bcdir ); 55 : : entry void ownalw_complete(); 56 : : entry void ownlim_complete(); 57 : : entry void comaec_complete(); 58 : : entry void comalw_complete(); 59 : : entry void comlim_complete(); 60 : : }; 61 : : 62 : : } // inciter:: 63 : : 64 : : }