Zellij
All Classes Files Functions Variables Typedefs Enumerations Enumerator Pages
Grid.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 <vector>
9
10#include "Cell.h"
11#include "Ioss_ParallelUtils.h"
12#include "Ioss_Region.h"
13#include "UnitCell.h"
14#include "ZE_SystemInterface.h"
15
17
28class Grid
29{
30public:
33 explicit Grid(SystemInterface &interFace);
34
35 void set_extent(size_t extent_i, size_t extent_j, size_t /* unused */);
36
38
41 Cell &get_cell(size_t i, size_t j)
42 {
43 size_t idx = i * m_gridJ + j;
44 return m_grid[idx];
45 }
46
48 size_t II() const { return m_gridI; }
50 size_t JJ() const { return m_gridJ; }
52 size_t size() const { return m_gridI * m_gridJ; }
53 int parallel_size() const { return m_parallelSize; }
54
56 void set_start_rank(int start_rank) { m_startRank = start_rank; }
57
60 void handle_file_count();
61
63 bool equivalence_nodes() const { return m_equivalenceNodes; }
64
66 bool initialize(size_t i, size_t j, const std::string &key);
67
68 void add_unit_cell(const std::string &key, const std::string &unit_filename, bool ints32bit);
69
72
74 void generate_sidesets();
75
80 template <typename INT> void process(SystemInterface &interFace, INT /* dummy */);
81
82 void decompose(const std::string &method);
83
84 const Ioss::ParallelUtils &util() const { return m_pu; }
85
86 Ioss::Region *output_region(int rank = 0) { return m_outputRegions[rank].get(); }
87
88 bool minimize_open_files(Minimize type) { return (int)m_minimizeOpenFiles & int(type); }
90
91 void set_sideset_names(const std::string &names);
92
93 std::array<std::string, 6> generated_surface_names{
94 {"min_i", "max_i", "min_j", "max_j", "min_k", "max_k"}};
95
96private:
98 template <typename INT> void output_model(INT /*dummy*/);
99 void internal_process();
100
101 void create_output_regions(SystemInterface &interFace);
103
104 void output_nodal_coordinates(const Cell &cell);
105 template <typename INT>
106 void output_block_connectivity(Cell &cell, const std::vector<INT> &node_map);
107 template <typename INT>
108 void output_nodal_communication_map(Cell &cell, const std::vector<INT> &node_map);
109 template <typename INT> void output_element_map(Cell &cell, INT /*dummy*/);
110 template <typename INT> void output_node_map(const Cell &cell, INT /*dummy*/);
111
112 template <typename INT> void output_surfaces(Cell &cell, INT /*dummy*/);
113 template <typename INT> void output_generated_surfaces(Cell &cell, INT /*dummy*/);
114
116 std::vector<std::unique_ptr<Ioss::Region>> m_outputRegions;
117 std::vector<Cell> m_grid{};
118 Ioss::ParallelUtils m_pu{};
119 size_t m_gridI{0};
120 size_t m_gridJ{0};
121 vector3d m_offset{0.0, 0.0, 0.0};
122 double m_scaleFactor{1.0};
124 int m_rankCount{1};
125 int m_startRank{0};
128 bool m_subCycle{false};
129 Minimize m_minimizeOpenFiles{Minimize::NONE}; // 1: Unit, 2: output, 3: all
130 unsigned int m_generatedSideSets{0};
131};
std::map< std::string, std::shared_ptr< UnitCell > > UnitCellMap
Definition UnitCell.h:103
Minimize
Definition ZE_SystemInterface.h:16
std::array< double, 3 > vector3d
Definition ZE_SystemInterface.h:14
Definition Cell.h:38
Definition Grid.h:29
std::vector< Cell > m_grid
Definition Grid.h:117
bool m_subCycle
Definition Grid.h:128
void output_surfaces(Cell &cell, INT)
Definition Grid.C:654
void internal_process()
Definition Grid.C:389
void output_node_map(const Cell &cell, INT)
Definition Grid.C:787
Minimize m_minimizeOpenFiles
Definition Grid.h:129
Cell & get_cell(size_t i, size_t j)
Definition Grid.h:41
void set_extent(size_t extent_i, size_t extent_j, size_t)
Definition Grid.C:151
size_t m_gridJ
Definition Grid.h:120
const Ioss::ParallelUtils & util() const
Definition Grid.h:84
void output_model(INT)
Output node coordinates and element block connectivities for the output mesh.
Definition Grid.C:457
void create_output_regions(SystemInterface &interFace)
Definition Grid.C:234
std::vector< std::unique_ptr< Ioss::Region > > m_outputRegions
Definition Grid.h:116
std::array< std::string, 6 > generated_surface_names
Definition Grid.h:93
void decompose(const std::string &method)
Definition Grid.C:309
Ioss::ParallelUtils m_pu
Definition Grid.h:118
UnitCellMap m_unitCells
Definition Grid.h:115
void set_start_rank(int start_rank)
Set the rank that the should start processing and outputting (used for subcycling)
Definition Grid.h:56
void output_nodal_coordinates(const Cell &cell)
Definition Grid.C:538
size_t size() const
Return total number of cells in the grid / lattice.
Definition Grid.h:52
int parallel_size() const
Definition Grid.h:53
void output_generated_surfaces(Cell &cell, INT)
Definition Grid.C:599
void output_block_connectivity(Cell &cell, const std::vector< INT > &node_map)
Definition Grid.C:715
size_t m_gridI
Definition Grid.h:119
void set_coordinate_offsets()
Specify the X and Y location of each grid cell in the overall grid space.
Definition Grid.C:212
double m_scaleFactor
Definition Grid.h:122
bool m_equivalenceNodes
Which rank to start outputting...
Definition Grid.h:126
int m_rankCount
Number of ranks to decompose for.
Definition Grid.h:124
bool initialize(size_t i, size_t j, const std::string &key)
Create a Cell object referencing the UnitCell specified by key at location (i,j)
Definition Grid.C:158
size_t II() const
Return I extent of the grid / lattice.
Definition Grid.h:48
void handle_file_count()
Definition Grid.C:886
UnitCellMap & unit_cells()
Definition Grid.h:37
unsigned int get_generated_sidesets()
Definition Grid.h:89
void generate_sidesets()
Definition Grid.C:380
bool minimize_open_files(Minimize type)
Definition Grid.h:88
size_t JJ() const
Return J extent of the grid / lattice.
Definition Grid.h:50
bool equivalence_nodes() const
Are nodes at the boundaries of the unit cells equivalenced.
Definition Grid.h:63
void output_element_map(Cell &cell, INT)
Definition Grid.C:836
int m_parallelSize
Definition Grid.h:123
void add_unit_cell(const std::string &key, const std::string &unit_filename, bool ints32bit)
Definition Grid.C:171
bool m_useInternalSidesets
Definition Grid.h:127
void categorize_processor_boundaries()
Definition Grid.C:319
void output_nodal_communication_map(Cell &cell, const std::vector< INT > &node_map)
Definition Grid.C:752
int m_startRank
Number of ranks to process at a time.
Definition Grid.h:125
Ioss::Region * output_region(int rank=0)
Definition Grid.h:86
void set_sideset_names(const std::string &names)
Definition Grid.C:277
vector3d m_offset
Definition Grid.h:121
void process(SystemInterface &interFace, INT)
Definition Grid.C:417
unsigned int m_generatedSideSets
Definition Grid.h:130
Definition ZE_SystemInterface.h:19