18#include <fmt/ostream.h>
26#include "ioss_export.h"
28#if defined(SEACAS_HAVE_CGNS) && !defined(BUILT_IN_SIERRA)
47 : m_bcName(std::move(name)), m_famName(std::move(fam_name)), m_rangeBeg(range_beg),
54 : m_bcName(name), m_famName(std::move(name)), m_rangeBeg(range_beg), m_rangeEnd(range_end)
79 std::string m_bcName{};
80 std::string m_famName{};
86 mutable int m_face{-1};
88 template <
class Archive>
void serialize(Archive &archive)
90 archive(m_bcName, m_famName, m_rangeBeg, m_rangeEnd, m_face);
97 IOSS_EXPORT std::ostream &
operator<<(std::ostream &os,
const BoundaryCondition &bc);
107 int nj,
int nk,
int off_i,
int off_j,
int off_k,
int glo_ni,
int glo_nj,
173 void set_ijk_offset(
int axis,
size_t offset);
174 void set_ijk_global(
int axis,
size_t global);
176 void set_ijk_offset(
const IJK_t &offset);
177 void set_ijk_global(
const IJK_t &global);
187 return m_cellGlobalOffset +
static_cast<size_t>(k - 1) * m_ijkGlobal[0] * m_ijkGlobal[1] +
188 static_cast<size_t>(j - 1) * m_ijkGlobal[0] + i;
193 return get_global_cell_id(index[0], index[1], index[2]);
201 return m_nodeGlobalOffset +
202 static_cast<size_t>(k - 1) * (m_ijkGlobal[0] + 1) * (m_ijkGlobal[1] + 1) +
203 static_cast<size_t>(j - 1) * (m_ijkGlobal[0] + 1) + i - 1;
208 return get_global_node_offset(index[0], index[1], index[2]);
215 auto i = ii - m_offset[0];
216 auto j = jj - m_offset[1];
217 auto k = kk - m_offset[2];
218 assert(i > 0 && i <= m_ijk[0] + 1 && j > 0 && j <= m_ijk[1] + 1 && k > 0 &&
220 return static_cast<size_t>(k - 1) * (m_ijk[0] + 1) * (m_ijk[1] + 1) +
221 static_cast<size_t>(j - 1) * (m_ijk[0] + 1) + i - 1;
226 return get_block_local_node_offset(index[0], index[1], index[2]);
233 return get_block_local_node_offset(i, j, k) + m_nodeOffset;
238 return get_local_node_offset(index[0], index[1], index[2]);
243 size_t node_count = get_property(
"node_count").get_int();
244 std::vector<IOSS_SB_INT> ids(node_count);
245 get_cell_node_ids(
Data(ids), add_offset);
262 size_t offset = add_offset ? m_nodeGlobalOffset : 0;
264 if (m_ijk[2] == 0 && m_ijk[1] == 0 && m_ijk[0] == 0) {
268 for (
int kk = 0; kk < m_ijk[2] + 1; kk++) {
269 size_t k = m_offset[2] + kk;
270 for (
int jj = 0; jj < m_ijk[1] + 1; jj++) {
271 size_t j = m_offset[1] + jj;
272 for (
int ii = 0; ii < m_ijk[0] + 1; ii++) {
273 size_t i = m_offset[0] + ii;
276 k * (m_ijkGlobal[0] + 1) * (m_ijkGlobal[1] + 1) + j * (m_ijkGlobal[0] + 1) + i;
278 idata[index++] = ind + offset + 1;
283 for (
const auto &idx_id : m_globalIdMap) {
284 idata[idx_id.first] = idx_id.second;
290 template <
typename INT_t>
size_t get_cell_ids(INT_t *idata,
bool add_offset)
const
303 size_t offset = add_offset ? m_cellGlobalOffset : 0;
305 if (m_ijk[2] == 0 && m_ijk[1] == 0 && m_ijk[0] == 0) {
309 for (
int kk = 0; kk < m_ijk[2]; kk++) {
310 size_t k = m_offset[2] + kk;
311 for (
int jj = 0; jj < m_ijk[1]; jj++) {
312 size_t j = m_offset[1] + jj;
313 for (
int ii = 0; ii < m_ijk[0]; ii++) {
314 size_t i = m_offset[0] + ii;
316 size_t ind = k * m_ijkGlobal[0] * m_ijkGlobal[1] + j * m_ijkGlobal[0] + i;
318 idata[index++] = ind + offset + 1;
327 return (global_offset >= m_nodeOffset &&
328 global_offset < m_nodeOffset + get_property(
"node_count").get_int());
337 int64_t internal_get_field_data(
const Field &field,
void *data,
338 size_t data_size)
const override;
340 int64_t internal_put_field_data(
const Field &field,
void *data,
341 size_t data_size)
const override;
343 int64_t internal_get_zc_field_data(
const Field &field,
void **data,
344 size_t *data_size)
const override;
352 size_t m_nodeOffset{};
353 size_t m_cellOffset{};
355 size_t m_nodeGlobalOffset{};
356 size_t m_cellGlobalOffset{};
366 template <
class Archive>
void serialize(Archive &archive)
368 archive(m_zoneConnectivity, m_boundaryConditions, m_blockLocalNodeIndex, m_globalIdMap);
373#if FMT_VERSION >= 90000
375 template <>
struct formatter<
Ioss::BoundaryCondition> : ostream_formatter
#define IOSS_NODISCARD
Definition Ioss_CodeTypes.h:54
int IOSS_SB_INT
Definition Ioss_StructuredBlock.h:36
IOSS_NODISCARD constexpr T * Data(std::vector< T > &vec)
Definition Ioss_Utils.h:56
An input or output Database.
Definition Ioss_DatabaseIO.h:63
Base class for all 'block'-type grouping entities, which means all members of the block are similar o...
Definition Ioss_EntityBlock.h:38
Holds metadata for bulk data associated with a GroupingEntity.
Definition Ioss_Field.h:25
A collection of all nodes in the region.
Definition Ioss_NodeBlock.h:33
A named value that has a known type.
Definition Ioss_Property.h:27
A structured zone – i,j,k.
Definition Ioss_StructuredBlock.h:104
IOSS_NODISCARD bool is_active() const
Does block contain any cells.
Definition Ioss_StructuredBlock.h:131
void serialize(Archive &archive)
Definition Ioss_StructuredBlock.h:366
IOSS_NODISCARD size_t get_cell_offset() const
Definition Ioss_StructuredBlock.h:169
void set_node_global_offset(size_t offset)
Definition Ioss_StructuredBlock.h:165
IOSS_NODISCARD std::string type_string() const override
Get the name of the particular type of entity.
Definition Ioss_StructuredBlock.h:121
std::vector< ZoneConnectivity > m_zoneConnectivity
Definition Ioss_StructuredBlock.h:361
std::vector< std::pair< size_t, size_t > > m_globalIdMap
Definition Ioss_StructuredBlock.h:364
IOSS_NODISCARD Ioss::NodeBlock & get_node_block()
Definition Ioss_StructuredBlock.h:127
IOSS_NODISCARD size_t get_global_node_offset(int i, int j, int k) const
Definition Ioss_StructuredBlock.h:199
IOSS_NODISCARD size_t get_block_local_node_offset(IJK_t index) const
Definition Ioss_StructuredBlock.h:224
IOSS_NODISCARD std::vector< IOSS_SB_INT > get_cell_node_ids(bool add_offset) const
Definition Ioss_StructuredBlock.h:241
IOSS_NODISCARD std::string short_type_string() const override
Get a short name of the particular type of entity.
Definition Ioss_StructuredBlock.h:122
IOSS_NODISCARD bool contains_node(size_t global_offset) const
Definition Ioss_StructuredBlock.h:325
IOSS_NODISCARD size_t get_node_offset() const
Definition Ioss_StructuredBlock.h:168
IOSS_NODISCARD std::string contains_string() const override
What does this entity contain.
Definition Ioss_StructuredBlock.h:123
void set_cell_offset(size_t offset)
Definition Ioss_StructuredBlock.h:164
IOSS_NODISCARD size_t get_global_cell_id(int i, int j, int k) const
Definition Ioss_StructuredBlock.h:185
IOSS_NODISCARD const Ioss::NodeBlock & get_node_block() const
Definition Ioss_StructuredBlock.h:126
size_t get_cell_node_ids(INT_t *idata, bool add_offset) const
Definition Ioss_StructuredBlock.h:249
std::vector< size_t > m_blockLocalNodeIndex
Definition Ioss_StructuredBlock.h:363
IOSS_NODISCARD size_t get_global_cell_id(IJK_t index) const
Definition Ioss_StructuredBlock.h:191
IOSS_NODISCARD EntityType type() const override
Get the EntityType, which indicates the particular type of GroupingEntity this is.
Definition Ioss_StructuredBlock.h:124
IOSS_NODISCARD size_t get_node_global_offset() const
Definition Ioss_StructuredBlock.h:170
IJK_t m_ijk
Definition Ioss_StructuredBlock.h:348
size_t get_cell_ids(INT_t *idata, bool add_offset) const
Definition Ioss_StructuredBlock.h:290
IOSS_NODISCARD IJK_t get_ijk_local() const
Definition Ioss_StructuredBlock.h:180
Ioss::NodeBlock m_nodeBlock
Definition Ioss_StructuredBlock.h:358
void set_cell_global_offset(size_t offset)
Definition Ioss_StructuredBlock.h:166
IOSS_NODISCARD IJK_t get_ijk_offset() const
Definition Ioss_StructuredBlock.h:179
IOSS_NODISCARD size_t get_block_local_node_offset(int ii, int jj, int kk) const
Definition Ioss_StructuredBlock.h:213
IJK_t m_offset
Definition Ioss_StructuredBlock.h:349
IOSS_NODISCARD size_t get_local_node_offset(int i, int j, int k) const
Definition Ioss_StructuredBlock.h:231
IOSS_NODISCARD size_t get_local_node_offset(IJK_t index) const
Definition Ioss_StructuredBlock.h:236
IOSS_NODISCARD IJK_t get_ijk_global() const
Definition Ioss_StructuredBlock.h:181
IOSS_NODISCARD size_t get_global_node_offset(IJK_t index) const
Definition Ioss_StructuredBlock.h:206
IJK_t m_ijkGlobal
Definition Ioss_StructuredBlock.h:350
void set_node_offset(size_t offset)
Set the 'offset' for the block.
Definition Ioss_StructuredBlock.h:163
std::vector< BoundaryCondition > m_boundaryConditions
Definition Ioss_StructuredBlock.h:362
IOSS_NODISCARD size_t get_cell_global_offset() const
Definition Ioss_StructuredBlock.h:171
The main namespace for the Ioss library.
Definition Ioad_DatabaseIO.C:40
std::ostream & operator<<(std::ostream &os, const BoundaryCondition &bc)
Definition Ioss_StructuredBlock.C:382
std::array< int, 3 > IJK_t
Definition Ioss_CodeTypes.h:24
EntityType
The particular type of GroupingEntity.
Definition Ioss_EntityType.h:12
@ STRUCTUREDBLOCK
Definition Ioss_EntityType.h:27
Definition Ioss_BoundingBox.h:13
Definition Ioss_StructuredBlock.h:44
void serialize(Archive &archive)
Definition Ioss_StructuredBlock.h:88
BoundaryCondition(std::string name, Ioss::IJK_t range_beg, Ioss::IJK_t range_end)
Definition Ioss_StructuredBlock.h:53
BoundaryCondition(std::string name, std::string fam_name, Ioss::IJK_t range_beg, Ioss::IJK_t range_end)
Definition Ioss_StructuredBlock.h:45
BoundaryCondition & operator=(const BoundaryCondition ©_from)=default
BoundaryCondition(const BoundaryCondition ©_from)=default
BoundaryCondition()=default
IOSS_NODISCARD bool operator!=(const Ioss::BoundaryCondition &rhs) const