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 IOSS_Iovs_DatabaseIO_h
44 #define IOSS_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 
62 class ParaViewCatalystIossAdapterBase;
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  const std::string get_format() const override {return "Embedded Visualization";}
78 
79  // Check capabilities of input/output database... Returns an
80  // unsigned int with the supported Ioss::EntityTypes or'ed
81  // together. If "return_value & Ioss::EntityType" is set, then the
82  // database supports that type (e.g. return_value & Ioss::FACESET)
83  unsigned entity_field_support() const override
84  {
86  }
87 
88  static int parseCatalystFile(const std::string &filepath, std::string &json_result);
89 
90  int int_byte_size_db() const override { return int_byte_size_api(); }
91 
92  private:
93  bool begin__(Ioss::State state) override;
94  bool end__(Ioss::State state) override;
95 
96  bool begin_state__(int state, double time) override;
97  bool end_state__(int state, double time) override;
98 
99  void read_meta_data__() override;
100 
101  // For the time being, treat vis as write only. Consider glue pipelines.
102  int64_t get_field_internal(const Ioss::Region * /*reg*/, const Ioss::Field & /*field*/,
103  void * /*data*/, size_t /* data_size */) const override
104  {
105  return 0;
106  }
107  int64_t get_field_internal(const Ioss::NodeBlock * /*nb*/, const Ioss::Field & /*field*/,
108  void * /*data*/, size_t /* data_size */) const override
109  {
110  return 0;
111  }
112  int64_t get_field_internal(const Ioss::EdgeBlock * /*nb*/, const Ioss::Field & /*field*/,
113  void * /*data*/, size_t /* data_size */) const override
114  {
115  return 0;
116  }
117  int64_t get_field_internal(const Ioss::FaceBlock * /*nb*/, const Ioss::Field & /*field*/,
118  void * /*data*/, size_t /* data_size */) const override
119  {
120  return 0;
121  }
122  int64_t get_field_internal(const Ioss::ElementBlock * /*eb*/, const Ioss::Field & /*field*/,
123  void * /*data*/, size_t /* data_size */) const override
124  {
125  return 0;
126  }
127  int64_t get_field_internal(const Ioss::SideBlock * /*fb*/, const Ioss::Field & /*field*/,
128  void * /*data*/, size_t /* data_size */) const override
129  {
130  return 0;
131  }
132  int64_t get_field_internal(const Ioss::NodeSet * /*ns*/, const Ioss::Field & /*field*/,
133  void * /*data*/, size_t /* data_size */) const override
134  {
135  return 0;
136  }
137  int64_t get_field_internal(const Ioss::EdgeSet * /*ns*/, const Ioss::Field & /*field*/,
138  void * /*data*/, size_t /* data_size */) const override
139  {
140  return 0;
141  }
142  int64_t get_field_internal(const Ioss::FaceSet * /*ns*/, const Ioss::Field & /*field*/,
143  void * /*data*/, size_t /* data_size */) const override
144  {
145  return 0;
146  }
147  int64_t get_field_internal(const Ioss::ElementSet * /*ns*/, const Ioss::Field & /*field*/,
148  void * /*data*/, size_t /* data_size */) const override
149  {
150  return 0;
151  }
152  int64_t get_field_internal(const Ioss::SideSet * /*fs*/, const Ioss::Field & /*field*/,
153  void * /*data*/, size_t /* data_size */) const override
154  {
155  return 0;
156  }
157  int64_t get_field_internal(const Ioss::CommSet * /*cs*/, const Ioss::Field & /*field*/,
158  void * /*data*/, size_t /* data_size */) const override
159  {
160  return 0;
161  }
162 
163  int64_t get_field_internal(const Ioss::StructuredBlock * /*sb*/, const Ioss::Field & /*field*/,
164  void * /*data*/, size_t /*data_size*/) const override
165  {
166  return 0;
167  }
168 
169  int64_t put_field_internal(const Ioss::Region *reg, const Ioss::Field &field, void *data,
170  size_t data_size) const override;
171 
172  int64_t put_field_internal(const Ioss::NodeBlock *nb, const Ioss::Field &field, void *data,
173  size_t data_size) const override;
174  int64_t put_field_internal(const Ioss::EdgeBlock * /*nb*/, const Ioss::Field & /*field*/,
175  void * /*data*/, size_t /* data_size */) const override
176  {
177  return 0;
178  }
179  int64_t put_field_internal(const Ioss::FaceBlock * /*nb*/, const Ioss::Field & /*field*/,
180  void * /*data*/, size_t /* data_size */) const override
181  {
182  return 0;
183  }
184  int64_t put_field_internal(const Ioss::ElementBlock *eb, const Ioss::Field &field, void *data,
185  size_t data_size) const override;
186  int64_t put_field_internal(const Ioss::SideBlock *eb, const Ioss::Field &field, void *data,
187  size_t data_size) const override;
188 
189  int64_t put_field_internal(const Ioss::NodeSet *ns, const Ioss::Field &field, void *data,
190  size_t data_size) const override;
191  int64_t put_field_internal(const Ioss::EdgeSet * /*ns*/, const Ioss::Field & /*field*/,
192  void * /*data*/, size_t /* data_size */) const override
193  {
194  return 0;
195  }
196  int64_t put_field_internal(const Ioss::FaceSet * /*ns*/, const Ioss::Field & /*field*/,
197  void * /*data*/, size_t /* data_size */) const override
198  {
199  return 0;
200  }
201  int64_t put_field_internal(const Ioss::ElementSet * /*ns*/, const Ioss::Field & /*field*/,
202  void * /*data*/, size_t /* data_size */) const override
203  {
204  return 0;
205  }
206  int64_t put_field_internal(const Ioss::SideSet *fs, const Ioss::Field &field, void *data,
207  size_t data_size) const override;
208  int64_t put_field_internal(const Ioss::CommSet * /*cs*/, const Ioss::Field & /*field*/,
209  void * /*data*/, size_t /* data_size */) const override
210  {
211  return 0;
212  }
213  int64_t put_field_internal(const Ioss::StructuredBlock * /*sb*/, const Ioss::Field & /*field*/,
214  void * /*data*/, size_t /* data_size */) const override
215  {
216  return 0;
217  }
218 
219  void write_meta_data();
220 
221  static ParaViewCatalystIossAdapterBase *
222  load_plugin_library(const std::string &plugin_name, const std::string &plugin_library_name);
223 
224  static std::string create_output_file_path(const std::string & input_deck_name,
226  // static bool plugin_library_exists(const std::string &plugin_name);
227 
228  int64_t handle_node_ids(void *ids, int64_t num_to_get);
229  int64_t handle_element_ids(const Ioss::ElementBlock *eb, void *ids, size_t num_to_get);
230 
231  const Ioss::Map &get_node_map() const;
232  const Ioss::Map &get_element_map() const;
233 
234  DatabaseIO(); // Do not implement
235  DatabaseIO(const DatabaseIO &); // Do not implement
236  DatabaseIO &operator=(const DatabaseIO &); // Do not implement
237 
238  bool isInput;
239  bool singleProcOnly; // True if history or heartbeat which is only written from proc 0...
240  bool doLogging; // True if logging field input/output
241 
242  std::string databaseTitle;
243  static std::string paraview_script_filename;
245  std::string paraview_json_parse;
255  static int useCount;
256  static int uniqueID;
257 
260 
261  // Handle to the ParaView Catalyst dynamic library
262  // that is loaded via Ioss user plugin at runtime.
263  ParaViewCatalystIossAdapterBase *pvcsa;
266  mutable EntityIdSet ids_;
267  };
268 } // namespace Iovs
269 
270 #endif
Iovs::DatabaseIO::singleProcOnly
bool singleProcOnly
Definition: Iovs_DatabaseIO.h:239
Iovs::DatabaseIO::create_output_file_path
static std::string create_output_file_path(const std::string &input_deck_name, const Ioss::PropertyManager &properties)
Definition: Iovs_DatabaseIO.C:227
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::EdgeSet *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:137
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::FaceBlock *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:117
Ioss_DBUsage.h
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::Region *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:102
Iovs::DatabaseIO::get_node_map
const Ioss::Map & get_node_map() const
Definition: Iovs_DatabaseIO.C:933
Ioss::Field
Holds metadata for bulk data associated with a GroupingEntity.
Definition: Ioss_Field.h:47
Iovs::DatabaseIO::get_format
const std::string get_format() const override
Definition: Iovs_DatabaseIO.h:77
Iovs::DatabaseIO::end_state__
bool end_state__(int state, double time) override
Definition: Iovs_DatabaseIO.C:370
Iovs::DatabaseIO::get_element_map
const Ioss::Map & get_element_map() const
Definition: Iovs_DatabaseIO.C:952
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::FaceBlock *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:179
Iovs::DatabaseIO::begin_state__
bool begin_state__(int state, double time) override
Definition: Iovs_DatabaseIO.C:355
Ioss_Map.h
Iovs::DatabaseIO::databaseTitle
std::string databaseTitle
Definition: Iovs_DatabaseIO.h:242
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::EdgeBlock *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:112
Iovs::DatabaseIO::catalyst_block_file_name
std::string catalyst_block_file_name
Definition: Iovs_DatabaseIO.h:244
Iovs::DatabaseIO::paraview_json_parse
std::string paraview_json_parse
Definition: Iovs_DatabaseIO.h:245
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::FaceSet *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:142
Iovs::DatabaseIO::enableLogging
int enableLogging
Definition: Iovs_DatabaseIO.h:249
Iovs::DatabaseIO::elementBlockCount
int elementBlockCount
Definition: Iovs_DatabaseIO.h:259
Iovs::DatabaseIO::uniqueID
static int uniqueID
Definition: Iovs_DatabaseIO.h:256
Ioss::NODESET
Definition: Ioss_EntityType.h:44
Iovs::DatabaseIO::entity_field_support
unsigned entity_field_support() const override
Definition: Iovs_DatabaseIO.h:83
Ioss::EdgeBlock
A collection of element edges with the same topology.
Definition: Ioss_EdgeBlock.h:53
Iovs::DatabaseIO::~DatabaseIO
~DatabaseIO() override
Definition: Iovs_DatabaseIO.C:204
Ioss::DatabaseUsage
DatabaseUsage
Specifies how an Ioss::DatabaseIO object will be used.
Definition: Ioss_DBUsage.h:40
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::EdgeBlock *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:174
Iovs::DatabaseIO::handle_node_ids
int64_t handle_node_ids(void *ids, int64_t num_to_get)
Definition: Iovs_DatabaseIO.C:789
Iovs::DatabaseIO::begin__
bool begin__(Ioss::State state) override
Definition: Iovs_DatabaseIO.C:290
Ioss::State
State
Access states for a database.
Definition: Ioss_State.h:42
Ioss::Region
A grouping entity that contains other grouping entities.
Definition: Ioss_Region.h:98
Ioss::NodeSet
A collection of nodes.
Definition: Ioss_NodeSet.h:53
Ioss::FaceSet
A collection of element faces.
Definition: Ioss_FaceSet.h:54
Iovs::DatabaseIO::useCount
static int useCount
Definition: Iovs_DatabaseIO.h:255
Ioss::StructuredBlock
A structured zone – i,j,k.
Definition: Ioss_StructuredBlock.h:103
Iovs::EntityIdSet
std::set< std::pair< int64_t, int64_t > > EntityIdSet
Definition: Iovs_DatabaseIO.h:68
Iovs::DatabaseIO::underscoreVectors
int underscoreVectors
Definition: Iovs_DatabaseIO.h:251
Ioss::PropertyManager
A collection of Ioss::Property objects.
Definition: Ioss_PropertyManager.h:49
Ioss::EdgeSet
A collection of element edges.
Definition: Ioss_EdgeSet.h:54
Ioss::ElementSet
A collection of elements.
Definition: Ioss_ElementSet.h:54
Iovs::DatabaseIO::DatabaseIO
DatabaseIO()
Ioss::CommSet
Definition: Ioss_CommSet.h:51
Ioss_EntityType.h
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::EdgeSet *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:191
Ioss::FaceBlock
A collection of element faces with the same topology.
Definition: Ioss_FaceBlock.h:53
Ioss::DatabaseIO::properties
Ioss::PropertyManager properties
Definition: Ioss_DatabaseIO.h:578
Iovs::DatabaseIO::debugLevel
int debugLevel
Definition: Iovs_DatabaseIO.h:250
Iovs::DatabaseIO::create_global_node_and_element_ids
void create_global_node_and_element_ids() const
Definition: Iovs_DatabaseIO.C:420
Iovs::DatabaseIO::applyDisplacements
int applyDisplacements
Definition: Iovs_DatabaseIO.h:252
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::StructuredBlock *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:213
Iovs::DatabaseIO::write_meta_data
void write_meta_data()
Definition: Iovs_DatabaseIO.C:733
Ioss::DatabaseIO
An input or output Database.
Definition: Ioss_DatabaseIO.h:82
Iovs::DatabaseIO::ids_
EntityIdSet ids_
Definition: Iovs_DatabaseIO.h:266
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::CommSet *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:157
Iovs::DatabaseIO::catalyst_output_directory
std::string catalyst_output_directory
Definition: Iovs_DatabaseIO.h:247
Iovs::DatabaseIO::int_byte_size_db
int int_byte_size_db() const override
Definition: Iovs_DatabaseIO.h:90
Iovs::DatabaseIO::paraview_script_filename
static std::string paraview_script_filename
Definition: Iovs_DatabaseIO.h:243
Ioss_Utils.h
Ioss::ELEMENTBLOCK
Definition: Ioss_EntityType.h:43
Ioss::SideBlock
A collection of element sides having the same topology.
Definition: Ioss_SideBlock.h:59
Ioss_Field.h
Iovs::DatabaseIO::paraview_script_extra_filename
std::string paraview_script_extra_filename
Definition: Iovs_DatabaseIO.h:248
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::StructuredBlock *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:163
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::ElementSet *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:201
Iovs::DatabaseIO::createSideSets
int createSideSets
Definition: Iovs_DatabaseIO.h:253
Iovs::DatabaseIO::handle_element_ids
int64_t handle_element_ids(const Ioss::ElementBlock *eb, void *ids, size_t num_to_get)
Definition: Iovs_DatabaseIO.C:924
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::NodeSet *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:132
Iovs::DatabaseIO::nodeBlockCount
int nodeBlockCount
Definition: Iovs_DatabaseIO.h:258
Iovs::DatabaseIO
Definition: Iovs_DatabaseIO.h:70
Ioss::NODEBLOCK
Definition: Ioss_EntityType.h:40
Ioss::ElementBlock
A collection of elements having the same topology.
Definition: Ioss_ElementBlock.h:48
Ioss::DatabaseIO::int_byte_size_api
int int_byte_size_api() const
Returns 4 or 8.
Definition: Ioss_DatabaseIO.C:237
Iovs::DatabaseIO::createNodeSets
int createNodeSets
Definition: Iovs_DatabaseIO.h:254
Iovs::DatabaseIO::doLogging
bool doLogging
Definition: Iovs_DatabaseIO.h:240
Iovs::DatabaseIO::end__
bool end__(Ioss::State state) override
Definition: Iovs_DatabaseIO.C:332
Iovs
A namespace for the visualization database format.
Definition: Iovs_DatabaseIO.C:101
Iovs::DatabaseIO::operator=
DatabaseIO & operator=(const DatabaseIO &)
Iovs::DatabaseIO::isInput
bool isInput
Definition: Iovs_DatabaseIO.h:238
Iovs::DatabaseIO::pvcsa
ParaViewCatalystIossAdapterBase * pvcsa
Definition: Iovs_DatabaseIO.h:263
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::ElementBlock *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:122
Ioss::Map
Definition: Ioss_Map.h:52
Iovs::DatabaseIO::read_meta_data__
void read_meta_data__() override
Definition: Iovs_DatabaseIO.C:402
Iovs::DatabaseIO::load_plugin_library
static ParaViewCatalystIossAdapterBase * load_plugin_library(const std::string &plugin_name, const std::string &plugin_library_name)
Definition: Iovs_DatabaseIO.C:241
Ioss::SIDEBLOCK
Definition: Ioss_EntityType.h:51
anonymous_namespace{cth_pressure_map.C}::data
std::vector< char > data
Definition: cth_pressure_map.C:74
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::SideBlock *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:127
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::SideSet *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:152
Ioss::NodeBlock
A collection of all nodes in the region.
Definition: Ioss_NodeBlock.h:53
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::NodeBlock *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:107
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::FaceSet *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:196
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::ElementSet *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:147
MPI_Comm
int MPI_Comm
Definition: Ioss_CodeTypes.h:96
Iovs::DatabaseIO::globalNodeAndElementIDsCreated
bool globalNodeAndElementIDsCreated
Definition: Iovs_DatabaseIO.h:264
Iovs::DatabaseIO::parseCatalystFile
static int parseCatalystFile(const std::string &filepath, std::string &json_result)
Definition: Iovs_DatabaseIO.C:404
Iovs::DatabaseIO::sierra_input_deck_name
std::string sierra_input_deck_name
Definition: Iovs_DatabaseIO.h:246
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::CommSet *, const Ioss::Field &, void *, size_t) const override
Definition: Iovs_DatabaseIO.h:208
Ioss::SideSet
A collection of element sides.
Definition: Ioss_SideSet.h:53
Ioss_CodeTypes.h
Iovs::DatabaseIO::put_field_internal
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:446
Ioss_DatabaseIO.h
Ioss::SIDESET
Definition: Ioss_EntityType.h:48