MOAB: Mesh Oriented datABase
(version 5.4.1)
|
Read targets from tag data. More...
#include <WeightReader.hpp>
Public Member Functions | |
MESQUITE_EXPORT | WeightReader (std::string tag_base_name="MSQ_TARGET_WEIGHT") |
virtual MESQUITE_EXPORT | ~WeightReader () |
virtual MESQUITE_EXPORT double | get_weight (PatchData &pd, size_t element, Sample Sample, MsqError &err) |
Get target metric weight. | |
Private Member Functions | |
virtual void | notify_patch_destroyed (WeightReaderData &data) |
virtual void | notify_new_patch (PatchData &pd, WeightReaderData &data) |
virtual void | notify_sub_patch (PatchData &pd, WeightReaderData &data, PatchData &subpatch, const size_t *vertex_map, const size_t *element_map, MsqError &err) |
Private Attributes | |
std::string | tagBaseName |
Read targets from tag data.
Definition at line 61 of file WeightReader.hpp.
MBMesquite::WeightReader::WeightReader | ( | std::string | tag_base_name = "MSQ_TARGET_WEIGHT" | ) |
Definition at line 66 of file WeightReader.cpp.
: tagBaseName( name ) {}
MBMesquite::WeightReader::~WeightReader | ( | ) | [virtual] |
Definition at line 68 of file WeightReader.cpp.
{}
double MBMesquite::WeightReader::get_weight | ( | PatchData & | pd, |
size_t | element, | ||
Sample | sample, | ||
MsqError & | err | ||
) | [virtual] |
Get target metric weight.
pd | The current PatchData |
element | The index an element within the patch data. |
sample | The sample point in the element. |
Implements MBMesquite::WeightCalculator.
Definition at line 70 of file WeightReader.cpp.
References MBMesquite::WeightReaderData::elementIndex, MBMesquite::ExtraDataUser< WeightReaderData >::get_data(), MBMesquite::PatchData::get_element_handles_array(), MBMesquite::PatchData::get_mesh(), MBMesquite::PatchData::get_samples(), MBMesquite::get_tag(), MBMesquite::WeightReaderData::handles, MSQ_CHKERR, MSQ_ERRZERO, MBMesquite::NodeSet::num_before(), MBMesquite::NodeSet::num_nodes(), MBMesquite::Mesh::tag_get_element_data(), tagBaseName, and MBMesquite::WeightReaderData::weights.
Referenced by TargetReadWriteTest::read_write_weights().
{ WeightReaderData& data = get_data( pd ); // calculate index of sample in array NodeSet all_samples = pd.get_samples( element ); unsigned offset = all_samples.num_before( sample ); if( !data.weights.empty() && data.elementIndex == element ) { assert( offset < data.weights.size() ); return data.weights[offset]; } const unsigned num_samples = all_samples.num_nodes(); const unsigned handle_idx = num_samples - 1; // get the tag handle const TagHandle INVALID_HANDLE = (TagHandle)-1; if( data.handles.size() <= handle_idx ) data.handles.resize( handle_idx + 1, INVALID_HANDLE ); TagHandle& tag_handle = data.handles[handle_idx]; if( tag_handle == INVALID_HANDLE ) { tag_handle = get_tag( pd.get_mesh(), num_samples, tagBaseName.c_str(), err ); MSQ_ERRZERO( err ); assert( tag_handle != INVALID_HANDLE ); } // get the tag data data.weights.resize( num_samples ); pd.get_mesh()->tag_get_element_data( tag_handle, 1, pd.get_element_handles_array() + element, &data.weights[0], err ); if( MSQ_CHKERR( err ) ) { data.weights.clear(); return false; } data.elementIndex = element; assert( offset < num_samples ); return data.weights[offset]; }
void MBMesquite::WeightReader::notify_new_patch | ( | PatchData & | pd, |
WeightReaderData & | data | ||
) | [private, virtual] |
Implements MBMesquite::ExtraDataUser< WeightReaderData >.
Definition at line 119 of file WeightReader.cpp.
References MBMesquite::WeightReaderData::weights.
{ data.weights.clear(); }
void MBMesquite::WeightReader::notify_patch_destroyed | ( | WeightReaderData & | data | ) | [private, virtual] |
Implements MBMesquite::ExtraDataUser< WeightReaderData >.
Definition at line 113 of file WeightReader.cpp.
References MBMesquite::WeightReaderData::handles, and MBMesquite::WeightReaderData::weights.
{ data.handles.clear(); data.weights.clear(); }
void MBMesquite::WeightReader::notify_sub_patch | ( | PatchData & | pd, |
WeightReaderData & | data, | ||
PatchData & | subpatch, | ||
const size_t * | vertex_map, | ||
const size_t * | element_map, | ||
MsqError & | err | ||
) | [private, virtual] |
Implements MBMesquite::ExtraDataUser< WeightReaderData >.
Definition at line 124 of file WeightReader.cpp.
References MBMesquite::ExtraDataUser< WeightReaderData >::get_data(), and MBMesquite::WeightReaderData::handles.
{ WeightReaderData& other = get_data( subpatch ); if( other.handles.empty() ) other.handles = data.handles; }
std::string MBMesquite::WeightReader::tagBaseName [private] |
Definition at line 81 of file WeightReader.hpp.
Referenced by get_weight().