19 #define SeriesRecorderFunctionBegin \
21 MOFEM_LOG_CHANNEL("WORLD"); \
22 MOFEM_LOG_CHANNEL("SYNC"); \
23 MOFEM_LOG_FUNCTION(); \
24 MOFEM_LOG_TAG("SYNC", "SeriesRecorder"); \
25 MOFEM_LOG_TAG("WORLD", "SeriesRecorder")
39 : cOre(const_cast<
Core &>(core)) {}
46 const int def_val_len = 0;
47 CHKERR moab.tag_get_handle(
49 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_VARLEN | MB_TAG_SPARSE, NULL);
65 const int def_val_len = 0;
66 CHKERR moab.tag_get_handle(
68 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_VARLEN | MB_TAG_SPARSE, NULL);
70 CHKERR moab.get_entities_by_type(0, MBENTITYSET, meshsets,
false);
71 for (Range::iterator mit = meshsets.begin(); mit != meshsets.end(); mit++) {
76 if (
rval == MB_SUCCESS) {
77 std::pair<Series_multiIndex::iterator, bool>
p =
80 MOFEM_LOG(
"SYNC", Sev::inform) <<
"read series " << *
p.first;
84 for (Series_multiIndex::iterator sit =
sEries.begin(); sit !=
sEries.end();
87 CHKERR sit->get_nb_steps(moab, nb_steps);
89 for (; ss < nb_steps; ss++) {
90 std::pair<SeriesStep_multiIndex::iterator, bool>
p =
93 MOFEM_LOG(
"SYNC", Sev::inform) <<
"add series step " << *
p.first;
109 CHKERR moab.create_meshset(MESHSET_SET, meshset);
110 void const *tag_data[] = {series_name.c_str()};
112 tag_sizes[0] = series_name.size();
114 std::pair<Series_multiIndex::iterator, bool>
p =
117 SETERRQ1(PETSC_COMM_SELF, 1,
"series recorder <%s> is already there",
118 series_name.c_str());
129 SeriesStep_multiIndex::index<SeriesName_mi_tag>::type::iterator ssit, hi_ssit;
133 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit;
137 "series recorder <%s> not exist and can be deleted",
138 series_name.c_str());
141 CHKERR moab.tag_delete(sit->th_SeriesTime);
142 CHKERR moab.tag_delete(sit->th_SeriesDataHandles);
143 CHKERR moab.tag_delete(sit->th_SeriesDataUIDs);
144 CHKERR moab.tag_delete(sit->th_SeriesData);
146 std::vector<EntityHandle> contained;
147 CHKERR moab.get_contained_meshsets(series_meshset, contained);
148 CHKERR moab.remove_entities(series_meshset, &contained[0], contained.size());
149 CHKERR moab.delete_entities(&contained[0], contained.size());
150 CHKERR moab.delete_entities(&series_meshset, 1);
159 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
163 "series recorder <%s> not exist", serie_name.c_str());
183 const std::string &problem_name,
195 const std::string &field_name,
201 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
204 SETERRQ1(PETSC_COMM_SELF,
MOFEM_NOT_FOUND,
"serie recorder <%s> not exist",
213 SETERRQ1(PETSC_COMM_SELF,
MOFEM_NOT_FOUND,
"field <%s> not exist", field_name.c_str());
217 for (; dit != hi_dit; dit++) {
218 const BitRefLevel &dof_bit = (*dit)->getBitRefLevel();
219 if ((dof_bit & mask) != dof_bit)
221 if ((dof_bit &
bit).any()) {
223 ShortId uid = (*dit)->getNonNonuniqueShortId();
234 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
237 SETERRQ1(PETSC_COMM_SELF, 1,
"serie recorder <%s> not exist",
248 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
251 SETERRQ1(PETSC_COMM_SELF, 1,
"serie recorder <%s> not exist",
264 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
267 SETERRQ1(PETSC_COMM_SELF, 1,
"serie recorder <%s> not exist",
282 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
285 SETERRQ1(PETSC_COMM_SELF, 1,
"serie recorder <%s> not exist",
290 CHKERR sit->get_nb_steps(moab, nb_steps);
292 for (; ss < nb_steps; ss++) {
303 MOFEM_LOG(
"SYNC", Sev::inform) <<
"series " << sit;
306 MOFEM_LOG(
"SYNC", Sev::inform) <<
"series steps " << ssit;
315 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
323 const int step_number) {
332 boost::make_tuple(serie_name, step_number));
334 SETERRQ2(PETSC_COMM_SELF, 1,
"series <%s> and step %d not found",
335 serie_name.c_str(), step_number);
341 SeriesStep_multiIndex::index<SeriesName_mi_tag>::type::iterator
346 SeriesStep_multiIndex::index<SeriesName_mi_tag>::type::iterator
#define SeriesRecorderFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
multi_index_container< boost::shared_ptr< DofEntity >, indexed_by< ordered_unique< tag< Unique_mi_tag >, const_mem_fun< DofEntity, UId, &DofEntity::getLocalUniqueId > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< DofEntity, EntityHandle, &DofEntity::getEnt > > > > DofEntity_multiIndex
MultiIndex container keeps DofEntity.
virtual const DofEntity_multiIndex * get_dofs() const =0
Get the dofs object.
virtual const Problem * get_problem(const std::string problem_name) const =0
Get the problem object.
#define MOFEM_LOG(channel, severity)
Log.
#define MOFEM_LOG_CHANNEL(channel)
Set and reset channel.
virtual MoFEMErrorCode load_series_data(const std::string &serie_name, const int step_number)
virtual MoFEMErrorCode print_series_steps()
virtual MoFEMErrorCode finalize_series_recorder(const std::string &serie_name)
virtual bool check_series(const std::string &name) const
check if series is in database
virtual MoFEMErrorCode record_problem(const std::string &serie_name, const Problem *problemPtr, RowColData rc)
virtual MoFEMErrorCode record_field(const std::string &serie_name, const std::string &field_name, const BitRefLevel &bit, const BitRefLevel &mask)
virtual MoFEMErrorCode initialize_series_recorder(const std::string &serie_name)
virtual MoFEMErrorCode add_series_recorder(const std::string &series_name)
virtual MoFEMErrorCode record_begin(const std::string &serie_name)
virtual MoFEMErrorCode record_end(const std::string &serie_name, double time=0)
virtual MoFEMErrorCode delete_recorder_series(const std::string &series_name)
static MoFEMErrorCodeGeneric< moab::ErrorCode > rval
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
double FieldData
Field data type.
std::bitset< BITREFLEVEL_SIZE > BitRefLevel
Bit structure attached to each entity identifying to what mesh entity is attached.
int ShortId
Unique Id in the field.
implementation of Data Operators for Forces and Sources
DeprecatedCoreInterface Interface
virtual FieldBitNumber get_field_bit_number(const std::string name) const =0
get field bit number
virtual moab::Interface & get_moab()=0
virtual MPI_Comm & get_comm() const =0
Deprecated interface functions.
static UId getHiBitNumberUId(const FieldBitNumber bit_number)
static UId getLoBitNumberUId(const FieldBitNumber bit_number)
Structure for recording (time) series.
Structure for keeping time and step.
keeps basic data about problem
boost::shared_ptr< NumeredDofEntity_multiIndex > numeredRowDofsPtr
store DOFs on rows for this problem
boost::shared_ptr< NumeredDofEntity_multiIndex > numeredColDofsPtr
store DOFs on columns for this problem
virtual SeriesStep_multiIndex::index< SeriesName_mi_tag >::type::iterator get_series_steps_byName_begin(const std::string &name)
Series_multiIndex sEries
recorded series
MoFEMErrorCode clearMap()
clear multi-index container
SeriesStep_multiIndex seriesSteps
recorded series steps
MoFEMErrorCode query_interface(boost::typeindex::type_index type_index, UnknownInterface **iface) const
SeriesRecorder(const MoFEM::Core &core)
Tag th_SeriesName
Recorded series name.
MoFEMErrorCode getTags(int verb=-1)
get tags handlers used on meshsets
virtual SeriesStep_multiIndex::index< SeriesName_mi_tag >::type::iterator get_series_steps_byName_end(const std::string &name)
MoFEMErrorCode initialiseDatabaseFromMesh(int verb=0)
base class for all interface classes