v0.9.1
Public Member Functions | Public Attributes | Private Attributes | List of all members
MoFEM::ProblemsManager Struct Reference

Problem manager is used to build and partition problems. More...

#include <src/interfaces/ProblemsManager.hpp>

Inheritance diagram for MoFEM::ProblemsManager:
[legend]
Collaboration diagram for MoFEM::ProblemsManager:
[legend]

Public Member Functions

MoFEMErrorCode query_interface (const MOFEMuuid &uuid, UnknownInterface **iface) const
 
 ProblemsManager (const MoFEM::Core &core)
 
virtual ~ProblemsManager ()=default
 
MoFEMErrorCode getOptions ()
 
MoFEMErrorCode partitionMesh (const Range &ents, const int dim, const int adj_dim, const int n_parts, Tag *th_vertex_weights=nullptr, Tag *th_edge_weights=nullptr, Tag *th_part_weights=nullptr, int verb=VERBOSE, const bool debug=false)
 Set partition tag to each finite element in the problemThis will use one of the mesh partitioning programs available from PETSc See http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatPartitioningType.html More...
 
MoFEMErrorCode buildProblem (const std::string name, const bool square_matrix, int verb=VERBOSE)
 build problem data structures More...
 
MoFEMErrorCode buildProblem (Problem *problem_ptr, const bool square_matrix, int verb=VERBOSE)
 build problem data structures More...
 
MoFEMErrorCode buildProblemOnDistributedMesh (const std::string name, const bool square_matrix, int verb=VERBOSE)
 build problem data structures, assuming that mesh is distributed (collective)Mesh is distributed, that means that each processor keeps only own part of the mesh and shared entities. More...
 
MoFEMErrorCode buildProblemOnDistributedMesh (Problem *problem_ptr, const bool square_matrix=true, int verb=VERBOSE)
 build problem data structures, assuming that mesh is distributed (collective)Mesh is distributed, that means that each processor keeps only own part of the mesh and shared entities. More...
 
MoFEMErrorCode buildSubProblem (const std::string out_name, const std::vector< std::string > &fields_row, const std::vector< std::string > &fields_col, const std::string main_problem, const bool square_matrix=true, const map< std::string, std::pair< EntityType, EntityType >> *entityMapRow=nullptr, const map< std::string, std::pair< EntityType, EntityType >> *entityMapCol=nullptr, int verb=VERBOSE)
 build sub problem More...
 
MoFEMErrorCode buildCompsedProblem (const std::string out_name, const std::vector< std::string > add_row_problems, const std::vector< std::string > add_col_problems, const bool square_matrix=true, int verb=1)
 build composite problem More...
 
MoFEMErrorCode inheritPartition (const std::string name, const std::string problem_for_rows, bool copy_rows, const std::string problem_for_cols, bool copy_cols, int verb=VERBOSE)
 build indexing and partition problem inheriting indexing and partitioning from two other problems More...
 
MoFEMErrorCode partitionSimpleProblem (const std::string name, int verb=VERBOSE)
 partition problem dofs More...
 
MoFEMErrorCode partitionProblem (const std::string name, int verb=VERBOSE)
 partition problem dofs (collective) More...
 
MoFEMErrorCode printPartitionedProblem (const Problem *problem_ptr, int verb=VERBOSE)
 
MoFEMErrorCode debugPartitionedProblem (const Problem *problem_ptr, int verb=VERBOSE)
 
MoFEMErrorCode partitionFiniteElements (const std::string name, bool part_from_moab=false, int low_proc=-1, int hi_proc=-1, int verb=VERBOSE)
 partition finite elementsFunction which partition finite elements based on dofs partitioning.
In addition it sets information about local row and cols dofs at given element on partition. More...
 
MoFEMErrorCode partitionGhostDofs (const std::string name, int verb=VERBOSE)
 determine ghost nodes More...
 
MoFEMErrorCode partitionGhostDofsOnDistributedMesh (const std::string name, int verb=VERBOSE)
 determine ghost nodes on distributed meshes More...
 
MoFEMErrorCode getFEMeshset (const std::string prb_name, const std::string fe_name, EntityHandle *meshset) const
 create add entities of finite element in the problem More...
 
MoFEMErrorCode getProblemElementsLayout (const std::string name, const std::string fe_name, PetscLayout *layout) const
 Get layout of elements in the problemIn layout is stored information how many elements is on each processor, for more information look int petsc documentation http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/IS/PetscLayoutCreate.html#PetscLayoutCreate More...
 
