Zellij
All Classes Files Functions Variables Typedefs Enumerations Enumerator Pages
UnitCell.h
Go to the documentation of this file.
1// Copyright(C) 2021, 2022, 2023 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#pragma once
7
8#include <array>
9#include <map>
10#include <string>
11#include <vector>
12
13#include "Ioss_Region.h"
14
16
17enum class Bnd { MIN_I = 0, MAX_I = 1, MIN_J = 2, MAX_J = 3, MIN_K = 4, MAX_K = 5 };
18enum class Flg { MIN_I = 1, MAX_I = 4, MIN_J = 2, MAX_J = 8, MIN_K = 16, MAX_K = 32 };
19
21{
27 GeneratedSideBlock() = default;
29
30 std::map<std::string, std::vector<int64_t>> m_faces;
31
32 size_t size() const
33 {
34 size_t count = 0;
35 for (const auto &faces : m_faces) {
36 count += faces.second.size();
37 }
38 return count;
39 }
40};
41
43{
44public:
45 explicit UnitCell(std::shared_ptr<Ioss::Region> region);
46 UnitCell(const UnitCell &) = delete;
47
55 std::vector<int> categorize_nodes(bool neighbor_i, bool neighbor_j, bool all_faces = false) const;
56
57 std::shared_ptr<Ioss::Region> m_region{nullptr};
58
68 std::vector<int64_t> min_I_face{};
69 std::vector<int64_t> max_I_face{};
70 std::vector<int64_t> min_J_face{};
71 std::vector<int64_t> max_J_face{};
73
78 std::pair<double, double> minmax_x{};
79 std::pair<double, double> minmax_y{};
81
82 void generate_boundary_faces(unsigned int which_faces);
83
85 void categorize_z_nodes(std::vector<int> &categorized_nodes);
86
87 std::array<GeneratedSideBlock, 6> boundary_blocks{};
88
97 size_t cell_II{};
98 size_t cell_JJ{};
99 size_t cell_KK{};
101};
102
103using UnitCellMap = std::map<std::string, std::shared_ptr<UnitCell>>;
Bnd
Definition UnitCell.h:17
@ MIN_K
@ MAX_J
@ MAX_I
@ MIN_I
@ MAX_K
@ MIN_J
std::map< std::string, std::shared_ptr< UnitCell > > UnitCellMap
Definition UnitCell.h:103
Flg
Definition UnitCell.h:18
Definition UnitCell.h:43
std::array< GeneratedSideBlock, 6 > boundary_blocks
Definition UnitCell.h:87
UnitCell(const UnitCell &)=delete
std::vector< int64_t > max_I_face
Definition UnitCell.h:69
std::vector< int64_t > max_J_face
Definition UnitCell.h:71
size_t cell_KK
Definition UnitCell.h:99
size_t cell_JJ
Definition UnitCell.h:98
std::vector< int > categorize_nodes(bool neighbor_i, bool neighbor_j, bool all_faces=false) const
Definition UnitCell.C:197
std::pair< double, double > minmax_y
Definition UnitCell.h:79
std::pair< double, double > minmax_x
Definition UnitCell.h:78
std::vector< int64_t > min_J_face
Definition UnitCell.h:70
void categorize_z_nodes(std::vector< int > &categorized_nodes)
Used by generate_boundary_faces() to categorize nodes on the +/- Z faces of unit cell.
Definition UnitCell.C:232
std::shared_ptr< Ioss::Region > m_region
Definition UnitCell.h:57
void generate_boundary_faces(unsigned int which_faces)
Definition UnitCell.C:254
std::vector< int64_t > min_I_face
Definition UnitCell.h:68
size_t cell_II
Definition UnitCell.h:97
Definition UnitCell.h:21
size_t size() const
Definition UnitCell.h:32
GeneratedSideBlock()=default
GeneratedSideBlock(const GeneratedSideBlock &)=delete
std::map< std::string, std::vector< int64_t > > m_faces
Definition UnitCell.h:30