v0.10.0
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_large_problem.cpp, build_problems.cpp, continuity_check_on_contact_prism_side_ele.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, heat_equation.cpp, helmholtz.cpp, lesson3_poisson.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.cpp, Remodeling.cpp, remove_entities_from_problem.cpp, test_cache_on_entities.cpp, and wave_equation.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 2356 of file ProblemsManager.cpp.

2356  {
2357  MoFEM::Interface &m_field = cOre;
2359  if (debug > 0) {
2360 
2362  NumeredDofEntitysByIdx;
2363  NumeredDofEntitysByIdx::iterator dit, hi_dit;
2364  const NumeredDofEntitysByIdx *numered_dofs_ptr[] = {
2365  &(problem_ptr->numeredRowDofs->get<Idx_mi_tag>()),
2366  &(problem_ptr->numeredColDofs->get<Idx_mi_tag>())};
2367 
2368  int *nbdof_ptr[] = {&problem_ptr->nbDofsRow, &problem_ptr->nbDofsCol};
2369  int *local_nbdof_ptr[] = {&problem_ptr->nbLocDofsRow,
2370  &problem_ptr->nbLocDofsCol};
2371 
2372  for (int ss = 0; ss < 2; ss++) {
2373 
2374  dit = numered_dofs_ptr[ss]->begin();
2375  hi_dit = numered_dofs_ptr[ss]->end();
2376  for (; dit != hi_dit; dit++) {
2377  if ((*dit)->getPart() == (unsigned int)m_field.get_comm_rank()) {
2378  if ((*dit)->getPetscLocalDofIdx() < 0) {
2379  std::ostringstream zz;
2380  zz << "rank " << m_field.get_comm_rank() << " " << **dit;
2381  SETERRQ2(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE,
2382  "local dof index for %d (0-row, 1-col) not set, i.e. has "
2383  "negative value\n %s",
2384  ss, zz.str().c_str());
2385  }
2386  if ((*dit)->getPetscLocalDofIdx() >= *local_nbdof_ptr[ss]) {
2387  std::ostringstream zz;
2388  zz << "rank " << m_field.get_comm_rank() << " " << **dit;
2389  SETERRQ2(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE,
2390  "local dofs for %d (0-row, 1-col) out of range\n %s", ss,
2391  zz.str().c_str());
2392  }
2393  } else {
2394  if ((*dit)->getPetscGlobalDofIdx() < 0) {
2395  std::ostringstream zz;
2396  zz << "rank " << m_field.get_comm_rank() << " "
2397  << dit->get()->getBitRefLevel() << " " << **dit;
2398  SETERRQ2(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE,
2399  "global dof index for %d (0-row, 1-col) row not set, i.e. "
2400  "has negative value\n %s",
2401  ss, zz.str().c_str());
2402  }
2403  if ((*dit)->getPetscGlobalDofIdx() >= *nbdof_ptr[ss]) {
2404  std::ostringstream zz;
2405  zz << "rank " << m_field.get_comm_rank() << " nb_dofs "
2406  << *nbdof_ptr[ss] << " " << **dit;
2407  SETERRQ2(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE,
2408  "global dofs for %d (0-row, 1-col) out of range\n %s", ss,
2409  zz.str().c_str());
2410  }
2411  }
2412  }
2413  }
2414  }
2416 }
Deprecated interface functions.
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:509
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:516
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:509
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:552
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:516
#define CHKERR
Inline error check.
Definition: definitions.h:604
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, heat_equation.cpp, helmholtz.cpp, lesson3_poisson.cpp, test_cache_on_entities.cpp, and wave_equation.cpp.

Definition at line 3080 of file ProblemsManager.cpp.

3082  {
3083 
3084  Interface &m_field = cOre;
3085  const Problem *problem_ptr;
3087  CHKERR m_field.get_problem(problem_name, &problem_ptr);
3088  boost::shared_ptr<NumeredDofEntity_multiIndex> dofs;
3089  switch (rc) {
3090  case ROW:
3091  dofs = problem_ptr->getNumeredRowDofs();
3092  break;
3093  case COL:
3094  dofs = problem_ptr->getNumeredColDofs();
3095  default:
3096  SETERRQ(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE, "Should be row or column");
3097  }
3098  marker.resize(dofs->size());
3099  std::fill(marker.begin(), marker.end(), false);
3100  for (auto p = ents.pair_begin(); p != ents.pair_end(); ++p) {
3101  auto lo = dofs->get<Ent_mi_tag>().lower_bound(p->first);
3102  auto hi = dofs->get<Ent_mi_tag>().upper_bound(p->second);
3103  for (; lo != hi; ++lo)
3104  marker[(*lo)->getPetscLocalDofIdx()] = true;
3105  }
3107 }
#define ProblemManagerFunctionBegin
static Index< 'p', 3 > p
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:485
#define CHKERR
Inline error check.
Definition: definitions.h:604
DeprecatedCoreInterface Interface
Definition: Interface.hpp:1943

◆ printPartitionedProblem()

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

Definition at line 2337 of file ProblemsManager.cpp.

2337  {
2338  MoFEM::Interface &m_field = cOre;
2340 
2341  if (verb > QUIET) {
2342 
2343  MOFEM_LOG("SYNC", Sev::inform)
2344  << problem_ptr->getName() << " Nb. local dof "
2345  << problem_ptr->getNbLocalDofsRow() << " by "
2346  << problem_ptr->getNbLocalDofsCol() << " nb global dofs "
2347  << problem_ptr->getNbDofsRow() << " by " << problem_ptr->getNbDofsCol();
2348 
2349  MOFEM_LOG_SYNCHRONISE(m_field.get_comm())
2350  }
2351 
2353 }
#define ProblemManagerFunctionBegin
Deprecated interface functions.
#define MOFEM_LOG(channel, severity)
Log.
Definition: LogManager.hpp:303
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:485
virtual MPI_Comm & get_comm() const =0
#define MOFEM_LOG_SYNCHRONISE(comm)
Synchronise "SYNC" channel.
Definition: LogManager.hpp:340

◆ 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:509
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:516

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: