IOSS 2.0
Loading...
Searching...
No Matches
Ios3_DatabaseIO.h
Go to the documentation of this file.
1// Copyright(C) 2025 National Technology & Engineering Solutions
2// of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
3// NTESS, the U.S. Government retains certain rights in this software.
4//
5// See packages/seacas/LICENSE for details
6
7#pragma once
8
9#include "ios3_export.h"
10
11#include "Ioss_DatabaseIO.h" // for DatabaseIO
12#include "Ioss_IOFactory.h" // for IOFactory
13
14#include "Ios3_AwsHelpers.h"
15
16namespace Ios3 {
17
18 class IOS3_EXPORT IOFactory : public Ioss::IOFactory
19 {
20 public:
21 static const IOFactory *factory();
22
23 private:
24 IOFactory();
25 Ioss::DatabaseIO *make_IO(const std::string &filename, Ioss::DatabaseUsage db_usage,
26 Ioss_MPI_Comm communicator,
27 const Ioss::PropertyManager &properties) const;
28 };
29
30 class IOS3_EXPORT DatabaseIO : public Ioss::DatabaseIO
31 {
32 private:
33 bool put_properties() const;
34 void finalize_database() const override;
35
36 public:
37 DatabaseIO(Ioss::Region *region, const std::string &filename, Ioss::DatabaseUsage db_usage,
38 Ioss_MPI_Comm communicator, const Ioss::PropertyManager &props);
39
40 ~DatabaseIO() override;
41
42 // Check capabilities of input/output database... Returns an
43 // unsigned int with the supported Ioss::EntityTypes or'ed
44 // together. If "return_value & Ioss::EntityType" is set, then the
45 // database supports that type (e.g. return_value & Ioss::FACESET)
52
53 int spatial_dimension() const { return spatialDimension; }
54 int node_block_count() const { return nodeBlockCount; }
55 int element_block_count() const { return elementBlockCount; }
56 int nodeset_count() const { return nodesetCount; }
57 int sideset_count() const { return sidesetCount; }
58
59 /** Return a string specifying underlying format of database (exodus, cgns, ...) */
60 IOSS_NODISCARD virtual std::string get_format() const override { return "s3"; };
61
62 IOSS_NODISCARD virtual int int_byte_size_db() const override { return sizeof(int); }
63
64 virtual int64_t get_field_internal(const Ioss::Region *reg, const Ioss::Field &field,
65 void *data, size_t data_size) const override;
66 virtual int64_t get_field_internal(const Ioss::NodeBlock *nb, const Ioss::Field &field,
67 void *data, size_t data_size) const override;
68 virtual int64_t get_field_internal(const Ioss::EdgeBlock *nb, const Ioss::Field &field,
69 void *data, size_t data_size) const override;
70 virtual int64_t get_field_internal(const Ioss::FaceBlock *nb, const Ioss::Field &field,
71 void *data, size_t data_size) const override;
72 virtual int64_t get_field_internal(const Ioss::ElementBlock *eb, const Ioss::Field &field,
73 void *data, size_t data_size) const override;
74 virtual int64_t get_field_internal(const Ioss::SideBlock *fb, const Ioss::Field &field,
75 void *data, size_t data_size) const override;
76 virtual int64_t get_field_internal(const Ioss::NodeSet *ns, const Ioss::Field &field,
77 void *data, size_t data_size) const override;
78 virtual int64_t get_field_internal(const Ioss::EdgeSet *ns, const Ioss::Field &field,
79 void *data, size_t data_size) const override;
80 virtual int64_t get_field_internal(const Ioss::FaceSet *ns, const Ioss::Field &field,
81 void *data, size_t data_size) const override;
82 virtual int64_t get_field_internal(const Ioss::ElementSet *ns, const Ioss::Field &field,
83 void *data, size_t data_size) const override;
84 virtual int64_t get_field_internal(const Ioss::SideSet *fs, const Ioss::Field &field,
85 void *data, size_t data_size) const override;
86 virtual int64_t get_field_internal(const Ioss::CommSet *cs, const Ioss::Field &field,
87 void *data, size_t data_size) const override;
88 virtual int64_t get_field_internal(const Ioss::StructuredBlock *sb, const Ioss::Field &field,
89 void *data, size_t data_size) const override;
92
93 virtual int64_t put_field_internal(const Ioss::Region *reg, const Ioss::Field &field,
94 void *data, size_t data_size) const override;
95 virtual int64_t put_field_internal(const Ioss::NodeBlock *nb, const Ioss::Field &field,
96 void *data, size_t data_size) const override;
97 virtual int64_t put_field_internal(const Ioss::EdgeBlock *nb, const Ioss::Field &field,
98 void *data, size_t data_size) const override;
99 virtual int64_t put_field_internal(const Ioss::FaceBlock *nb, const Ioss::Field &field,
100 void *data, size_t data_size) const override;
101 virtual int64_t put_field_internal(const Ioss::ElementBlock *eb, const Ioss::Field &field,
102 void *data, size_t data_size) const override;
103 virtual int64_t put_field_internal(const Ioss::SideBlock *fb, const Ioss::Field &field,
104 void *data, size_t data_size) const override;
105 virtual int64_t put_field_internal(const Ioss::NodeSet *ns, const Ioss::Field &field,
106 void *data, size_t data_size) const override;
107 virtual int64_t put_field_internal(const Ioss::EdgeSet *ns, const Ioss::Field &field,
108 void *data, size_t data_size) const override;
109 virtual int64_t put_field_internal(const Ioss::FaceSet *ns, const Ioss::Field &field,
110 void *data, size_t data_size) const override;
111 virtual int64_t put_field_internal(const Ioss::ElementSet *ns, const Ioss::Field &field,
112 void *data, size_t data_size) const override;
113 virtual int64_t put_field_internal(const Ioss::SideSet *fs, const Ioss::Field &field,
114 void *data, size_t data_size) const override;
115 virtual int64_t put_field_internal(const Ioss::CommSet *cs, const Ioss::Field &field,
116 void *data, size_t data_size) const override;
117 virtual int64_t put_field_internal(const Ioss::StructuredBlock *sb, const Ioss::Field &field,
118 void *data, size_t data_size) const override;
121
122 private:
123 int64_t get_field_internal(const Ioss::GroupingEntity &e, const Ioss::Field &f, void *data,
124 size_t data_size) const;
125 int64_t put_field_internal(const Ioss::GroupingEntity &e, const Ioss::Field &f, void *data,
126 size_t data_size) const;
127
128 virtual bool begin_nl(Ioss::State state) override;
129 virtual bool end_nl(Ioss::State state) override;
130
131 virtual void read_meta_data_nl() override;
132
133 void put_qa();
134 void put_info();
135 void write_meta_data(Ioss::IfDatabaseExistsBehavior behavior);
136
137 /*
138 * TODO identify all the get_*{blocks|sets} needed here
139 */
140 void get_step_times_nl() override;
141
142 void read_region();
143 void read_entity_properties(std::vector<std::string> &keys, Ioss::GroupingEntity &entity);
144 Ioss::Property read_property(std::vector<unsigned char> &value);
145 void read_entity_fields(std::vector<std::string> &keys, Ioss::GroupingEntity &entity);
146
147 Ioss::Map &get_node_map() const;
148
149 void get_edgeblocks();
150 void get_elemblocks();
151 void get_faceblocks();
152 void get_nodeblocks();
153 void get_structuredblocks();
154
155 void get_edgesets();
156 void get_elemsets();
157 void get_facesets();
158 void get_nodesets();
159 void get_sidesets();
160 void get_commsets();
161
163
168
170
172 std::shared_ptr<Ios3::helpers::HelperContext> helper_context;
173
174 std::string bucket_name;
175 };
176
177} // namespace Ios3
#define IOSS_NODISCARD
Definition Ioss_CodeTypes.h:57
#define IOSS_NOOP_PFI(type)
Definition Ioss_CodeTypes.h:117
MPI_Comm Ioss_MPI_Comm
Definition Ioss_CodeTypes.h:62
#define IOSS_NOOP_GFI(type)
Definition Ioss_CodeTypes.h:112
Ioss::Map nodeMap
Definition Ios3_DatabaseIO.h:169
virtual IOSS_NODISCARD int int_byte_size_db() const override
Definition Ios3_DatabaseIO.h:62
std::string bucket_name
Definition Ios3_DatabaseIO.h:174
virtual IOSS_NODISCARD std::string get_format() const override
Definition Ios3_DatabaseIO.h:60
std::shared_ptr< Ios3::helpers::HelperContext > helper_context
Definition Ios3_DatabaseIO.h:172
int sidesetCount
Definition Ios3_DatabaseIO.h:167
int nodesetCount
Definition Ios3_DatabaseIO.h:166
int element_block_count() const
Definition Ios3_DatabaseIO.h:55
virtual IOSS_NODISCARD unsigned entity_field_support() const override
Definition Ios3_DatabaseIO.h:46
int spatialDimension
Definition Ios3_DatabaseIO.h:162
int nodeBlockCount
Definition Ios3_DatabaseIO.h:164
void finalize_database() const override
Definition Ios3_DatabaseIO.C:93
int elementBlockCount
Definition Ios3_DatabaseIO.h:165
Ios3::helpers::HelperParameters helper_params
Definition Ios3_DatabaseIO.h:171
int spatial_dimension() const
Definition Ios3_DatabaseIO.h:53
int nodeset_count() const
Definition Ios3_DatabaseIO.h:56
int node_block_count() const
Definition Ios3_DatabaseIO.h:54
bool put_properties() const
Definition Ios3_DatabaseIO.C:75
int sideset_count() const
Definition Ios3_DatabaseIO.h:57
DatabaseIO(Ioss::Region *region, const std::string &filename, Ioss::DatabaseUsage db_usage, Ioss_MPI_Comm communicator, const Ioss::PropertyManager &props)
Definition Ios3_DatabaseIO.C:50
static const IOFactory * factory()
Definition Ios3_DatabaseIO.C:35
Ioss::DatabaseIO * make_IO(const std::string &filename, Ioss::DatabaseUsage db_usage, Ioss_MPI_Comm communicator, const Ioss::PropertyManager &properties) const
Definition Ios3_DatabaseIO.C:43
IOFactory()
Definition Ios3_DatabaseIO.C:41
A homogeneous collection of other GroupingEntities.
Definition Ioss_Assembly.h:31
A homogeneous collection of other GroupingEntities.
Definition Ioss_Blob.h:31
Definition Ioss_CommSet.h:27
An input or output Database.
Definition Ioss_DatabaseIO.h:63
A collection of element edges with the same topology.
Definition Ioss_EdgeBlock.h:29
A collection of element edges.
Definition Ioss_EdgeSet.h:30
A collection of elements having the same topology.
Definition Ioss_ElementBlock.h:29
A collection of elements.
Definition Ioss_ElementSet.h:30
A collection of element faces with the same topology.
Definition Ioss_FaceBlock.h:29
A collection of element faces.
Definition Ioss_FaceSet.h:30
Holds metadata for bulk data associated with a GroupingEntity.
Definition Ioss_Field.h:28
Base class for all 'grouping' entities. The following derived classes are typical:
Definition Ioss_GroupingEntity.h:67
The main public user interface for creating Ioss::DatabaseIO objects.
Definition Ioss_IOFactory.h:35
Definition Ioss_Map.h:46
A collection of all nodes in the region.
Definition Ioss_NodeBlock.h:33
A collection of nodes.
Definition Ioss_NodeSet.h:29
A collection of Ioss::Property objects.
Definition Ioss_PropertyManager.h:36
A named value that has a known type.
Definition Ioss_Property.h:27
A grouping entity that contains other grouping entities.
Definition Ioss_Region.h:93
A collection of element sides having the same topology.
Definition Ioss_SideBlock.h:37
A collection of element sides.
Definition Ioss_SideSet.h:29
A structured zone – i,j,k.
Definition Ioss_StructuredBlock.h:91
Definition Ios3_AwsHelpers.C:58
size_t data_size(const Ioss::Field &f)
Definition Ios3_FieldSerialization.C:12
State
Access states for a database.
Definition Ioss_State.h:15
DatabaseUsage
Specifies how an Ioss::DatabaseIO object will be used.
Definition Ioss_DBUsage.h:13
IfDatabaseExistsBehavior
Definition Ioss_DBUsage.h:32
@ EDGESET
Definition Ioss_EntityType.h:18
@ SIDEBLOCK
Definition Ioss_EntityType.h:24
@ FACESET
Definition Ioss_EntityType.h:19
@ ELEMENTBLOCK
Definition Ioss_EntityType.h:16
@ REGION
Definition Ioss_EntityType.h:25
@ EDGEBLOCK
Definition Ioss_EntityType.h:14
@ SUPERELEMENT
Definition Ioss_EntityType.h:26
@ FACEBLOCK
Definition Ioss_EntityType.h:15
@ NODEBLOCK
Definition Ioss_EntityType.h:13
@ SIDESET
Definition Ioss_EntityType.h:21
@ NODESET
Definition Ioss_EntityType.h:17
@ ELEMENTSET
Definition Ioss_EntityType.h:20
Definition Ios3_AwsHelpers.h:27