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 : : All rights reserved. See the LICENSE file for details. 8 : : \brief Charm++ group for outputing mesh data to file 9 : : \details Charm++ group declaration used to output data associated to 10 : : unstructured meshes to file(s). Charm++ chares (work units) send mesh and 11 : : field data associated to mesh entities to the MeshWriter class defined here 12 : : to write the data to file(s). 13 : : */ 14 : : // ***************************************************************************** 15 : : #ifndef MeshWriter_h 16 : : #define MeshWriter_h 17 : : 18 : : #include <vector> 19 : : #include <string> 20 : : #include <tuple> 21 : : #include <map> 22 : : 23 : : #include "Types.hpp" 24 : : #include "Options/FieldFile.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 : : //! Constructor: set some defaults that stay constant at all times 37 : : MeshWriter( ctr::FieldFileType filetype, 38 : : Centering bnd_centering, 39 : : bool benchmark, 40 : : std::size_t nmesh ); 41 : : 42 : : #if defined(__clang__) 43 : : #pragma clang diagnostic push 44 : : #pragma clang diagnostic ignored "-Wundefined-func-template" 45 : : #endif 46 : : //! Migrate constructor 47 : 0 : explicit MeshWriter( CkMigrateMessage* m ) : CBase_MeshWriter( m ) {} 48 : : #if defined(__clang__) 49 : : #pragma clang diagnostic pop 50 : : #endif 51 : : 52 : : //! Set the total number of chares 53 : : void nchare( int n ); 54 : : 55 : : //! Output unstructured mesh into file 56 : : void write( std::size_t meshid, 57 : : bool meshoutput, 58 : : bool fieldoutput, 59 : : uint64_t itr, 60 : : uint64_t itf, 61 : : tk::real time, 62 : : int chareid, 63 : : const std::string& basefilename, 64 : : const std::vector< std::size_t >& inpoel, 65 : : const UnsMesh::Coords& coord, 66 : : const std::map< int, std::vector< std::size_t > >& bface, 67 : : const std::map< int, std::vector< std::size_t > >& bnode, 68 : : const std::vector< std::size_t >& triinpoel, 69 : : const std::vector< std::string >& elemfieldnames, 70 : : const std::vector< std::string >& nodefieldnames, 71 : : const std::vector< std::string >& nodesurfnames, 72 : : const std::vector< std::vector< tk::real > >& elemfields, 73 : : const std::vector< std::vector< tk::real > >& nodefields, 74 : : const std::vector< std::vector< tk::real > >& nodesurfs, 75 : : const std::set< int >& outsets, 76 : : CkCallback c ); 77 : : 78 : : /** @name Charm++ pack/unpack serializer member functions */ 79 : : ///@{ 80 : : //! \brief Pack/Unpack serialize member function 81 : : //! \param[in,out] p Charm++'s PUP::er serializer object reference 82 : : //! \note This is a Charm++ group, pup() is thus only for 83 : : //! checkpoint/restart. 84 : 0 : void pup( PUP::er &p ) override { 85 : : p | m_filetype; 86 : 0 : p | m_bndCentering; 87 : 0 : p | m_benchmark; 88 : 0 : p | m_nchare; 89 : 0 : p | m_nmesh; 90 : 0 : } 91 : : //! \brief Pack/Unpack serialize operator| 92 : : //! \param[in,out] p Charm++'s PUP::er serializer object reference 93 : : //! \param[in,out] m MeshWriter object reference 94 : : friend void operator|( PUP::er& p, MeshWriter& m ) { m.pup(p); } 95 : : //@} 96 : : 97 : : private: 98 : : //! Output file format type 99 : : ctr::FieldFileType m_filetype; 100 : : //! Centering to identify what boundary data to write. 101 : : Centering m_bndCentering; 102 : : //! True if benchmark mode 103 : : bool m_benchmark; 104 : : //! Total number chares across the whole problem 105 : : int m_nchare; 106 : : //! Total number of meshes 107 : : std::size_t m_nmesh; 108 : : 109 : : //! Compute filename 110 : : std::string filename( const std::string& basefilename, 111 : : std::size_t meshid, 112 : : uint64_t itr, 113 : : int chareid, 114 : : int surfid = 0 ) const; 115 : : }; 116 : : 117 : : } // tk:: 118 : : 119 : : #endif // MeshWriter_h