Skip to content

Commit a5f554c

Browse files
committed
Exodus: reorder indices for hex27
1 parent 185ceb3 commit a5f554c

File tree

6 files changed

+131
-294
lines changed

6 files changed

+131
-294
lines changed

apps/pre_exodus/4C_pre_exodus_validate.cpp

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "4C_global_legacy_module.hpp"
1616
#include "4C_io_input_file.hpp"
1717
#include "4C_linalg_utils_densematrix_multiply.hpp"
18+
#include "4C_utils_enum.hpp"
1819

1920
FOUR_C_NAMESPACE_OPEN
2021

@@ -81,14 +82,15 @@ void EXODUS::validate_mesh_element_jacobians(Core::IO::Exodus::Mesh& mymesh)
8182

8283
for (const auto& [eb_id, eb] : mymesh.get_element_blocks())
8384
{
84-
const Core::FE::CellType distype = shape_to_cell_type(eb.get_shape());
85+
const Core::FE::CellType distype = eb.get_shape();
8586
// check and rewind if necessary
8687
validate_element_jacobian(mymesh, distype, eb);
8788
// full check at all gausspoints
8889
int invalid_dets = validate_element_jacobian_fullgp(mymesh, distype, eb);
90+
using EnumTools::operator<<;
8991
if (invalid_dets > 0)
9092
std::cout << invalid_dets << " negative Jacobian determinants in EB of shape "
91-
<< shape_to_string(eb.get_shape()) << std::endl;
93+
<< eb.get_shape() << std::endl;
9294
}
9395
return;
9496
}
@@ -144,29 +146,17 @@ void EXODUS::validate_element_jacobian(Core::IO::Exodus::Mesh& mymesh,
144146
Core::LinAlg::SerialDenseMatrix deriv(NSD, iel);
145147

146148
// go through all elements
147-
std::shared_ptr<std::map<int, std::vector<int>>> eleconn = eb.get_ele_conn();
148-
std::map<int, std::vector<int>>::iterator i_ele;
149+
const std::map<int, std::vector<int>>& eleconn = eb.get_ele_conn();
149150
int numrewindedeles = 0;
150-
for (i_ele = eleconn->begin(); i_ele != eleconn->end(); ++i_ele)
151+
for (auto i_ele = eleconn.begin(); i_ele != eleconn.end(); ++i_ele)
151152
{
152-
int rewcount = 0;
153153
for (int igp = 0; igp < intpoints.nquad; ++igp)
154154
{
155155
Core::FE::shape_function_3d_deriv1(
156156
deriv, intpoints.qxg[igp][0], intpoints.qxg[igp][1], intpoints.qxg[igp][2], distype);
157157
if (!positive_ele(i_ele->first, i_ele->second, mymesh, deriv))
158158
{
159-
// rewind the element nodes
160-
if (rewcount == 0)
161-
{
162-
i_ele->second = rewind_ele(i_ele->second, distype);
163-
numrewindedeles++;
164-
}
165-
// double check
166-
if (!positive_ele(i_ele->first, i_ele->second, mymesh, deriv))
167-
FOUR_C_THROW(
168-
"No proper rewinding for element id {} at gauss point {}", i_ele->first, igp);
169-
rewcount++;
159+
FOUR_C_THROW("Negative Jacobian for element id {} at gauss point {}", i_ele->first, igp);
170160
}
171161
}
172162
}
@@ -231,9 +221,9 @@ int EXODUS::validate_element_jacobian_fullgp(Core::IO::Exodus::Mesh& mymesh,
231221

232222
// go through all elements
233223
int invalids = 0;
234-
std::shared_ptr<std::map<int, std::vector<int>>> eleconn = eb.get_ele_conn();
224+
const std::map<int, std::vector<int>>& eleconn = eb.get_ele_conn();
235225
std::map<int, std::vector<int>>::iterator i_ele;
236-
for (i_ele = eleconn->begin(); i_ele != eleconn->end(); ++i_ele)
226+
for (auto i_ele = eleconn.begin(); i_ele != eleconn.end(); ++i_ele)
237227
{
238228
for (int igp = 0; igp < intpoints.nquad; ++igp)
239229
{

apps/pre_exodus/4C_pre_exodus_writedat.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -337,8 +337,8 @@ std::set<int> EXODUS::get_ns_from_bc_entity(
337337
{
338338
std::set<int> allnodes;
339339
const auto& eb = m.get_element_block(e.id);
340-
std::shared_ptr<const std::map<int, std::vector<int>>> eles = eb.get_ele_conn();
341-
for (const auto& ele : *eles)
340+
const std::map<int, std::vector<int>>& eles = eb.get_ele_conn();
341+
for (const auto& ele : eles)
342342
{
343343
const std::vector<int> nodes = ele.second;
344344
for (auto node : nodes) allnodes.insert(node);
@@ -481,14 +481,14 @@ void EXODUS::write_dat_eles(
481481
void EXODUS::dat_eles(const Core::IO::Exodus::ElementBlock& eb, const EXODUS::ElemDef& acte,
482482
int& startele, std::ostream& outfile, const int eb_id)
483483
{
484-
auto eles = eb.get_ele_conn();
485-
for (const auto& ele : *eles)
484+
const auto& eles = eb.get_ele_conn();
485+
for (const auto& ele : eles)
486486
{
487487
std::stringstream dat; // first build up the std::string for actual element line
488488
const std::vector<int> nodes = ele.second;
489489
dat << " " << startele;
490490
dat << " " << acte.ename; // e.g. "SOLID"
491-
dat << " " << Core::FE::cell_type_to_string(shape_to_cell_type(eb.get_shape()));
491+
dat << " " << Core::FE::cell_type_to_string(eb.get_shape());
492492
dat << " ";
493493
for (auto node : nodes) dat << node << " ";
494494
dat << " " << acte.desc; // e.g. "MAT 1"

0 commit comments

Comments
 (0)