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    SETERRQ(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    SETERRQ(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    SETERRQ(PETSC_COMM_SELF, 1, 
"serie recorder <%s> not exist",
 
 
  235  Series_multiIndex::index<SeriesName_mi_tag>::type::iterator sit =
 
  238    SETERRQ(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    SETERRQ(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    SETERRQ(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    SETERRQ(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 keeping time and step.
Structure for recording (time) series.
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