Flow123d  JS_before_hm-978-gf0793cd
output_msh.hh
Go to the documentation of this file.
1 /*!
2  *
3  * Copyright (C) 2015 Technical University of Liberec. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of the GNU General Public License version 3 as published by the
7  * Free Software Foundation. (http://www.gnu.org/licenses/gpl-3.0.en.html)
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12  *
13  *
14  * @file output_msh.h
15  * @brief Header: The functions for MSH (GMSH) outputs.
16  */
17 
18 #ifndef OUTPUT_MSH_HH_
19 #define OUTPUT_MSH_HH_
20 
21 #include <vector> // for vector
22 #include "output_time.hh" // for OutputTime::OutputDataPtr, OutputTime, Out...
23 namespace Input { namespace Type { class Record; } }
24 namespace flow { template <class T> class VectorId; }
25 
26 
27 /**
28  * \brief This class is used for output data to VTK file format
29  */
30 class OutputMSH : public OutputTime {
31 public:
33 
34  /**
35  * \brief The constructor of this class.
36  * We open the output file in first call of write_data
37  */
38  OutputMSH();
39 
40  /**
41  * \brief The destructor of this class
42  */
43  ~OutputMSH();
44 
45  /**
46  * \brief The definition of input record for gmsh file format
47  */
48  static const Input::Type::Record & get_input_type();
49 
50  /**
51  * \brief This method writes head of GMSH (.msh) file format
52  *
53  * \return This function returns 1
54  */
55  int write_head(void);
56 
57  /**
58  * \brief This method writes data to GMSH (.msh) file format for current time
59  *
60  * \return This function returns 1
61  */
62  int write_data(void);
63 
64  /**
65  * \brief This method should write tail of GMSH (.msh) file format
66  *
67  * It is stupid file format. It doesn't write anything special at the end of
68  * the file
69  *
70  * \return This function returns 1
71  */
72  int write_tail(void);
73 
74  /**
75  * Set shared pointers of output data caches.
76  */
77  void set_output_data_caches(std::shared_ptr<OutputMeshBase> mesh_ptr) override;
78 
79 private:
80 
81  /// Registrar of class to factory
82  static const int registrar;
83 
85 
86  /**
87  * EquationOutput force output of all output fields at the time zero.
88  * We keep this list to perform single elemnent/node output in order to have correct behavior in GMSH.
89  */
91 
92  /**
93  * \brief This function write header of GMSH (.msh) file format
94  */
95  void write_msh_header(void);
96 
97  /**
98  * \brief This function writes geometry (position of nodes) to GMSH (.msh) file
99  * format
100  */
101  void write_msh_geometry(void);
102 
103  /**
104  * \brief This function writes topology (connection of nodes) to the GMSH (.msh)
105  * file format
106  */
107  void write_msh_topology(void);
108 
109  /**
110  * \brief This function writes ascii data to GMSH (.msh) output file.
111  *
112  * \param[in] id_cache Data cache of node or element ids.
113  * \param[in] output_data The pointer at structure storing pointer at own data.
114  * \param[in] discont Flag determines continuous or discontinuous mesh.
115  */
116  void write_msh_ascii_data(std::shared_ptr<ElementDataCache<unsigned int>> id_cache, OutputDataPtr output_data, bool discont = false);
117 
118  /**
119  * \brief This function write all data on nodes to output file. This function
120  * is used for static and dynamic data
121  *
122  * \param[in] time The time from start
123  * \param[in] step The number of steps from start
124  */
125  void write_node_data(OutputDataPtr output_data);
126  /**
127  * \brief writes ElementNode data ascii GMSH (.msh) output file.
128  *
129  */
130  void write_corner_data(OutputDataPtr output_data);
131 
132 
133  /**
134  * \brief This function write all data on elements to output file. This
135  * function is used for static and dynamic data
136  *
137  * \param[in] time The time from start
138  * \param[in] step The number of steps from start
139  */
140  void write_elem_data(OutputDataPtr output_data);
141 
142  /**
143  * \brief This method add right suffix to .msh GMSH file
144  */
145  void fix_base_file_name(void);
146 
147  /// Vector gets ids of nodes.
148  std::shared_ptr<ElementDataCache<unsigned int>> node_ids_;
149  /// Vector gets ids of elements.
150  std::shared_ptr<ElementDataCache<unsigned int>> elem_ids_;
151  /// Vector gets ids of regions.
152  std::shared_ptr<ElementDataCache<unsigned int>> region_ids_;
153  /// Vector gets partitions of elements.
154  std::shared_ptr<ElementDataCache<int>> partitions_;
155 };
156 
157 #endif /* OUTPUT_MSH_HH_ */
std::vector< std::vector< OutputDataPtr > > dummy_data_list_
Definition: output_msh.hh:90
static const int registrar
Registrar of class to factory.
Definition: output_msh.hh:82
Abstract linear system class.
Definition: balance.hh:40
OutputTime FactoryBaseType
Definition: output_msh.hh:32
Small extension of Vector<T> container with support to Id numbers.
Definition: output_msh.hh:24
std::shared_ptr< ElementDataCacheBase > OutputDataPtr
Definition: output_time.hh:122
std::shared_ptr< ElementDataCache< unsigned int > > node_ids_
Vector gets ids of nodes.
Definition: output_msh.hh:148
std::shared_ptr< ElementDataCache< int > > partitions_
Vector gets partitions of elements.
Definition: output_msh.hh:154
bool header_written
Definition: output_msh.hh:84
The class for outputting data during time.
Definition: output_time.hh:50
Record type proxy class.
Definition: type_record.hh:182
std::shared_ptr< ElementDataCache< unsigned int > > elem_ids_
Vector gets ids of elements.
Definition: output_msh.hh:150
This class is used for output data to VTK file format.
Definition: output_msh.hh:30
std::shared_ptr< ElementDataCache< unsigned int > > region_ids_
Vector gets ids of regions.
Definition: output_msh.hh:152