MoFEMErrorCode removeDofsOnEntities (const std::string problem_name, const std::string field_name, const Range ents, const int lo_coeff=0, const int hi_coeff=MAX_DOFS_ON_ENTITY, int verb=VERBOSE, const bool debug=false)
 Remove DOFs from problemRemove DOFs from problem which are on entities on the given range and given field name. On the finite element level, DOFs can be still accessed however local PETSc indices and global PETSc indices are marked with the index -1. More...
 
MoFEMErrorCode markDofs (const std::string problem_name, RowColData rc, const Range ents, std::vector< bool > &marker)
 Create vector with marked indices. More...
 
- Public Member Functions inherited from MoFEM::UnknownInterface
template<class IFACE >
MoFEMErrorCode registerInterface (const MOFEMuuid &uuid, bool error_if_registration_failed=true)
 Register interface. More...
 
template<class IFACE , bool VERIFY = false>
MoFEMErrorCode getInterface (const MOFEMuuid &uuid, IFACE *&iface) const
 Get interface by uuid and return reference to pointer of interface. More...
 
template<class IFACE >
MoFEMErrorCode getInterface (IFACE *&iface) const
 Get interface refernce to pointer of interface. More...
 
template<class IFACE >
MoFEMErrorCode getInterface (IFACE **const iface) const
 Get interface pointer to pointer of interface. More...
 
template<class IFACE , typename boost::enable_if< boost::is_pointer< IFACE >, int >::type = 0>
IFACE getInterface () const
 Get interface pointer to pointer of interface. More...
 
template<class IFACE , typename boost::enable_if< boost::is_reference< IFACE >, int >::type = 0>
IFACE getInterface () const
 Get reference to interface. More...
 
template<class IFACE >
IFACE * getInterface () const
 Function returning pointer to interface. More...
 
virtual ~UnknownInterface ()=default
 
virtual MoFEMErrorCode getLibVersion (Version &version) const
 Get library version. More...
 
virtual const MoFEMErrorCode getFileVersion (moab::Interface &moab, Version &version) const
 Get database major version. More...
 
virtual MoFEMErrorCode getInterfaceVersion (Version &version) const
 Get database major version. More...
 
template<>
MoFEMErrorCode getInterface (const MOFEMuuid &uuid, UnknownInterface *&iface) const
 

Public Attributes

MoFEM::CorecOre
 
PetscBool buildProblemFromFields
 
PetscBool synchroniseProblemEntities
 DOFs in fields, not from DOFs on elements. More...
 

Private Attributes

PetscLogEvent MOFEM_EVENT_ProblemsManager
 

Additional Inherited Members

- Protected Member Functions inherited from MoFEM::UnknownInterface
boost::typeindex::type_index getClassIdx (const MOFEMuuid &uid) const
 Get type name for interface Id. More...
 
MOFEMuuid getUId (const boost::typeindex::type_index &class_idx) const
 Get interface Id for class name. More...
 

Detailed Description

Problem manager is used to build and partition problems.

Examples
boundary_marker.cpp, build_problems.cpp, continuity_check_on_skeleton_3d.cpp, EshelbianPlasticity.cpp, forces_and_sources_testing_edge_element.cpp, forces_and_sources_testing_flat_prism_element.cpp, forces_and_sources_testing_users_base.cpp, hcurl_divergence_operator_2d.cpp, lesson3_poisson.cpp, lesson4_elastic.cpp, lesson7_plastic.cpp, lesson8_contact.cpp, mesh_insert_interface_atom.cpp, prism_elements_from_surface.cpp, prism_polynomial_approximation.cpp, quad_polynomial_approximation.cpp, reaction_diffusion_equation.cpp, Remodeling.cpp, and remove_entities_from_problem.cpp.

Definition at line 34 of file ProblemsManager.hpp.

Constructor & Destructor Documentation

◆ ProblemsManager()

MoFEM::ProblemsManager::ProblemsManager ( const MoFEM::Core core)

Definition at line 82 of file ProblemsManager.cpp.

83  : cOre(const_cast<MoFEM::Core &>(core)),
84  buildProblemFromFields(PETSC_FALSE),
85  synchroniseProblemEntities(PETSC_FALSE) {
86  PetscLogEventRegister("ProblemsManager", 0, &MOFEM_EVENT_ProblemsManager);
87 }
PetscLogEvent MOFEM_EVENT_ProblemsManager
PetscBool synchroniseProblemEntities
DOFs in fields, not from DOFs on elements.

