33 #ifndef IOSS_Ioss_StructuredBlock_h 34 #define IOSS_Ioss_StructuredBlock_h 46 #if defined(SEACAS_HAVE_CGNS) && !defined(SIERRA_PARALLEL_MPI) 47 #include <cgnstypes.h> 102 int nj,
int nk,
int off_i,
int off_j,
int off_k,
int glo_ni,
int glo_nj,
117 std::string
type_string()
const override {
return "StructuredBlock"; }
127 return m_ni * m_nj * m_nk > 0;
133 Property get_implicit_property(
const std::string &my_name)
const override;
174 return m_cellGlobalOffset +
static_cast<size_t>(k - 1) * m_niGlobal * m_njGlobal +
175 static_cast<size_t>(j - 1) * m_niGlobal + i;
180 return get_global_cell_id(index[0], index[1], index[2]);
188 return m_nodeGlobalOffset +
static_cast<size_t>(k - 1) * (m_niGlobal + 1) * (m_njGlobal + 1) +
189 static_cast<size_t>(j - 1) * (m_niGlobal + 1) + i - 1;
194 return get_global_node_offset(index[0], index[1], index[2]);
201 auto i = ii - m_offsetI;
202 auto j = jj - m_offsetJ;
203 auto k = kk - m_offsetK;
204 assert(i > 0 && i <= m_ni + 1 && j > 0 && j <= m_nj + 1 && k > 0 && k <= m_nk + 1);
205 return static_cast<size_t>(k - 1) * (m_ni + 1) * (m_nj + 1) +
206 static_cast<size_t>(j - 1) * (m_ni + 1) + i - 1;
211 return get_block_local_node_offset(index[0], index[1], index[2]);
218 return get_block_local_node_offset(i, j, k) + m_nodeOffset;
223 return get_local_node_offset(index[0], index[1], index[2]);
228 size_t node_count = get_property(
"node_count").get_int();
229 std::vector<INT> ids(node_count);
230 get_cell_node_ids(ids.data(), add_offset);
247 size_t offset = add_offset ? m_nodeGlobalOffset : 0;
249 if (m_nk == 0 && m_nj == 0 && m_ni == 0) {
253 for (
int kk = 0; kk < m_nk + 1; kk++) {
254 size_t k = m_offsetK + kk;
255 for (
int jj = 0; jj < m_nj + 1; jj++) {
256 size_t j = m_offsetJ + jj;
257 for (
int ii = 0; ii < m_ni + 1; ii++) {
258 size_t i = m_offsetI + ii;
260 size_t ind = k * (m_niGlobal + 1) * (m_njGlobal + 1) + j * (m_niGlobal + 1) + i;
262 idata[index++] = ind + offset + 1;
267 for (
auto idx_id : m_globalIdMap) {
268 idata[idx_id.first] = idx_id.second;
274 template <
typename INT_t>
size_t get_cell_ids(INT_t *idata,
bool add_offset)
const 287 size_t offset = add_offset ? m_cellGlobalOffset : 0;
289 if (m_nk == 0 && m_nj == 0 && m_ni == 0) {
293 for (
int kk = 0; kk < m_nk; kk++) {
294 size_t k = m_offsetK + kk;
295 for (
int jj = 0; jj < m_nj; jj++) {
296 size_t j = m_offsetJ + jj;
297 for (
int ii = 0; ii < m_ni; ii++) {
298 size_t i = m_offsetI + ii;
300 size_t ind = k * m_niGlobal * m_njGlobal + j * m_niGlobal + i;
302 idata[index++] = ind + offset + 1;
311 return (global_offset >= m_nodeOffset &&
312 global_offset < m_nodeOffset + get_property(
"node_count").get_int());
316 int64_t internal_get_field_data(
const Field &field,
void *
data,
317 size_t data_size)
const override;
319 int64_t internal_put_field_data(
const Field &field,
void *data,
320 size_t data_size)
const override;
335 size_t m_nodeOffset{};
336 size_t m_cellOffset{};
338 size_t m_nodeGlobalOffset{};
339 size_t m_cellGlobalOffset{};
bool contains(size_t global_offset) const
Definition: Ioss_StructuredBlock.h:309
A named value that has a known type.
Definition: Ioss_Property.h:47
The main namespace for the Ioss library.
Definition: Iocgns_DatabaseIO.h:50
An input or output Database.
Definition: Ioss_DatabaseIO.h:80
friend std::ostream & operator<<(std::ostream &os, const BoundaryCondition &bc)
Definition: Ioss_StructuredBlock.C:263
Definition: Ioss_BoundingBox.h:37
Ioss::NodeBlock m_nodeBlock
Definition: Ioss_StructuredBlock.h:341
size_t get_local_node_offset(IJK_t index) const
Definition: Ioss_StructuredBlock.h:221
const Ioss::NodeBlock & get_node_block() const
Definition: Ioss_StructuredBlock.h:121
size_t get_cell_node_ids(INT_t *idata, bool add_offset) const
Definition: Ioss_StructuredBlock.h:234
std::vector< size_t > m_blockLocalNodeIndex
Definition: Ioss_StructuredBlock.h:346
size_t get_global_cell_id(int i, int j, int k) const
Definition: Ioss_StructuredBlock.h:172
size_t get_face_count() const
Definition: Ioss_StructuredBlock.C:227
void set_node_offset(size_t offset)
Set the 'offset' for the block.
Definition: Ioss_StructuredBlock.h:160
A structured zone – i,j,k.
Definition: Ioss_StructuredBlock.h:98
std::string type_string() const override
Get the name of the particular type of entity.
Definition: Ioss_StructuredBlock.h:117
Base class for all 'block'-type grouping entities, which means all members of the block are similar o...
Definition: Ioss_EntityBlock.h:61
Ioss::IJK_t m_rangeEnd
Definition: Ioss_StructuredBlock.h:89
int which_parent_face() const
Definition: Ioss_StructuredBlock.C:250
size_t get_global_node_offset(int i, int j, int k) const
Definition: Ioss_StructuredBlock.h:186
std::array< int, 3 > IJK_t
Definition: Ioss_CodeTypes.h:45
std::string m_bcName
Definition: Ioss_StructuredBlock.h:84
Definition: Ioss_StructuredBlock.h:59
size_t get_cell_global_offset() const
Definition: Ioss_StructuredBlock.h:168
void set_node_global_offset(size_t offset)
Definition: Ioss_StructuredBlock.h:162
size_t get_block_local_node_offset(IJK_t index) const
Definition: Ioss_StructuredBlock.h:209
void set_cell_global_offset(size_t offset)
Definition: Ioss_StructuredBlock.h:163
A collection of all nodes in the region.
Definition: Ioss_NodeBlock.h:53
bool is_active() const
Does block contain any cells.
Definition: Ioss_StructuredBlock.h:125
std::vector< INT > get_cell_node_ids(bool add_offset) const
Definition: Ioss_StructuredBlock.h:226
Ioss::IJK_t m_rangeBeg
Definition: Ioss_StructuredBlock.h:88
std::vector< BoundaryCondition > m_boundaryConditions
Definition: Ioss_StructuredBlock.h:345
int INT
Definition: Ioss_StructuredBlock.h:53
std::string short_type_string() const override
Get a short name of the particular type of entity.
Definition: Ioss_StructuredBlock.h:118
size_t get_node_offset() const
Definition: Ioss_StructuredBlock.h:165
void set_cell_offset(size_t offset)
Definition: Ioss_StructuredBlock.h:161
size_t get_cell_offset() const
Definition: Ioss_StructuredBlock.h:166
Definition: Ioss_EntityType.h:54
std::string m_famName
Definition: Ioss_StructuredBlock.h:85
size_t get_node_global_offset() const
Definition: Ioss_StructuredBlock.h:167
size_t get_global_cell_id(IJK_t index) const
Definition: Ioss_StructuredBlock.h:178
std::string name(Ioss::GroupingEntity *entity)
Definition: io_info.C:71
size_t get_global_node_offset(IJK_t index) const
Definition: Ioss_StructuredBlock.h:192
Holds metadata for bulk data associated with a GroupingEntity.
Definition: Ioss_Field.h:47
std::vector< ZoneConnectivity > m_zoneConnectivity
Definition: Ioss_StructuredBlock.h:344
EntityType type() const override
Get the EntityType, which indicates the particular type of GroupingEntity this is.
Definition: Ioss_StructuredBlock.h:119
EntityType
The particular type of GroupingEntity.
Definition: Ioss_EntityType.h:39
std::vector< std::pair< size_t, size_t > > m_globalIdMap
Definition: Ioss_StructuredBlock.h:347
size_t get_local_node_offset(int i, int j, int k) const
Definition: Ioss_StructuredBlock.h:216
size_t get_block_local_node_offset(int ii, int jj, int kk) const
Definition: Ioss_StructuredBlock.h:199
BoundaryCondition(const std::string name, const std::string fam_name, const Ioss::IJK_t range_beg, const Ioss::IJK_t range_end)
Definition: Ioss_StructuredBlock.h:61
BoundaryCondition(const std::string name, const Ioss::IJK_t range_beg, const Ioss::IJK_t range_end)
Definition: Ioss_StructuredBlock.h:69
std::vector< char > data
Definition: Ioss_Utils.C:78
size_t get_cell_ids(INT_t *idata, bool add_offset) const
Definition: Ioss_StructuredBlock.h:274