7#include "iotm_export.h"
21#include <unordered_map>
35 using ErrorHandler = std::function<void(
const std::ostringstream &)>;
77 unsigned get(
const std::string &name)
const
77 unsigned get(
const std::string &name)
const {
…}
84 std::string
get(
unsigned id)
const
84 std::string
get(
unsigned id)
const {
…}
103 std::vector<std::string> names;
106 for (
const auto &iter :
m_parts) {
107 names.push_back(iter.second);
135 assign(name, result.first);
140 unsigned nextPartId = 1;
153 void assign(
const std::string &name,
unsigned id)
const
153 void assign(
const std::string &name,
unsigned id)
const {
…}
163 if (
m_ids[name] !=
id) {
164 std::ostringstream errmsg;
165 errmsg <<
"Cannot assign part '" << name <<
"' two different ids: " <<
m_ids[name]
172 std::ostringstream errmsg;
173 errmsg <<
"Part id " <<
id <<
" has already been assigned, cannot assign it to part '"
184 auto it =
m_ids.find(name);
185 if (it ==
m_ids.end()) {
186 std::ostringstream errmsg;
187 errmsg <<
"PartIdMapping has no ID for invalid part name " << name;
197 std::ostringstream errmsg;
198 errmsg <<
"PartIdMapping has no part name for invalid id " << id;
205 mutable std::unordered_map<std::string, unsigned>
m_ids;
206 mutable std::map<unsigned, std::string>
m_parts;
225 std::ostringstream errmsg;
226 errmsg <<
"Could not find node id " << nodeId;
234 const std::vector<double> &coordinates)
236 if (!coordinates.empty()) {
249 const std::vector<double> &coordinates)
251 if (coordinates.size() != nodeIds.size() * spatialDim) {
252 std::ostringstream errmsg;
253 errmsg <<
"Number of coordinates: " << coordinates.size()
254 <<
", Number of nodes: " << nodeIds.size()
255 <<
", Spatial dimension: " << spatialDim;
261 const std::vector<double> &coordinates)
263 std::vector<double>::const_iterator coordIter = coordinates.begin();
264 for (
const EntityId &nodeId : nodeIds) {
265 m_nodalCoords[nodeId] = std::vector<double>(coordIter, coordIter + spatialDim);
266 coordIter += spatialDim;
275 template <
typename EntityId,
typename Topology>
struct ElementData
275 template <
typename EntityId,
typename Topology>
struct ElementData {
…};
307 template <
typename EntityId,
typename Topology>
class Sidesets;
309 template <
typename EntityId>
class Nodesets;
311 template <
typename EntityId>
class Assemblies;
Definition Iotm_TextMeshAssembly.h:66
Definition Iotm_TextMeshDataTypes.h:213
void set_coordinate_data(const unsigned spatialDim, const std::set< EntityId > &nodeIds, const std::vector< double > &coordinates)
Definition Iotm_TextMeshDataTypes.h:233
std::unordered_map< EntityId, std::vector< double > > m_nodalCoords
Definition Iotm_TextMeshDataTypes.h:271
void validate_num_coordinates(const unsigned spatialDim, const std::set< EntityId > &nodeIds, const std::vector< double > &coordinates)
Definition Iotm_TextMeshDataTypes.h:248
ErrorHandler m_errorHandler
Definition Iotm_TextMeshDataTypes.h:272
void fill_coordinate_map(const unsigned spatialDim, const std::set< EntityId > &nodeIds, const std::vector< double > &coordinates)
Definition Iotm_TextMeshDataTypes.h:260
void set_error_handler(ErrorHandler errorHandler)
Definition Iotm_TextMeshDataTypes.h:243
bool m_hasCoordinateData
Definition Iotm_TextMeshDataTypes.h:270
const std::vector< double > & operator[](const EntityId nodeId) const
Definition Iotm_TextMeshDataTypes.h:220
bool has_coordinate_data() const
Definition Iotm_TextMeshDataTypes.h:245
Coordinates()
Definition Iotm_TextMeshDataTypes.h:215
Definition Iotm_TextMeshNodeset.h:45
Definition Iotm_TextMeshDataTypes.h:58
std::vector< std::string > m_partNames
Definition Iotm_TextMeshDataTypes.h:204
unsigned get_part_id(const std::string &name) const
Definition Iotm_TextMeshDataTypes.h:182
void assign_ids() const
Definition Iotm_TextMeshDataTypes.h:138
ErrorHandler m_errorHandler
Definition Iotm_TextMeshDataTypes.h:209
bool is_registered(const std::string &name) const
Definition Iotm_TextMeshDataTypes.h:113
void assign(const std::string &name, unsigned id) const
Definition Iotm_TextMeshDataTypes.h:153
unsigned get(const std::string &name) const
Definition Iotm_TextMeshDataTypes.h:77
void register_part_name(const std::string &name)
Definition Iotm_TextMeshDataTypes.h:65
void validate_name_and_id(const std::string &name, unsigned id) const
Definition Iotm_TextMeshDataTypes.h:160
const std::string get_group_type() const
Definition Iotm_TextMeshDataTypes.h:119
std::string get(unsigned id) const
Definition Iotm_TextMeshDataTypes.h:84
void handle_block_part(const std::string &name)
Definition Iotm_TextMeshDataTypes.h:128
unsigned size() const
Definition Iotm_TextMeshDataTypes.h:91
std::string get_part_name(unsigned id) const
Definition Iotm_TextMeshDataTypes.h:193
std::map< unsigned, std::string > m_parts
Definition Iotm_TextMeshDataTypes.h:206
std::unordered_map< std::string, unsigned > m_ids
Definition Iotm_TextMeshDataTypes.h:205
PartIdMapping()
Definition Iotm_TextMeshDataTypes.h:60
void finalize_parse()
Definition Iotm_TextMeshDataTypes.h:121
void set_error_handler(ErrorHandler errorHandler)
Definition Iotm_TextMeshDataTypes.h:117
void register_part_name_with_id(const std::string &name, unsigned id)
Definition Iotm_TextMeshDataTypes.h:71
const std::vector< std::string > & get_part_names() const
Definition Iotm_TextMeshDataTypes.h:115
std::vector< std::string > get_part_names_sorted_by_id() const
Definition Iotm_TextMeshDataTypes.h:98
bool m_idsAssigned
Definition Iotm_TextMeshDataTypes.h:207
bool is_assigned(unsigned id) const
Definition Iotm_TextMeshDataTypes.h:180
Definition Iotm_TextMeshSideset.h:103
Definition Iotm_TextMeshDataTypes.h:38
T Topology
Definition Iotm_TextMeshDataTypes.h:40
std::unordered_map< std::string, Topology > m_nameToTopology
Definition Iotm_TextMeshDataTypes.h:54
virtual ~TopologyMapping()
Definition Iotm_TextMeshDataTypes.h:42
virtual void initialize_topology_map()=0
virtual Topology invalid_topology() const =0
Topology topology(const std::string &textMeshName) const
Definition Iotm_TextMeshDataTypes.h:44
Definition Iotm_TextMeshAdjacencyGraph.h:39
std::function< void(const std::ostringstream &)> ErrorHandler
Definition Iotm_TextMeshAdjacencyGraph.h:41
void default_error_handler(const std::ostringstream &message)
Definition Iotm_TextMeshFuncs.h:40
std::pair< unsigned, bool > get_id_from_part_name(const std::string &name, const std::string &prefix)
Definition Iotm_TextMeshFuncs.h:126
A namespace for the textmesh database format.
Definition Iotm_DatabaseIO.C:95
text_mesh::Assemblies< EntityId > Assemblies
Definition Iotm_TextMesh.h:40
TopologyMapEntry Topology
Definition Iotm_TextMesh.h:34
int64_t EntityId
Definition Iotm_TextMesh.h:33
Definition Iotm_TextMeshDataTypes.h:287
bool operator()(const EntityId lhs, const EntityId rhs)
Definition Iotm_TextMeshDataTypes.h:304
bool operator()(const ElementData< EntityId, Topology > &lhs, const EntityId rhs)
Definition Iotm_TextMeshDataTypes.h:294
bool operator()(const EntityId lhs, const ElementData< EntityId, Topology > &rhs)
Definition Iotm_TextMeshDataTypes.h:299
bool operator()(const ElementData< EntityId, Topology > &lhs, const ElementData< EntityId, Topology > &rhs)
Definition Iotm_TextMeshDataTypes.h:288
Definition Iotm_TextMeshDataTypes.h:276
Topology topology
Definition Iotm_TextMeshDataTypes.h:279
std::string partName
Definition Iotm_TextMeshDataTypes.h:281
int proc
Definition Iotm_TextMeshDataTypes.h:277
EntityId identifier
Definition Iotm_TextMeshDataTypes.h:278
std::vector< EntityId > nodeIds
Definition Iotm_TextMeshDataTypes.h:280
std::set< int > m_emptyProcs
Definition Iotm_TextMeshDataTypes.h:363
std::set< EntityId > nodeIds
Definition Iotm_TextMeshDataTypes.h:318
Assemblies< EntityId > assemblies
Definition Iotm_TextMeshDataTypes.h:322
Nodesets< EntityId > nodesets
Definition Iotm_TextMeshDataTypes.h:321
std::vector< ElementData< EntityId, Topology > > elementDataVec
Definition Iotm_TextMeshDataTypes.h:316
const std::set< int > & procs_for_node(const EntityId nodeId) const
Definition Iotm_TextMeshDataTypes.h:347
std::set< EntityId > m_emptyNodes
Definition Iotm_TextMeshDataTypes.h:364
PartIdMapping partIds
Definition Iotm_TextMeshDataTypes.h:317
void associate_node_with_proc(const EntityId nodeId, int proc)
Definition Iotm_TextMeshDataTypes.h:354
unsigned spatialDim
Definition Iotm_TextMeshDataTypes.h:315
Coordinates< EntityId > coords
Definition Iotm_TextMeshDataTypes.h:319
TextMeshData()
Definition Iotm_TextMeshDataTypes.h:324
void add_element(const ElementData< EntityId, Topology > &elem)
Definition Iotm_TextMeshDataTypes.h:326
std::unordered_map< int, std::set< EntityId > > m_nodesOnProc
Definition Iotm_TextMeshDataTypes.h:361
std::unordered_map< EntityId, std::set< int > > m_procsForNode
Definition Iotm_TextMeshDataTypes.h:360
unsigned num_nodes_on_proc(int proc) const
Definition Iotm_TextMeshDataTypes.h:341
const std::set< EntityId > & nodes_on_proc(int proc) const
Definition Iotm_TextMeshDataTypes.h:335
Sidesets< EntityId, Topology > sidesets
Definition Iotm_TextMeshDataTypes.h:320