v0.8.23
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)
 
 ~ProblemsManager ()
 Destructor. More...
 
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 ()
 
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_check_approx_in_2d.cpp, hcurl_curl_operator.cpp, hcurl_divergence_operator_2d.cpp, mesh_insert_interface_atom.cpp, prisms_elements_from_surface.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 74 of file ProblemsManager.cpp.

75  : cOre(const_cast<MoFEM::Core &>(core)),
76  buildProblemFromFields(PETSC_FALSE),
77  synchroniseProblemEntities(PETSC_FALSE) {
78  PetscLogEventRegister("ProblemsManager", 0, &MOFEM_EVENT_ProblemsManager);
79 }
PetscLogEvent MOFEM_EVENT_ProblemsManager
PetscBool synchroniseProblemEntities
DOFs in fields, not from DOFs on elements.

◆ ~ProblemsManager()

MoFEM::ProblemsManager::~ProblemsManager ( )

Destructor.

Definition at line 80 of file ProblemsManager.cpp.

80 {}

Member Function Documentation

◆ debugPartitionedProblem()

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

Definition at line 2355 of file ProblemsManager.cpp.

2355  {
2356  MoFEM::Interface &m_field = cOre;
2358  if (debug > 0) {
2359 
2360  typedef NumeredDofEntity_multiIndex::index<Idx_mi_tag>::type
2361  NumeredDofEntitysByIdx;
2362  NumeredDofEntitysByIdx::iterator dit, hi_dit;
2363  const NumeredDofEntitysByIdx *numered_dofs_ptr[] = {
2364  &(problem_ptr->numeredDofsRows->get<Idx_mi_tag>()),
2365  &(problem_ptr->numeredDofsCols->get<Idx_mi_tag>())};
2366 
2367  int *nbdof_ptr[] = {&problem_ptr->nbDofsRow, &problem_ptr->nbDofsCol};
2368  int *local_nbdof_ptr[] = {&problem_ptr->nbLocDofsRow,
2369  &problem_ptr->nbLocDofsCol};
2370 
2371  for (int ss = 0; ss < 2; ss++) {
2372 
2373  dit = numered_dofs_ptr[ss]->begin();
2374  hi_dit = numered_dofs_ptr[ss]->end();
2375  for (; dit != hi_dit; dit++) {
2376  if ((*dit)->getPart() == (unsigned int)m_field.get_comm_rank()) {
2377  if ((*dit)->getPetscLocalDofIdx() < 0) {
2378  std::ostringstream zz;
2379  zz << "rank " << m_field.get_comm_rank() << " " << **dit;
2380  SETERRQ2(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE,
2381  "local dof index for %d (0-row, 1-col) not set, i.e. has "
2382  "negative value\n %s",
2383  ss, zz.str().c_str());
2384  }
2385  if ((*dit)->getPetscLocalDofIdx() >= *local_nbdof_ptr[ss]) {
2386  std::ostringstream zz;
2387  zz << "rank " << m_field.get_comm_rank() << " " << **dit;
2388  SETERRQ2(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE,
2389  "local dofs for %d (0-row, 1-col) out of range\n %s", ss,
2390  zz.str().c_str());
2391  }
2392  } else {
2393  if ((*dit)->getPetscGlobalDofIdx() < 0) {
2394  std::ostringstream zz;
2395  zz << "rank " << m_field.get_comm_rank() << " "
2396  << dit->get()->getBitRefLevel() << " " << **dit;
2397  SETERRQ2(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE,
2398  "global dof index for %d (0-row, 1-col) row not set, i.e. "
2399  "has negative value\n %s",
2400  ss, zz.str().c_str());
2401  }
2402  if ((*dit)->getPetscGlobalDofIdx() >= *nbdof_ptr[ss]) {
2403  std::ostringstream zz;
2404  zz << "rank " << m_field.get_comm_rank() << " nb_dofs "
2405  << *nbdof_ptr[ss] << " " << **dit;
2406  SETERRQ2(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE,
2407  "global dofs for %d (0-row, 1-col) out of range\n %s", ss,
2408  zz.str().c_str());
2409  }
2410  }
2411  }
2412  }
2413  }
2415 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:501
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:508
virtual int get_comm_rank() const =0
static const bool debug

◆ getOptions()

MoFEMErrorCode MoFEM::ProblemsManager::getOptions ( )

Definition at line 82 of file ProblemsManager.cpp.

82  {
83  MoFEM::Interface &m_field = cOre;
85  CHKERR PetscOptionsBegin(m_field.get_comm(), "", "Problem manager", "none");
86  {
87  CHKERR PetscOptionsBool(
88  "-problem_build_from_fields",
89  "Add DOFs to problem directly from fields not through DOFs on elements",
91  }
92  ierr = PetscOptionsEnd();
93  CHKERRG(ierr);
95 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:501
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:544
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:508
#define CHKERR
Inline error check.
Definition: definitions.h:596
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.

Definition at line 3133 of file ProblemsManager.cpp.

3135  {
3136 
3137  Interface &m_field = cOre;
3138  const Problem *problem_ptr;
3140  CHKERR m_field.get_problem(problem_name, &problem_ptr);
3141  boost::shared_ptr<NumeredDofEntity_multiIndex> dofs;
3142  switch (rc) {
3143  case ROW:
3144  dofs = problem_ptr->getNumeredDofsRows();
3145  break;
3146  case COL:
3147  dofs = problem_ptr->getNumeredDofsCols();
3148  default:
3149  SETERRQ(PETSC_COMM_SELF, MOFEM_IMPOSIBLE_CASE, "Should be row or column");
3150  }
3151  marker.resize(dofs->size());
3152  marker.clear();
3153  for(auto p = ents.pair_begin();p!=ents.pair_end(); ++p) {
3154  auto lo = dofs->get<Ent_mi_tag>().lower_bound(p->first);
3155  auto hi = dofs->get<Ent_mi_tag>().upper_bound(p->second);
3156  for (; lo != hi; ++lo)
3157  marker[(*lo)->getPetscLocalDofIdx()] = true;
3158  }
3160 }
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:477
#define CHKERR
Inline error check.
Definition: definitions.h:596
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:407

◆ printPartitionedProblem()

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

Definition at line 2311 of file ProblemsManager.cpp.

2311  {
2312  MoFEM::Interface &m_field = cOre;
2314  if (verb > 0) {
2315  std::ostringstream ss;
2316  ss << "partition_problem: rank = " << m_field.get_comm_rank()
2317  << " FEs row ghost dofs " << *problem_ptr << " Nb. local dof "
2318  << problem_ptr->getNbLocalDofsRow() << " nb global row dofs "
2319  << problem_ptr->getNbDofsRow() << std::endl;
2320  ss << "partition_problem: rank = " << m_field.get_comm_rank()
2321  << " FEs col ghost dofs " << *problem_ptr << " Nb. local dof "
2322  << problem_ptr->getNbLocalDofsCol() << " nb global col dofs "
2323  << problem_ptr->getNbDofsCol() << std::endl;
2324  PetscSynchronizedPrintf(m_field.get_comm(), ss.str().c_str());
2325  PetscSynchronizedFlush(m_field.get_comm(), PETSC_STDOUT);
2326  }
2327  if (verb > 1) {
2328  // FIXME mess if printed on more than one processors
2329  // std::ostringstream ss;
2330  std::cout << "rank = " << m_field.get_comm_rank() << " FEs row dofs "
2331  << *problem_ptr << " Nb. row dof " << problem_ptr->getNbDofsRow()
2332  << " Nb. local dof " << problem_ptr->getNbLocalDofsRow()
2333  << std::endl;
2334  NumeredDofEntity_multiIndex::iterator miit_dd_row =
2335  problem_ptr->numeredDofsRows->begin();
2336  for (; miit_dd_row != problem_ptr->numeredDofsRows->end(); miit_dd_row++) {
2337  std::cout << **miit_dd_row << std::endl;
2338  }
2339  std::cout << "rank = " << m_field.get_comm_rank() << " FEs col dofs "
2340  << *problem_ptr << " Nb. col dof " << problem_ptr->getNbDofsCol()
2341  << " Nb. local dof " << problem_ptr->getNbLocalDofsCol()
2342  << std::endl;
2343  NumeredDofEntity_multiIndex::iterator miit_dd_col =
2344  problem_ptr->numeredDofsCols->begin();
2345  for (; miit_dd_col != problem_ptr->numeredDofsCols->end(); miit_dd_col++) {
2346  std::cout << **miit_dd_col << std::endl;
2347  }
2348  // PetscSynchronizedPrintf(comm,ss.str().c_str());
2349  // PetscSynchronizedFlush(comm,PETSC_STDOUT);
2350  }
2352 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:501
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:508
virtual int get_comm_rank() const =0
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 62 of file ProblemsManager.cpp.

63  {
65  *iface = NULL;
66  if (uuid == IDD_MOFEMProblemsManager) {
67  *iface = const_cast<ProblemsManager *>(this);
69  }
70  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "unknown interface");
72 }
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:501
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:508

Member Data Documentation

◆ buildProblemFromFields

PetscBool MoFEM::ProblemsManager::buildProblemFromFields

If set to true, problem is build from

Definition at line 47 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 345 of file ProblemsManager.hpp.

◆ synchroniseProblemEntities

PetscBool MoFEM::ProblemsManager::synchroniseProblemEntities

DOFs in fields, not from DOFs on elements.

Definition at line 50 of file ProblemsManager.hpp.


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