◆ ~ProblemsManager()

virtual MoFEM::ProblemsManager::~ProblemsManager ( )
virtualdefault

Member Function Documentation

◆ debugPartitionedProblem()

MoFEMErrorCode MoFEM::ProblemsManager::debugPartitionedProblem ( const Problem problem_ptr,
int  verb = VERBOSE 
)

Definition at line 2280 of file ProblemsManager.cpp.

2280  {
2281  MoFEM::Interface &m_field = cOre;
2283  if (debug > 0) {
2284 
2286  NumeredDofEntitysByIdx;
2287  NumeredDofEntitysByIdx::iterator dit, hi_dit;
2288  const NumeredDofEntitysByIdx *numered_dofs_ptr[] = {
2289  &(problem_ptr->numeredDofsRows->get<Idx_mi_tag>()),
2290  &(problem_ptr->numeredDofsCols->get<Idx_mi_tag>())};
2291 
2292  int *nbdof_ptr[] = {&problem_ptr->nbDofsRow, &problem_ptr->nbDofsCol};
2293  int *local_nbdof_ptr[] = {&problem_ptr->nbLocDofsRow,
2294  &problem_ptr->nbLocDofsCol};
2295 
2296  for (int ss = 0; ss < 2; ss++) {
2297 
2298  dit = numered_dofs_ptr[ss]->begin();
2299  hi_dit = numered_dofs_ptr[ss]->end();
2300  for (; dit != hi_dit; dit++) {
2301  if ((*dit)->getPart() == (unsigned int)m_field.get_comm_rank()) {
2302  if ((*dit)->getPetscLocalDofIdx() < 0) {
2303  std::ostringstream zz;
2304  zz << "rank " << m_field.get_comm_rank() << " " << **dit;
2305  SETERRQ2(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE,
2306  "local dof index for %d (0-row, 1-col) not set, i.e. has "
2307  "negative value\n %s",
2308  ss, zz.str().c_str());
2309  }
2310  if ((*dit)->getPetscLocalDofIdx() >= *local_nbdof_ptr[ss]) {
2311  std::ostringstream zz;
2312  zz << "rank " << m_field.get_comm_rank() << " " << **dit;
2313  SETERRQ2(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE,
2314  "local dofs for %d (0-row, 1-col) out of range\n %s", ss,
2315  zz.str().c_str());
2316  }
2317  } else {
2318  if ((*dit)->getPetscGlobalDofIdx() < 0) {
2319  std::ostringstream zz;
2320  zz << "rank " << m_field.get_comm_rank() << " "
2321  << dit->get()->getBitRefLevel() << " " << **dit;
2322  SETERRQ2(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE,
2323  "global dof index for %d (0-row, 1-col) row not set, i.e. "
2324  "has negative value\n %s",
2325  ss, zz.str().c_str());
2326  }
2327  if ((*dit)->getPetscGlobalDofIdx() >= *nbdof_ptr[ss]) {
2328  std::ostringstream zz;
2329  zz << "rank " << m_field.get_comm_rank() << " nb_dofs "
2330  << *nbdof_ptr[ss] << " " << **dit;
2331  SETERRQ2(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE,
2332  "global dofs for %d (0-row, 1-col) out of range\n %s", ss,
2333  zz.str().c_str());
2334  }
2335  }
2336  }
2337  }
2338  }
2340 }
Deprecated interface functions.
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:507
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:514
virtual int get_comm_rank() const =0
static const bool debug

◆ getOptions()

MoFEMErrorCode MoFEM::ProblemsManager::getOptions ( )

Definition at line 89 of file ProblemsManager.cpp.

