19#include <unordered_map>
37 using ErrorHandler = std::function<void(
const std::ostringstream &)>;
41 template <
typename EntityId,
typename Topology>
101 template <
typename EntityId,
typename Topology>
114 sidesetData.set_error_handler(errorHandler);
123 sidesetData.skin_blocks(data);
124 sidesetData.split(data.elementDataVec);
134 ErrorHandler errorHandler = [](
const std::ostringstream &errmsg) {
154 void parse(
const std::string &parseData)
158 for (
const auto &option : options) {
154 void parse(
const std::string &parseData) {
…}
166 std::ostringstream errmsg;
167 errmsg <<
"Error! Sideset with name: " <<
m_name
168 <<
" is attempting to set element/side pair data *AND* use skinning.";
174 void parse_option(std::string optionName,
const std::string &optionValue)
178 if (optionName ==
"name") {
181 else if (optionName ==
"data") {
184 else if (optionName ==
"split") {
187 else if (optionName ==
"skin") {
191 std::ostringstream errmsg;
192 errmsg <<
"Unrecognized sideset option: " << optionName;
174 void parse_option(std::string optionName,
const std::string &optionValue) {
…}
199 if (!option.empty()) {
202 if (optionTokens.size() != 2) {
203 std::ostringstream errmsg;
204 errmsg <<
"Unrecognized sideset option: " << option;
220 if (sidesetData.size() % 2 != 0) {
221 std::ostringstream errmsg;
222 errmsg <<
"Unmatched element/ordinal pairs in sideset data: " << data;
226 for (
unsigned i = 0; i < sidesetData.size(); i += 2) {
227 EntityId elem = std::stoull(sidesetData[i]);
228 int side = std::stoi(sidesetData[i + 1]);
231 std::ostringstream errmsg;
232 errmsg <<
"Invalid element/ordinal pair {" << sidesetData[i] <<
","
233 << sidesetData[i + 1] <<
"}";
245 if (splitName ==
"none") {
248 else if (splitName ==
"block") {
251 else if (splitName ==
"topology") {
255 std::ostringstream errmsg;
256 errmsg <<
"Unrecognized sideset split type: " << splitName;
std::vector< SidesetData< EntityId, Topology > > m_groupDataVec
Definition Iotm_TextMeshEntityGroup.h:258
void finalize_parse()
Definition Iotm_TextMeshEntityGroup.h:93
virtual void set_error_handler(ErrorHandler errorHandler)
Definition Iotm_TextMeshEntityGroup.h:74
EntityGroup(const std::string &type, const std::string &namePrefix, const std::vector< std::string > &invalidNamePrefixes)
Definition Iotm_TextMeshEntityGroup.h:64
void verify_parse() const
Definition Iotm_TextMeshSideset.h:163
const std::vector< std::string > & get_skin_blocks() const
Definition Iotm_TextMeshSideset.h:148
std::vector< std::pair< EntityId, int > > m_elemSidePairs
Definition Iotm_TextMeshSideset.h:261
void parse(const std::string &parseData)
Definition Iotm_TextMeshSideset.h:154
std::string m_name
Definition Iotm_TextMeshSideset.h:262
ErrorHandler m_errorHandler
Definition Iotm_TextMeshSideset.h:265
void parse_skin_blocks(const std::string &data)
Definition Iotm_TextMeshSideset.h:214
void parse_option(std::string optionName, const std::string &optionValue)
Definition Iotm_TextMeshSideset.h:174
void set_error_handler(ErrorHandler errorHandler)
Definition Iotm_TextMeshSideset.h:140
void parse_split_type(std::string splitName)
Definition Iotm_TextMeshSideset.h:241
SplitType m_splitType
Definition Iotm_TextMeshSideset.h:264
void parse_option_group(const std::string &option)
Definition Iotm_TextMeshSideset.h:197
void parse_element_side_pairs(const std::string &data)
Definition Iotm_TextMeshSideset.h:216
SidesetParser()
Definition Iotm_TextMeshSideset.h:132
std::string get_name()
Definition Iotm_TextMeshSideset.h:142
void parse_name(const std::string &data)
Definition Iotm_TextMeshSideset.h:212
const std::vector< std::pair< EntityId, int > > & get_sideset_data()
Definition Iotm_TextMeshSideset.h:144
SplitType get_split_type()
Definition Iotm_TextMeshSideset.h:146
std::vector< std::string > m_skinnedBlocks
Definition Iotm_TextMeshSideset.h:263
Definition Iotm_TextMeshSidesetSkinner.h:47
Definition Iotm_TextMeshSidesetSplitter.h:73
EntityGroup< SidesetData< EntityId, Topology > > BaseClass
Definition Iotm_TextMeshSideset.h:105
void set_error_handler(ErrorHandler errorHandler) override
Definition Iotm_TextMeshSideset.h:109
void finalize_parse(const TextMeshData< EntityId, Topology > &data)
Definition Iotm_TextMeshSideset.h:118
Sidesets()
Definition Iotm_TextMeshSideset.h:107
Definition Iotm_TextMeshAdjacencyGraph.h:39
std::function< void(const std::ostringstream &)> ErrorHandler
Definition Iotm_TextMeshAdjacencyGraph.h:41
void convert_to_lowercase(std::string &str)
Definition Iotm_TextMeshFuncs.h:101
std::pair< EntityId, int > SidesetDataType
Definition Iotm_TextMeshSideset.h:39
std::vector< std::string > get_tokens(const std::string &str, const std::string &separators)
Definition Iotm_TextMeshFuncs.h:76
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
SplitType
Definition Iotm_TextMeshSidesetSplitter.h:55
@ TOPOLOGY
Definition Iotm_TextMeshSidesetSplitter.h:55
@ NO_SPLIT
Definition Iotm_TextMeshSidesetSplitter.h:55
@ ELEMENT_BLOCK
Definition Iotm_TextMeshSidesetSplitter.h:55
A namespace for the textmesh database format.
Definition Iotm_DatabaseIO.C:95
int64_t EntityId
Definition Iotm_TextMesh.h:33
Definition Iotm_TextMeshDataTypes.h:276
Definition Iotm_TextMeshEntityGroup.h:43
std::string name
Definition Iotm_TextMeshEntityGroup.h:49
std::vector< DataType > data
Definition Iotm_TextMeshEntityGroup.h:51
bool has_name() const
Definition Iotm_TextMeshEntityGroup.h:54
Definition Iotm_TextMeshSidesetSplitter.h:45
std::vector< size_t > sideIndex
Definition Iotm_TextMeshSidesetSplitter.h:51
Definition Iotm_TextMeshSideset.h:43
std::vector< size_t > get_sideblock_indices_local_to_proc(const SideBlockInfo &info, int proc) const
Definition Iotm_TextMeshSideset.h:71
SideBlockInfo get_side_block_info(const std::string &sideBlockName) const
Definition Iotm_TextMeshSideset.h:77
void split(const std::vector< ElementData< EntityId, Topology > > &elementData)
Definition Iotm_TextMeshSideset.h:61
SidesetSplitter< EntityId, Topology > m_sidesetSplitter
Definition Iotm_TextMeshSideset.h:98
void set_split_type(SplitType splitType)
Definition Iotm_TextMeshSideset.h:47
void set_skin_blocks(const std::vector< std::string > &skinBlocks)
Definition Iotm_TextMeshSideset.h:50
SidesetDataType< EntityId > DataType
Definition Iotm_TextMeshSideset.h:44
SplitType get_split_type() const
Definition Iotm_TextMeshSideset.h:48
EntityGroupData< SidesetDataType< EntityId > > BaseClass
Definition Iotm_TextMeshSideset.h:45
void set_error_handler(ErrorHandler errorHandler)
Definition Iotm_TextMeshSideset.h:55
std::vector< SideBlockInfo > get_side_block_info() const
Definition Iotm_TextMeshSideset.h:82
bool has_default_exodus_name() const
Definition Iotm_TextMeshSideset.h:87
void skin_blocks(const TextMeshData< EntityId, Topology > &textMeshData)
Definition Iotm_TextMeshSideset.h:66
SidesetSkinner< EntityId, Topology > m_sidesetSkinner
Definition Iotm_TextMeshSideset.h:97
Definition Iotm_TextMeshDataTypes.h:314