6#define SeriesRecorderFunctionBegin \
8 MOFEM_LOG_CHANNEL("WORLD"); \
9 MOFEM_LOG_CHANNEL("SYNC"); \
10 MOFEM_LOG_FUNCTION(); \
11 MOFEM_LOG_TAG("SYNC", "SeriesRecorder"); \
12 MOFEM_LOG_TAG("WORLD", "SeriesRecorder")
26 : cOre(const_cast<
Core &>(core)) {}
31 moab::Interface &moab = m_field.
get_moab();
33 const int def_val_len = 0;
34 CHKERR moab.tag_get_handle(
36 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_VARLEN | MB_TAG_SPARSE, NULL);
49 moab::Interface &moab = m_field.
get_moab();
52 const int def_val_len = 0;
53 CHKERR moab.tag_get_handle(
55 MB_TAG_CREAT | MB_TAG_BYTES | MB_TAG_VARLEN | MB_TAG_SPARSE, NULL);
57 CHKERR moab.get_entities_by_type(0, MBENTITYSET, meshsets,
false);
58 for (Range::iterator mit = meshsets.begin(); mit != meshsets.end(); mit++) {
63 if (
rval == MB_SUCCESS) {
64 std::pair<Series_multiIndex::iterator, bool>
p =
67 MOFEM_LOG(
"SYNC", Sev::inform) <<
"read series " << *
p.first;
71 for (Series_multiIndex::iterator sit =
sEries.begin(); sit !=
sEries.end();
74 CHKERR sit->get_nb_steps(moab, nb_steps);
76 for (; ss < nb_steps; ss++) {
77 std::pair<SeriesStep_multiIndex::iterator, bool>
p =
80 MOFEM_LOG(
"SYNC", Sev::inform) <<
"add series step " << *
p.first;
93 moab::Interface &moab = m_field.
get_moab();
96 CHKERR moab.create_meshset(MESHSET_SET, meshset);
97 void const *tag_data[] = {series_name.c_str()};
99 tag_sizes[0] = series_name.size();
101 std::pair<Series_multiIndex::iterator, bool>
p =
104 SETERRQ1(PETSC_COMM_SELF, 1,
"series recorder <%s> is already there",
105 series_name.c_str());
114 moab::Interface &moab = m_field.
get_moab();
116 SeriesStep_multiIndex::index<SeriesName_mi_tag>::type::iterator ssit, hi_ssit;
120 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit;
124 "series recorder <%s> not exist and can be deleted",
125 series_name.c_str());
128 CHKERR moab.tag_delete(sit->th_SeriesTime);
129 CHKERR moab.tag_delete(sit->th_SeriesDataHandles);
130 CHKERR moab.tag_delete(sit->th_SeriesDataUIDs);
131 CHKERR moab.tag_delete(sit->th_SeriesData);
133 std::vector<EntityHandle> contained;
134 CHKERR moab.get_contained_meshsets(series_meshset, contained);
135 CHKERR moab.remove_entities(series_meshset, &contained[0], contained.size());
136 CHKERR moab.delete_entities(&contained[0], contained.size());
137 CHKERR moab.delete_entities(&series_meshset, 1);
146 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
150 "series recorder <%s> not exist", serie_name.c_str());
170 const std::string &problem_name,
188 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
191 SETERRQ1(PETSC_COMM_SELF,
MOFEM_NOT_FOUND,
"serie recorder <%s> not exist",
204 for (; dit != hi_dit; dit++) {
205 const BitRefLevel &dof_bit = (*dit)->getBitRefLevel();
206 if ((dof_bit & mask) != dof_bit)
208 if ((dof_bit &
bit).any()) {
210 ShortId uid = (*dit)->getNonNonuniqueShortId();
221 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
224 SETERRQ1(PETSC_COMM_SELF, 1,
"serie recorder <%s> not exist",
235 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
238 SETERRQ1(PETSC_COMM_SELF, 1,
"serie recorder <%s> not exist",
249 moab::Interface &moab = m_field.
get_moab();
251 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
254 SETERRQ1(PETSC_COMM_SELF, 1,
"serie recorder <%s> not exist",
267 moab::Interface &moab = m_field.
get_moab();
269 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
272 SETERRQ1(PETSC_COMM_SELF, 1,
"serie recorder <%s> not exist",
277 CHKERR sit->get_nb_steps(moab, nb_steps);
279 for (; ss < nb_steps; ss++) {
290 MOFEM_LOG(
"SYNC", Sev::inform) <<
"series " << sit;
293 MOFEM_LOG(
"SYNC", Sev::inform) <<
"series steps " << ssit;
302 Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
310 const int step_number) {
313 moab::Interface &moab = m_field.
get_moab();
316 SeriesStep_multiIndex::index<
319 boost::make_tuple(serie_name, step_number));
321 SETERRQ2(PETSC_COMM_SELF, 1,
"series <%s> and step %d not found",
322 serie_name.c_str(), step_number);
328SeriesStep_multiIndex::index<SeriesName_mi_tag>::type::iterator
333SeriesStep_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 Problem * get_problem(const std::string problem_name) const =0
Get the problem object.
virtual const DofEntity_multiIndex * get_dofs() const =0
Get the dofs 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.
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
constexpr auto field_name
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