89  {
90  MoFEM::Interface &m_field = cOre;
92  CHKERR PetscOptionsBegin(m_field.get_comm(), "", "Problem manager", "none");
93  {
94  CHKERR PetscOptionsBool(
95  "-problem_build_from_fields",
96  "Add DOFs to problem directly from fields not through DOFs on elements",
98  }
99  ierr = PetscOptionsEnd();
100  CHKERRG(ierr);
102 }
Deprecated interface functions.
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:507
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:550
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:514
#define CHKERR
Inline error check.
Definition: definitions.h:602
virtual MPI_Comm & get_comm() const =0

◆ markDofs()

MoFEMErrorCode MoFEM::ProblemsManager::markDofs ( const std::string  problem_name,
RowColData  rc,
const Range  ents,
std::vector< bool > &  marker 
)

Create vector with marked indices.

Vector with local DOFs marked by entities

Parameters
problem_name
row
ents
marker
Returns
MoFEMErrorCode
Examples
boundary_marker.cpp, and lesson3_poisson.cpp.

Definition at line 3029 of file ProblemsManager.cpp.

3031  {
3032 
3033  Interface &m_field = cOre;
3034  const Problem *problem_ptr;
3036  CHKERR m_field.get_problem(problem_name, &problem_ptr);
3037  boost::shared_ptr<NumeredDofEntity_multiIndex> dofs;
3038  switch (rc) {
3039  case ROW:
3040  dofs = problem_ptr->getNumeredDofsRows();
3041  break;
3042  case COL:
3043  dofs = problem_ptr->getNumeredDofsCols();
3044  default:
3045  SETERRQ(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE, "Should be row or column");
3046  }
3047  marker.resize(dofs->size());
3048  marker.clear();
3049  for (auto p = ents.pair_begin(); p != ents.pair_end(); ++p) {
3050  auto lo = dofs->get<Ent_mi_tag>().lower_bound(p->first);
3051  auto hi = dofs->get<Ent_mi_tag>().upper_bound(p->second);
3052  for (; lo != hi; ++lo)
3053  marker[(*lo)->getPetscLocalDofIdx()] = true;
3054  }
3056 }
#define ProblemManagerFunctionBegin
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:483
#define CHKERR
Inline error check.
Definition: definitions.h:602
DeprecatedCoreInterface Interface
Definition: Interface.hpp:1879

◆ printPartitionedProblem()

MoFEMErrorCode MoFEM::ProblemsManager::printPartitionedProblem ( const Problem problem_ptr,
int  verb = VERBOSE 
)

Definition at line 2261 of file ProblemsManager.cpp.

2261  {
2262  MoFEM::Interface &m_field = cOre;
2264 
2265  if (verb > QUIET) {
2266 
2267  MOFEM_LOG("SYNC", Sev::inform)
2268  << problem_ptr->getName() << " Nb. local dof "
2269  << problem_ptr->getNbLocalDofsRow() << " by "
2270  << problem_ptr->getNbLocalDofsCol() << " nb global dofs "
2271  << problem_ptr->getNbDofsRow() << " by " << problem_ptr->getNbDofsCol();
2272 
2273  MOFEM_LOG_SYNCHORMISE(m_field.get_comm())
2274  }
2275 
2277 }
#define ProblemManagerFunctionBegin
Deprecated interface functions.
#define MOFEM_LOG(channel, severity)
Log.
Definition: LogManager.hpp:292
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:483
#define MOFEM_LOG_SYNCHORMISE(comm)
Synchronise "SYNC" channel.
Definition: LogManager.hpp:329
virtual MPI_Comm & get_comm() const =0

◆ query_interface()

MoFEMErrorCode MoFEM::ProblemsManager::query_interface ( const MOFEMuuid uuid,
UnknownInterface **  iface 
) const
virtual

Implements MoFEM::UnknownInterface.

Definition at line 70 of file ProblemsManager.cpp.

71  {
73  *iface = NULL;
74  if (uuid == IDD_MOFEMProblemsManager) {
75  *iface = const_cast<ProblemsManager *>(this);
77  }
78  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "unknown interface");
80 }
static const MOFEMuuid IDD_MOFEMProblemsManager
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:507
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:514

Member Data Documentation

◆ buildProblemFromFields

PetscBool MoFEM::ProblemsManager::buildProblemFromFields

If set to true, problem is build from

Definition at line 43 of file ProblemsManager.hpp.

◆ cOre

MoFEM::Core& MoFEM::ProblemsManager::cOre

Definition at line 39 of file ProblemsManager.hpp.

◆ MOFEM_EVENT_ProblemsManager

PetscLogEvent MoFEM::ProblemsManager::MOFEM_EVENT_ProblemsManager
private

Definition at line 341 of file ProblemsManager.hpp.

◆ synchroniseProblemEntities

PetscBool MoFEM::ProblemsManager::synchroniseProblemEntities

DOFs in fields, not from DOFs on elements.

Definition at line 46 of file ProblemsManager.hpp.


The documentation for this struct was generated from the following files: