IOSS  2.0
Iovs_DatabaseIO.h
Go to the documentation of this file.
1 /*
2  * Copyright(C) 1999-2017 National Technology & Engineering Solutions
3  * of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
4  * NTESS, the U.S. Government retains certain rights in this software.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are
8  * met:
9  *
10  * * Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  *
13  * * Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the following
15  * disclaimer in the documentation and/or other materials provided
16  * with the distribution.
17  *
18  * * Neither the name of NTESS nor the names of its
19  * contributors may be used to endorse or promote products derived
20  * from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  */
34 /*--------------------------------------------------------------------*/
35 /* Copyright 2000-2010 NTESS. */
36 /* Under the terms of Contract DE-AC04-94AL85000, there is a */
37 /* non-exclusive license for use of this work by or on behalf */
38 /* of the U.S. Government. Export of this program may require */
39 /* a license from the United States Government. */
40 /*--------------------------------------------------------------------*/
41 
42 // -*- Mode: c++ -*-
43 #ifndef SIERRA_Iovs_DatabaseIO_h
44 #define SIERRA_Iovs_DatabaseIO_h
45 
46 #include <Ioss_CodeTypes.h>
47 #include <Ioss_DBUsage.h>
48 #include <Ioss_DatabaseIO.h>
49 #include <Ioss_EntityType.h>
50 #include <Ioss_Field.h>
51 #include <Ioss_Map.h>
52 #include <Ioss_Utils.h>
53 
54 #include <algorithm>
55 #include <ctime>
56 #include <map>
57 #include <set>
58 #include <sstream>
59 #include <string>
60 #include <vector>
61 
63 
64 /** \brief A namespace for the visualization database format.
65  */
66 namespace Iovs {
67 
68  typedef std::set<std::pair<int64_t, int64_t>> EntityIdSet;
69 
71  {
72  public:
73  DatabaseIO(Ioss::Region *region, const std::string &filename, Ioss::DatabaseUsage db_usage,
74  MPI_Comm communicator, const Ioss::PropertyManager &props);
75  ~DatabaseIO() override;
76 
77  // Check capabilities of input/output database... Returns an
78  // unsigned int with the supported Ioss::EntityTypes or'ed
79  // together. If "return_value & Ioss::EntityType" is set, then the
80  // database supports that type (e.g. return_value & Ioss::FACESET)
81  unsigned entity_field_support() const override
82  {
84  }
85 
86  static int parseCatalystFile(const std::string &filepath, std::string &json_result);
87 
88  int int_byte_size_db() const override { return int_byte_size_api(); }
89 
90  private:
91  bool begin__(Ioss::State state) override;
92  bool end__(Ioss::State state) override;
93 
94  bool begin_state__(Ioss::Region *region, int state, double time) override;
95  bool end_state__(Ioss::Region *region, int state, double time) override;
96 
97  void read_meta_data__() override;
98 
99  // For the time being, treat vis as write only. Consider glue pipelines.
100  int64_t get_field_internal(const Ioss::Region *reg, const Ioss::Field &field, void *data,
101  size_t data_size) const override
102  {
103  return 0;
104  }
105  int64_t get_field_internal(const Ioss::NodeBlock *nb, const Ioss::Field &field, void *data,
106  size_t data_size) const override
107  {
108  return 0;
109  }
110  int64_t get_field_internal(const Ioss::EdgeBlock *nb, const Ioss::Field &field, void *data,
111  size_t data_size) const override
112  {
113  return 0;
114  }
115  int64_t get_field_internal(const Ioss::FaceBlock *nb, const Ioss::Field &field, void *data,
116  size_t data_size) const override
117  {
118  return 0;
119  }
120  int64_t get_field_internal(const Ioss::ElementBlock *eb, const Ioss::Field &field, void *data,
121  size_t data_size) const override
122  {
123  return 0;
124  }
125  int64_t get_field_internal(const Ioss::SideBlock *fb, const Ioss::Field &field, void *data,
126  size_t data_size) const override
127  {
128  return 0;
129  }
130  int64_t get_field_internal(const Ioss::NodeSet *ns, const Ioss::Field &field, void *data,
131  size_t data_size) const override
132  {
133  return 0;
134  }
135  int64_t get_field_internal(const Ioss::EdgeSet *ns, const Ioss::Field &field, void *data,
136  size_t data_size) const override
137  {
138  return 0;
139  }
140  int64_t get_field_internal(const Ioss::FaceSet *ns, const Ioss::Field &field, void *data,
141  size_t data_size) const override
142  {
143  return 0;
144  }
145  int64_t get_field_internal(const Ioss::ElementSet *ns, const Ioss::Field &field, void *data,
146  size_t data_size) const override
147  {
148  return 0;
149  }
150  int64_t get_field_internal(const Ioss::SideSet *fs, const Ioss::Field &field, void *data,
151  size_t data_size) const override
152  {
153  return 0;
154  }
155  int64_t get_field_internal(const Ioss::CommSet *cs, const Ioss::Field &field, void *data,
156  size_t data_size) const override
157  {
158  return 0;
159  }
160 
161  int64_t get_field_internal(const Ioss::StructuredBlock *sb, const Ioss::Field &field,
162  void *data, size_t data_size) const override
163  {
164  return 0;
165  }
166 
167  int64_t put_field_internal(const Ioss::Region *reg, const Ioss::Field &field, void *data,
168  size_t data_size) const override;
169 
170  int64_t put_field_internal(const Ioss::NodeBlock *nb, const Ioss::Field &field, void *data,
171  size_t data_size) const override;
172  int64_t put_field_internal(const Ioss::EdgeBlock *nb, const Ioss::Field &field, void *data,
173  size_t data_size) const override
174  {
175  return 0;
176  }
177  int64_t put_field_internal(const Ioss::FaceBlock *nb, const Ioss::Field &field, void *data,
178  size_t data_size) const override
179  {
180  return 0;
181  }
182  int64_t put_field_internal(const Ioss::ElementBlock *eb, const Ioss::Field &field, void *data,
183  size_t data_size) const override;
184  int64_t put_field_internal(const Ioss::SideBlock *eb, const Ioss::Field &field, void *data,
185  size_t data_size) const override;
186 
187  int64_t put_field_internal(const Ioss::NodeSet *ns, const Ioss::Field &field, void *data,
188  size_t data_size) const override;
189  int64_t put_field_internal(const Ioss::EdgeSet *ns, const Ioss::Field &field, void *data,
190  size_t data_size) const override
191  {
192  return 0;
193  }
194  int64_t put_field_internal(const Ioss::FaceSet *ns, const Ioss::Field &field, void *data,
195  size_t data_size) const override
196  {
197  return 0;
198  }
199  int64_t put_field_internal(const Ioss::ElementSet *ns, const Ioss::Field &field, void *data,
200  size_t data_size) const override
201  {
202  return 0;
203  }
204  int64_t put_field_internal(const Ioss::SideSet *fs, const Ioss::Field &field, void *data,
205  size_t data_size) const override;
206  int64_t put_field_internal(const Ioss::CommSet *cs, const Ioss::Field &field, void *data,
207  size_t data_size) const override
208  {
209  return 0;
210  }
211  int64_t put_field_internal(const Ioss::StructuredBlock *sb, const Ioss::Field &field,
212  void *data, size_t data_size) const override
213  {
214  return 0;
215  }
216 
217  void write_meta_data();
218 
220  load_plugin_library(const std::string &plugin_name, const std::string &plugin_library_name);
221 
222  static std::string create_output_file_path(const std::string & input_deck_name,
224  // static bool plugin_library_exists(const std::string &plugin_name);
225 
226  int64_t handle_node_ids(void *ids, int64_t num_to_get);
227  int64_t handle_element_ids(const Ioss::ElementBlock *eb, void *ids, size_t num_to_get);
228 
229  const Ioss::Map &get_node_map() const;
230  const Ioss::Map &get_element_map() const;
231 
232  DatabaseIO(); // Do not implement
233  DatabaseIO(const DatabaseIO &); // Do not implement
234  DatabaseIO &operator=(const DatabaseIO &); // Do not implement
235 
236  bool isInput;
237  bool singleProcOnly; // True if history or heartbeat which is only written from proc 0...
238  bool doLogging; // True if logging field input/output
239 
240  std::string databaseTitle;
241  static std::string paraview_script_filename;
243  std::string paraview_json_parse;
253  static int useCount;
254  static int uniqueID;
255 
258 
259  // Handle to the ParaView Catalyst dynamic library
260  // that is loaded via Ioss user plugin at runtime.
264  mutable EntityIdSet ids_;
265  };
266 } // namespace Iovs
267 
268 #endif
std::set< std::pair< int64_t, int64_t > > EntityIdSet
Definition: Iovs_DatabaseIO.h:68
int64_t get_field_internal(const Ioss::NodeBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:105
Definition: ParaViewCatalystIossAdapter.h:45
int64_t get_field_internal(const Ioss::NodeSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:130
int64_t get_field_internal(const Ioss::EdgeBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:110
unsigned entity_field_support() const override
Definition: Iovs_DatabaseIO.h:81
std::string sierra_input_deck_name
Definition: Iovs_DatabaseIO.h:244
Definition: Ioss_EntityType.h:48
static int uniqueID
Definition: Iovs_DatabaseIO.h:254
int64_t get_field_internal(const Ioss::ElementBlock *eb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:120
bool singleProcOnly
Definition: Iovs_DatabaseIO.h:237
int64_t put_field_internal(const Ioss::FaceSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:194
bool globalNodeAndElementIDsCreated
Definition: Iovs_DatabaseIO.h:262
An input or output Database.
Definition: Ioss_DatabaseIO.h:80
int debugLevel
Definition: Iovs_DatabaseIO.h:248
static std::string create_output_file_path(const std::string &input_deck_name, const Ioss::PropertyManager &properties)
Definition: Iovs_DatabaseIO.C:231
A collection of nodes.
Definition: Ioss_NodeSet.h:53
A collection of element faces with the same topology.
Definition: Ioss_FaceBlock.h:53
int nodeBlockCount
Definition: Iovs_DatabaseIO.h:256
A collection of element faces.
Definition: Ioss_FaceSet.h:54
Definition: Ioss_EntityType.h:43
int64_t get_field_internal(const Ioss::StructuredBlock *sb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:161
static int parseCatalystFile(const std::string &filepath, std::string &json_result)
Definition: Iovs_DatabaseIO.C:409
A collection of element edges.
Definition: Ioss_EdgeSet.h:54
Definition: Iovs_DatabaseIO.h:70
static int useCount
Definition: Iovs_DatabaseIO.h:253
static ParaViewCatalystIossAdapterBase * load_plugin_library(const std::string &plugin_name, const std::string &plugin_library_name)
Definition: Iovs_DatabaseIO.C:245
ParaViewCatalystIossAdapterBase * pvcsa
Definition: Iovs_DatabaseIO.h:261
A collection of element sides having the same topology.
Definition: Ioss_SideBlock.h:61
std::string catalyst_block_file_name
Definition: Iovs_DatabaseIO.h:242
void write_meta_data()
Definition: Iovs_DatabaseIO.C:738
void create_global_node_and_element_ids() const
Definition: Iovs_DatabaseIO.C:425
int64_t put_field_internal(const Ioss::FaceBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:177
bool doLogging
Definition: Iovs_DatabaseIO.h:238
int enableLogging
Definition: Iovs_DatabaseIO.h:247
State
Access states for a database.
Definition: Ioss_State.h:42
int64_t put_field_internal(const Ioss::EdgeSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:189
std::string catalyst_output_directory
Definition: Iovs_DatabaseIO.h:245
EntityIdSet ids_
Definition: Iovs_DatabaseIO.h:264
Definition: Ioss_EntityType.h:51
A collection of elements having the same topology.
Definition: Ioss_ElementBlock.h:48
static std::string paraview_script_filename
Definition: Iovs_DatabaseIO.h:241
int createSideSets
Definition: Iovs_DatabaseIO.h:251
A structured zone – i,j,k.
Definition: Ioss_StructuredBlock.h:98
int int_byte_size_api() const
Returns 4 or 8.
Definition: Ioss_DatabaseIO.C:221
Ioss::PropertyManager properties
Definition: Ioss_DatabaseIO.h:513
A collection of elements.
Definition: Ioss_ElementSet.h:54
int64_t put_field_internal(const Ioss::Region *reg, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.C:451
DatabaseUsage
Specifies how an Ioss::DatabaseIO object will be used.
Definition: Ioss_DBUsage.h:40
int underscoreVectors
Definition: Iovs_DatabaseIO.h:249
int64_t put_field_internal(const Ioss::EdgeBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:172
const Ioss::Map & get_element_map() const
Definition: Iovs_DatabaseIO.C:957
A collection of all nodes in the region.
Definition: Ioss_NodeBlock.h:53
~DatabaseIO() override
Definition: Iovs_DatabaseIO.C:208
bool isInput
Definition: Iovs_DatabaseIO.h:236
int applyDisplacements
Definition: Iovs_DatabaseIO.h:250
A namespace for the visualization database format.
Definition: Iovs_DatabaseIO.C:101
Definition: Ioss_EntityType.h:40
Definition: Ioss_Map.h:52
Definition: Ioss_CommSet.h:51
int64_t get_field_internal(const Ioss::FaceBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:115
std::string paraview_json_parse
Definition: Iovs_DatabaseIO.h:243
int64_t handle_element_ids(const Ioss::ElementBlock *eb, void *ids, size_t num_to_get)
Definition: Iovs_DatabaseIO.C:929
int64_t get_field_internal(const Ioss::CommSet *cs, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:155
int64_t get_field_internal(const Ioss::EdgeSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:135
int64_t put_field_internal(const Ioss::StructuredBlock *sb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:211
std::string paraview_script_extra_filename
Definition: Iovs_DatabaseIO.h:246
int64_t put_field_internal(const Ioss::ElementSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:199
A grouping entity that contains other grouping entities.
Definition: Ioss_Region.h:98
A collection of element sides.
Definition: Ioss_SideSet.h:59
int64_t get_field_internal(const Ioss::ElementSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:145
int64_t get_field_internal(const Ioss::SideBlock *fb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:125
Holds metadata for bulk data associated with a GroupingEntity.
Definition: Ioss_Field.h:47
int elementBlockCount
Definition: Iovs_DatabaseIO.h:257
int64_t put_field_internal(const Ioss::CommSet *cs, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:206
int MPI_Comm
Definition: Ioss_CodeTypes.h:79
bool end_state__(Ioss::Region *region, int state, double time) override
Definition: Iovs_DatabaseIO.C:375
const Ioss::Map & get_node_map() const
Definition: Iovs_DatabaseIO.C:938
Definition: Ioss_EntityType.h:44
int64_t get_field_internal(const Ioss::FaceSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:140
int64_t get_field_internal(const Ioss::Region *reg, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:100
A collection of Ioss::Property objects.
Definition: Ioss_PropertyManager.h:49
DatabaseIO & operator=(const DatabaseIO &)
int int_byte_size_db() const override
Definition: Iovs_DatabaseIO.h:88
int64_t get_field_internal(const Ioss::SideSet *fs, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:150
bool end__(Ioss::State state) override
Definition: Iovs_DatabaseIO.C:336
std::vector< char > data
Definition: Ioss_Utils.C:78
A collection of element edges with the same topology.
Definition: Ioss_EdgeBlock.h:53
bool begin__(Ioss::State state) override
Definition: Iovs_DatabaseIO.C:294
std::string databaseTitle
Definition: Iovs_DatabaseIO.h:240
int createNodeSets
Definition: Iovs_DatabaseIO.h:252
void read_meta_data__() override
Definition: Iovs_DatabaseIO.C:407
bool begin_state__(Ioss::Region *region, int state, double time) override
Definition: Iovs_DatabaseIO.C:360
int64_t handle_node_ids(void *ids, int64_t num_to_get)
Definition: Iovs_DatabaseIO.C:794