24#include "ioss_export.h"
25#if !defined BUILT_IN_SIERRA
26#include <fmt/ostream.h>
51 class StructuredBlock;
57 class CoordinateFrame;
80 using AliasMap = std::map<std::string, std::string, std::less<>>;
92 explicit Region(
DatabaseIO *iodatabase =
nullptr,
const std::string &my_name =
"");
105 void output_summary(std::ostream &strm,
bool do_transient =
true)
const;
110 IOSS_NODISCARD int64_t node_global_to_local(int64_t global,
bool must_exist =
true)
const;
112 bool begin_mode(
State new_state);
113 bool end_mode(
State current_state);
119 return add_state_nl(time);
121 virtual int add_state_nl(
double time);
125 IOSS_NODISCARD virtual double get_state_time(
int state = -1)
const;
127 double begin_state(
int state);
128 double end_state(
int state);
173 bool add(
Blob *blob);
222 bool add_alias(
const std::string &db_name,
const std::string &alias,
EntityType type);
223 bool add_alias(
const std::string &db_name,
const std::string &alias);
232 int get_aliases(
const std::string &my_name,
EntityType type,
233 std::vector<std::string> &aliases)
const;
237 void transfer_mesh_aliases(
Region *to)
const;
240 void synchronize_id_and_name(
const Region *from,
bool sync_attribute_field_names =
false);
249 IOSS_NODISCARD bool is_valid_io_entity(
const std::string &my_name,
unsigned int io_type,
250 std::string *my_type =
nullptr)
const;
271 IOSS_NODISCARD const std::vector<std::string> &get_information_records()
const;
272 void add_information_records(
const std::vector<std::string> &info);
273 void add_information_record(
const std::string &info);
275 IOSS_NODISCARD const std::vector<std::string> &get_qa_records()
const;
276 void add_qa_record(
const std::string &code,
const std::string &code_qa,
277 const std::string &date =
"",
const std::string &time =
"");
279 template <
typename T,
typename U>
280 std::vector<size_t> get_entity_field_data(
const std::string &field_name,
281 const std::vector<T *> &entity_container,
282 std::vector<U> &field_data)
const;
285 int64_t internal_get_field_data(
const Field &field,
void *data,
286 size_t data_size = 0)
const override;
288 int64_t internal_put_field_data(
const Field &field,
void *data,
289 size_t data_size = 0)
const override;
291 int64_t internal_get_zc_field_data(
const Field &field,
void **data,
292 size_t *data_size)
const override;
295 template <
typename T>
296 std::vector<size_t> internal_get_entity_field_data(
const std::string &field_name,
297 const std::vector<T *> &entity_container,
298 void *data,
size_t data_size = 0)
const;
303 bool add_alias_nl(
const std::string &db_name,
const std::string &alias,
EntityType type);
306 bool begin_mode_nl(
State new_state);
307 bool end_mode_nl(
State current_state);
309 void delete_database()
override;
332 int currentState{-1};
333 mutable int stateCount{0};
334 bool modelDefined{
false};
335 bool transientDefined{
false};
347 return static_cast<unsigned int>((get_database()->entity_field_support() & fld_type) != 0U) != 0U;
352 return get_database()->node_global_to_local(global, must_exist);
362 return get_database()->get_information_records();
372 return get_database()->add_information_records(info);
382 return get_database()->add_information_record(info);
396 const std::string &date,
const std::string &time)
399 return get_database()->add_qa_record(code, code_qa, date, time);
420 return get_database()->get_qa_records();
425 template <
typename T>
427 const std::vector<T *> &entity_container)
432 for (
const T *entity : entity_container) {
433 if (entity->field_exists(field_name)) {
436 if (found && field.
get_role() != role) {
437 std::ostringstream errmsg;
438#if defined BUILT_IN_SIERRA
440 <<
" on entity " << entity->name() <<
" does not match previously found role "
444 "ERROR: Field {} with role {} on entity {} does not match previously found "
461 template <
typename T>
463 const std::vector<T *> &entity_container)
467 for (
const T *entity : entity_container) {
468 if (entity->field_exists(field_name)) {
480template <
typename T,
typename U>
482 const std::vector<T *> &entity_container,
483 std::vector<U> &field_data)
const
488 return std::vector<size_t>(entity_container.size() + 1, 0);
493 field_data.resize(field_count);
494 size_t data_size = field_count *
sizeof(U);
496 std::vector<size_t> offsets =
497 internal_get_entity_field_data(field_name, entity_container,
Data(field_data), data_size);
499 assert(offsets.size() == (entity_container.size() + 1));
500 assert(offsets[entity_container.size()] == field_count);
508 const std::vector<T *> &entity_container,
void *data,
509 size_t data_size)
const
511 return get_database()->get_entity_field_data(field_name, entity_container, data, data_size);
#define IOSS_FUNC_ENTER(m)
Definition Ioss_CodeTypes.h:104
#define IOSS_NODISCARD
Definition Ioss_CodeTypes.h:54
IOSS_NODISCARD constexpr T * Data(std::vector< T > &vec)
Definition Ioss_Utils.h:56
void IOSS_ERROR(const std::ostringstream &errmsg)
Definition Ioss_Utils.h:38
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
Definition Ioss_CoordinateFrame.h:19
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:25
IOSS_NODISCARD const VariableType * raw_storage() const
Definition Ioss_Field.h:161
RoleType
Definition Ioss_Field.h:69
@ INTERNAL
Definition Ioss_Field.h:70
IOSS_NODISCARD const std::string & get_name() const
Definition Ioss_Field.h:124
IOSS_NODISCARD std::string role_string() const
Definition Ioss_Field.C:362
IOSS_NODISCARD RoleType get_role() const
Get the role (MESH, ATTRIBUTE, TRANSIENT, REDUCTION, etc.) of the data in the field.
Definition Ioss_Field.h:177
Base class for all 'grouping' entities. The following derived classes are typical:
Definition Ioss_GroupingEntity.h:67
A collection of all nodes in the region.
Definition Ioss_NodeBlock.h:33
A collection of nodes.
Definition Ioss_NodeSet.h:29
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:90
BlobContainer blobs
Definition Ioss_Region.h:329
void add_qa_record(const std::string &code, const std::string &code_qa, const std::string &date="", const std::string &time="")
Add a QA record, which consists of 4 strings, to the region's database.
Definition Ioss_Region.h:395
IOSS_NODISCARD bool model_defined() const
Determine whether the metadata defining the model (nontransient, geometry, and toploloty) has been se...
Definition Ioss_Region.h:135
IOSS_NODISCARD std::string type_string() const override
Get the name of the particular type of entity.
Definition Ioss_Region.h:96
IOSS_NODISCARD EntityType type() const override
Get the EntityType, which indicates the particular type of GroupingEntity this is.
Definition Ioss_Region.h:99
StructuredBlockContainer structuredBlocks
Definition Ioss_Region.h:327
IOSS_NODISCARD bool transient_defined() const
Determine whether the metadata related to the transient data has been set.
Definition Ioss_Region.h:142
IOSS_NODISCARD const std::vector< std::string > & get_qa_records() const
Get all QA records, each of which consists of 4 strings, from the region's database.
Definition Ioss_Region.h:417
AssemblyContainer assemblies
Definition Ioss_Region.h:328
IOSS_NODISCARD std::string contains_string() const override
What does this entity contain.
Definition Ioss_Region.h:98
IOSS_NODISCARD int get_current_state() const
Get the index (1-based) of the currently-active state.
Definition Ioss_Region.h:343
int currentState
Definition Ioss_Region.h:332
IOSS_NODISCARD int64_t node_global_to_local(int64_t global, bool must_exist=true) const
Definition Ioss_Region.h:350
ElementBlockContainer elementBlocks
Definition Ioss_Region.h:317
EdgeBlockContainer edgeBlocks
Definition Ioss_Region.h:315
std::vector< size_t > get_entity_field_data(const std::string &field_name, const std::vector< T * > &entity_container, std::vector< U > &field_data) const
Definition Ioss_Region.h:481
EdgeSetContainer edgeSets
Definition Ioss_Region.h:320
FaceBlockContainer faceBlocks
Definition Ioss_Region.h:316
IOSS_NODISCARD const std::vector< std::string > & get_information_records() const
Get all information records (informative strings) for the region's database.
Definition Ioss_Region.h:359
NodeBlockContainer nodeBlocks
Definition Ioss_Region.h:314
CommSetContainer commSets
Definition Ioss_Region.h:325
ElementSetContainer elementSets
Definition Ioss_Region.h:322
StateTimeContainer stateTimes
Definition Ioss_Region.h:330
std::vector< size_t > internal_get_entity_field_data(const std::string &field_name, const std::vector< T * > &entity_container, void *data, size_t data_size=0) const
Definition Ioss_Region.h:507
IOSS_NODISCARD bool supports_field_type(Ioss::EntityType fld_type) const
Definition Ioss_Region.h:345
std::map< EntityType, AliasMap > aliases_
Stores alias mappings.
Definition Ioss_Region.h:311
virtual int add_state(double time)
Definition Ioss_Region.h:116
void add_information_records(const std::vector< std::string > &info)
Add multiple information records (informative strings) to the region's database.
Definition Ioss_Region.h:369
void add_information_record(const std::string &info)
Add an information record (an informative string) to the region's database.
Definition Ioss_Region.h:379
NodeSetContainer nodeSets
Definition Ioss_Region.h:319
CoordinateFrameContainer coordinateFrames
Definition Ioss_Region.h:326
IOSS_NODISCARD std::string short_type_string() const override
Get a short name of the particular type of entity.
Definition Ioss_Region.h:97
FaceSetContainer faceSets
Definition Ioss_Region.h:321
SideSetContainer sideSets
Definition Ioss_Region.h:324
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:104
IOSS_NODISCARD int component_count() const
Definition Ioss_VariableType.h:112
size_t get_field_data_count_for_entities(const std::string &field_name, const std::vector< T * > &entity_container)
Definition Ioss_Region.h:462
The main namespace for the Ioss library.
Definition Ioad_DatabaseIO.C:40
std::vector< CommSet * > CommSetContainer
Definition Ioss_Region.h:75
State
Access states for a database.
Definition Ioss_State.h:15
std::vector< FaceSet * > FaceSetContainer
Definition Ioss_Region.h:70
std::vector< ElementBlock * > ElementBlockContainer
Definition Ioss_Region.h:66
std::vector< FaceBlock * > FaceBlockContainer
Definition Ioss_Region.h:65
std::map< std::string, std::string, std::less<> > AliasMap
Definition Ioss_Region.h:80
std::vector< EdgeBlock * > EdgeBlockContainer
Definition Ioss_Region.h:64
bool verify_field_exists_in_entity_group(const std::string &field_name, const std::vector< T * > &entity_container)
Definition Ioss_Region.h:426
std::vector< ElementSet * > ElementSetContainer
Definition Ioss_Region.h:71
std::vector< Ioss::Blob * > BlobContainer
Definition Ioss_Region.h:61
std::vector< NodeSet * > NodeSetContainer
Definition Ioss_Region.h:68
std::vector< double > StateTimeContainer
Definition Ioss_Region.h:76
std::vector< SideSet * > SideSetContainer
Definition Ioss_Region.h:73
std::vector< EdgeSet * > EdgeSetContainer
Definition Ioss_Region.h:69
MeshType
The mesh type – structured, unstructured, hybrid (future), or unknown.
Definition Ioss_MeshType.h:12
std::vector< CoordinateFrame > CoordinateFrameContainer
Definition Ioex_Utils.h:46
std::vector< Ioss::Assembly * > AssemblyContainer
Definition Ioss_Region.h:60
std::vector< NodeBlock * > NodeBlockContainer
Definition Ioss_Region.h:63
std::vector< StructuredBlock * > StructuredBlockContainer
Definition Ioss_Region.h:74
EntityType
The particular type of GroupingEntity.
Definition Ioss_EntityType.h:12
@ REGION
Definition Ioss_EntityType.h:25