Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/IO/MeshWriter.hpp
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++ group for outputing mesh data to file
10 : : \details Charm++ group declaration used to output data associated to
11 : : unstructured meshes to file(s). Charm++ chares (work units) send mesh and
12 : : field data associated to mesh entities to the MeshWriter class defined here
13 : : to write the data to file(s).
14 : : */
15 : : // *****************************************************************************
16 : : #ifndef MeshWriter_h
17 : : #define MeshWriter_h
18 : :
19 : : #include <vector>
20 : : #include <string>
21 : : #include <tuple>
22 : : #include <map>
23 : :
24 : : #include "Types.hpp"
25 : : #include "Centering.hpp"
26 : : #include "UnsMesh.hpp"
27 : :
28 : : #include "NoWarning/meshwriter.decl.h"
29 : :
30 : : namespace tk {
31 : :
32 : : //! Charm++ group used to output particle data to file in parallel
33 : : class MeshWriter : public CBase_MeshWriter {
34 : :
35 : : public:
36 : :
37 : : #if defined(__clang__)
38 : : #pragma clang diagnostic push
39 : : #pragma clang diagnostic ignored "-Wundefined-func-template"
40 : : #endif
41 : :
42 : : //! Constructor: set some defaults that stay constant at all times
43 : : //! \param[in] benchmark True of benchmark mode. No field output happens in
44 : : //! benchmark mode. This (and associated if tests) are here so client code
45 : : //! does not have to deal with this.
46 : : //! \param[in] nmesh Total number of meshes
47 : 739 : MeshWriter( bool benchmark, std::size_t nmesh ) :
48 : 739 : m_benchmark( benchmark ),
49 : 739 : m_nchare( 0 ),
50 : 739 : m_nmesh( nmesh ) {}
51 : :
52 : : //! Migrate constructor
53 : : // cppcheck-suppress uninitMemberVar
54 : 25 : explicit MeshWriter( CkMigrateMessage* m ) : CBase_MeshWriter( m ) {}
55 : :
56 : : #if defined(__clang__)
57 : : #pragma clang diagnostic pop
58 : : #endif
59 : :
60 : : //! Set the total number of chares
61 : : //! \param[in] n Total number of chares across the whole problem
62 : 739 : void nchare( int n ) { m_nchare = n; }
63 : :
64 : : //! Output unstructured mesh into file
65 : : void write( std::size_t meshid,
66 : : bool meshoutput,
67 : : bool fieldoutput,
68 : : uint64_t itr,
69 : : uint64_t itf,
70 : : tk::real time,
71 : : int chareid,
72 : : const std::string& basefilename,
73 : : const std::vector< std::size_t >& inpoel,
74 : : const UnsMesh::Coords& coord,
75 : : const std::map< int, std::vector< std::size_t > >& bface,
76 : : const std::map< int, std::vector< std::size_t > >& bnode,
77 : : const std::vector< std::size_t >& triinpoel,
78 : : const std::vector< std::string >& elemfieldnames,
79 : : const std::vector< std::string >& nodefieldnames,
80 : : const std::vector< std::string >& elemsurfnames,
81 : : const std::vector< std::string >& nodesurfnames,
82 : : const std::vector< std::vector< tk::real > >& elemfields,
83 : : const std::vector< std::vector< tk::real > >& nodefields,
84 : : const std::vector< std::vector< tk::real > >& elemsurfs,
85 : : const std::vector< std::vector< tk::real > >& nodesurfs,
86 : : const std::set< int >& outsets,
87 : : CkCallback c );
88 : :
89 : : /** @name Charm++ pack/unpack serializer member functions */
90 : : ///@{
91 : : //! \brief Pack/Unpack serialize member function
92 : : //! \param[in,out] p Charm++'s PUP::er serializer object reference
93 : : //! \note This is a Charm++ group, pup() is thus only for
94 : : //! checkpoint/restart.
95 : 357 : void pup( PUP::er &p ) override {
96 : 357 : p | m_benchmark;
97 : 357 : p | m_nchare;
98 : 357 : p | m_nmesh;
99 : 357 : }
100 : : //! \brief Pack/Unpack serialize operator|
101 : : //! \param[in,out] p Charm++'s PUP::er serializer object reference
102 : : //! \param[in,out] m MeshWriter object reference
103 : : friend void operator|( PUP::er& p, MeshWriter& m ) { m.pup(p); }
104 : : //@}
105 : :
106 : : private:
107 : : //! True if benchmark mode
108 : : bool m_benchmark;
109 : : //! Total number chares across the whole problem
110 : : int m_nchare;
111 : : //! Total number of meshes
112 : : std::size_t m_nmesh;
113 : :
114 : : //! Compute filename
115 : : std::string filename( const std::string& basefilename,
116 : : std::size_t meshid,
117 : : uint64_t itr,
118 : : int chareid,
119 : : int surfid = 0 ) const;
120 : : };
121 : :
122 : : } // tk::
123 : :
124 : : #endif // MeshWriter_h
|