47 ->
const Eigen::Matrix<double, dim, 1> &
50 const auto nIter(
nodes().find((xID)(0)));
51 assert((nIter !=
nodes().
end()) &&
"MESH VERTEX NOT FOUND IN N/N_x.txt.");
60 nodeReader.read(meshID,
true);
61 for (
const auto &node : nodeReader)
63 this->nodes().emplace(node.first, Eigen::Map<
const Eigen::Matrix<double, dim, 1>>(node.second.data()));
65 assert(nodeReader.size() == this->nodes().size());
67 IDreader<1, dim + 2, size_t> elementReader(
"T/T");
68 elementReader.read(meshID,
true);
69 for (
const auto &eIter : elementReader)
72 for (
int d = 0; d < dim + 1; ++d)
76 size_t regionID(eIter.second[dim + 1]);
84 const Eigen::Matrix<double, dim, 1> &x0)
87 GmshReader reader(meshFileName, Eigen::Matrix3d::Identity(), Eigen::Vector3d::Zero());
88 for (
const auto &node : reader.
nodes())
90 this->
nodes().emplace(node.first,
A * (node.second.template head<dim>() - x0));
92 constexpr int linearType = dim == 3 ? 4 : (dim == 2 ? 2 : 1);
93 constexpr int quadraticType = dim == 3 ? 11 : (dim == 2 ? 9 : 8);
94 for (
const auto &entry : reader.
elements())
96 const auto &element = entry.second;
97 if (element.type == linearType || element.type == quadraticType)
99 if (element.nodeIDs.size() < dim + 1 || element.tags.size() < 2)
101 throw std::runtime_error(
"Mesh element is missing vertices or region tag");
104 for (
int k = 0;
k <= dim; ++
k)
108 this->
elements().emplace(entry.first, std::make_pair(
const std::map< size_t, Eigen::Vector3d > & nodes() const
const std::map< size_t, GmshElement > & elements() const
function infiniteDisplacement syms Ax Ay Az Bx By Bz qx qy qz u L x y z real A
const Eigen::Matrix< double, dim, 1 > & get_P0(const typename SimplexTraits< dim, 0 >::SimplexIDType &xID)
SimplexReaderBase< dim > & simplexReader()
const ElementContainerType & elements() const
const NodeContainerType & nodes() const
void read(const int &meshID)
SimplexID< nVertices > SimplexIDType