https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Namespaces | Functions
PetscDMMoose.h File Reference

Go to the source code of this file.

Namespaces

namespace  libMesh
 The following methods are specializations for using the libMesh::Parallel::packed_range_* routines for std::strings.
 

Functions

PetscErrorCode DMMooseRegisterAll ()
 
PetscErrorCode DMCreateMoose (MPI_Comm comm, NonlinearSystemBase &nl, const libMesh::DofMapBase &dof_map, const libMesh::System &system, const std::string &dm_name, DM *dm)
 Create a MOOSE DM.
 
PetscErrorCode DMMooseReset (DM)
 
PetscErrorCode DMMooseSetNonlinearSystem (DM, NonlinearSystemBase &)
 
PetscErrorCode DMMooseGetNonlinearSystem (DM, NonlinearSystemBase *&)
 
PetscErrorCode DMMooseSetDofMap (DM, const libMesh::DofMapBase &)
 
PetscErrorCode DMMooseGetBlocks (DM, std::vector< std::string > &)
 
PetscErrorCode DMMooseGetVariables (DM, std::vector< std::string > &)
 
PetscErrorCode DMMooseGetSides (DM, std::set< std::string > &)
 
PetscErrorCode DMMooseGetUnSides (DM, std::set< std::string > &)
 
PetscErrorCode DMMooseGetContacts (DM, std::vector< std::pair< std::string, std::string > > &, std::vector< bool > &)
 
PetscErrorCode DMMooseGetUnContacts (DM, std::vector< std::pair< std::string, std::string > > &, std::vector< bool > &)
 
PetscErrorCode DMMooseSetBlocks (DM, const std::vector< std::string > &)
 
PetscErrorCode DMMooseSetVariables (DM, const std::vector< std::string > &)
 
PetscErrorCode DMMooseSetSides (DM, const std::set< std::string > &)
 
PetscErrorCode DMMooseSetUnSides (DM, const std::set< std::string > &)
 
PetscErrorCode DMMooseSetContacts (DM, const std::vector< std::pair< std::string, std::string > > &, const std::vector< bool > &)
 
PetscErrorCode DMMooseSetUnContacts (DM, const std::vector< std::pair< std::string, std::string > > &, const std::vector< bool > &)
 
PetscErrorCode DMMooseSetSplitNames (DM, const std::vector< std::string > &)
 
PetscErrorCode DMMooseGetSplitNames (DM, const std::vector< std::string > &)
 
PetscErrorCode DMMooseSetSplitVars (DM, const std::string &, const std::set< std::string > &)
 
PetscErrorCode DMMooseGetSplitVars (DM, const std::string &, std::set< std::string > &)
 
PetscErrorCode DMMooseSetSplitBlocks (DM, const std::string &, const std::set< std::string > &)
 
PetscErrorCode DMMooseGetSplitBlocks (DM, const std::string &, std::set< std::string > &)
 
PetscErrorCode DMMooseSetSplitSides (DM, const std::string &, const std::set< std::string > &)
 
PetscErrorCode DMMooseGetSplitSides (DM, const std::string &, std::set< std::string > &)
 

Function Documentation

◆ DMCreateMoose()

PetscErrorCode DMCreateMoose ( MPI_Comm  comm,
NonlinearSystemBase &  nl,
const libMesh::DofMapBase &  dof_map,
const libMesh::System &  system,
const std::string &  dm_name,
DM *  dm 
)
extern

Create a MOOSE DM.

Parameters
commThe communicator that the DM should use
nlThe nonlinear system context that the DM is associated with
dof_mapA reference to the DoFMap, which you can get from the system
dm_nameA name to associate with the DM
dmA pointer to the PETSc DM

Referenced by FieldSplitPreconditionerTempl< Base >::createMooseDM().

◆ DMMooseGetBlocks()

PetscErrorCode DMMooseGetBlocks ( DM  dm,
std::vector< std::string > &  block_names 
)
extern

Definition at line 201 of file PetscDMMoose.C.

202{
205 DM_Moose * dmm = (DM_Moose *)dm->data;
206 for (const auto & it : *(dmm->_block_ids))
207 block_names.push_back(it.first);
208 PetscFunctionReturn(PETSC_SUCCESS);
209}
PetscErrorCode PetscOptionItems *PetscErrorCode DM dm
LibmeshPetscCallQ(DMMooseValidityCheck(dm))
PetscFunctionReturn(PETSC_SUCCESS)
PetscFunctionBegin
PetscErrorCode DMMooseValidityCheck(DM dm)

◆ DMMooseGetContacts()

PetscErrorCode DMMooseGetContacts ( DM  ,
std::vector< std::pair< std::string, std::string > > &  ,
std::vector< bool > &   
)
extern

◆ DMMooseGetNonlinearSystem()

PetscErrorCode DMMooseGetNonlinearSystem ( DM  dm,
NonlinearSystemBase *&  nl 
)
extern

Definition at line 444 of file PetscDMMoose.C.

445{
448 DM_Moose * dmm = (DM_Moose *)(dm->data);
449 nl = dmm->_nl;
450 PetscFunctionReturn(PETSC_SUCCESS);
451}
NonlinearSystemBase * _nl

Referenced by DMVariableBounds_Moose().

◆ DMMooseGetSides()

PetscErrorCode DMMooseGetSides ( DM  ,
std::set< std::string > &   
)
extern

◆ DMMooseGetSplitBlocks()

PetscErrorCode DMMooseGetSplitBlocks ( DM  ,
const std::string &  ,
std::set< std::string > &   
)
extern

◆ DMMooseGetSplitNames()

PetscErrorCode DMMooseGetSplitNames ( DM  ,
const std::vector< std::string > &   
)
extern

◆ DMMooseGetSplitSides()

PetscErrorCode DMMooseGetSplitSides ( DM  ,
const std::string &  ,
std::set< std::string > &   
)
extern

◆ DMMooseGetSplitVars()

PetscErrorCode DMMooseGetSplitVars ( DM  ,
const std::string &  ,
std::set< std::string > &   
)
extern

◆ DMMooseGetUnContacts()

PetscErrorCode DMMooseGetUnContacts ( DM  ,
std::vector< std::pair< std::string, std::string > > &  ,
std::vector< bool > &   
)
extern

◆ DMMooseGetUnSides()

PetscErrorCode DMMooseGetUnSides ( DM  ,
std::set< std::string > &   
)
extern

◆ DMMooseGetVariables()

PetscErrorCode DMMooseGetVariables ( DM  dm,
std::vector< std::string > &  var_names 
)
extern

Definition at line 212 of file PetscDMMoose.C.

213{
216 DM_Moose * dmm = (DM_Moose *)(dm->data);
217 for (const auto & it : *(dmm->_var_ids))
218 var_names.push_back(it.first);
219 PetscFunctionReturn(PETSC_SUCCESS);
220}

◆ DMMooseRegisterAll()

PetscErrorCode DMMooseRegisterAll ( )
extern

Definition at line 1964 of file PetscDMMoose.C.

1965{
1966 static PetscBool DMMooseRegisterAllCalled = PETSC_FALSE;
1967
1969 if (!DMMooseRegisterAllCalled)
1970 {
1971 LibmeshPetscCallQ(DMRegister(DMMOOSE, DMCreate_Moose));
1972 DMMooseRegisterAllCalled = PETSC_TRUE;
1973 }
1974 PetscFunctionReturn(PETSC_SUCCESS);
1975}
EXTERN_C_BEGIN PetscErrorCode DMCreate_Moose(DM dm)

Referenced by FieldSplitPreconditioner::setupDM(), and StaticCondensationFieldSplitPreconditioner::setupDM().

◆ DMMooseReset()

PetscErrorCode DMMooseReset ( DM  dm)
extern

Definition at line 1441 of file PetscDMMoose.C.

1442{
1443 PetscBool ismoose;
1444 DM_Moose * dmm = (DM_Moose *)(dm->data);
1445
1447 LibmeshPetscCallQ(PetscObjectTypeCompare((PetscObject)dm, DMMOOSE, &ismoose));
1448 if (!ismoose)
1449 PetscFunctionReturn(PETSC_SUCCESS);
1450 if (!dmm->_nl)
1451 SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_ARG_WRONGSTATE, "No Moose system set for DM_Moose");
1452 LibmeshPetscCallQ(ISDestroy(&dmm->_embedding));
1453 for (auto & it : *(dmm->_splits))
1454 {
1455 DM_Moose::SplitInfo & split = it.second;
1456 LibmeshPetscCallQ(ISDestroy(&split._rembedding));
1457 if (split._dm)
1459 }
1460 dm->setupcalled = PETSC_FALSE;
1461 PetscFunctionReturn(PETSC_SUCCESS);
1462}
PetscErrorCode DMMooseReset(DM dm)
PETSC_ERR_ARG_WRONGSTATE
tbb::split split

Referenced by DMMooseReset().

◆ DMMooseSetBlocks()

PetscErrorCode DMMooseSetBlocks ( DM  ,
const std::vector< std::string > &   
)
extern

◆ DMMooseSetContacts()

PetscErrorCode DMMooseSetContacts ( DM  ,
const std::vector< std::pair< std::string, std::string > > &  ,
const std::vector< bool > &   
)
extern

◆ DMMooseSetDofMap()

PetscErrorCode DMMooseSetDofMap ( DM  dm,
const libMesh::DofMapBase &  dof_map 
)
extern

Definition at line 237 of file PetscDMMoose.C.

238{
241 if (dm->setupcalled)
242 SETERRQ(((PetscObject)dm)->comm,
244 "Cannot reset the degree of freedom map after DM has been set up.");
245 DM_Moose * dmm = (DM_Moose *)(dm->data);
246 dmm->_dof_map = &dof_map;
247 PetscFunctionReturn(PETSC_SUCCESS);
248}
const libMesh::DofMapBase * _dof_map

Referenced by DMCreateMoose().

◆ DMMooseSetNonlinearSystem()

PetscErrorCode DMMooseSetNonlinearSystem ( DM  dm,
NonlinearSystemBase &  nl 
)
extern

Definition at line 223 of file PetscDMMoose.C.

224{
227 if (dm->setupcalled)
228 SETERRQ(((PetscObject)dm)->comm,
230 "Cannot reset the NonlinearSystem after DM has been set up.");
231 DM_Moose * dmm = (DM_Moose *)(dm->data);
232 dmm->_nl = &nl;
233 PetscFunctionReturn(PETSC_SUCCESS);
234}

Referenced by DMCreateMoose().

◆ DMMooseSetSides()

PetscErrorCode DMMooseSetSides ( DM  dm,
const std::set< std::string > &  sides 
)
extern

Definition at line 338 of file PetscDMMoose.C.

339{
340 DM_Moose * dmm = (DM_Moose *)dm->data;
341
344 if (dm->setupcalled)
345 SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "Not for an already setup DM");
346 if (dmm->_sides)
347 delete dmm->_sides;
348 dmm->_sides = new std::set<std::string>(sides);
349 PetscFunctionReturn(PETSC_SUCCESS);
350}
char ** sides

◆ DMMooseSetSplitBlocks()

PetscErrorCode DMMooseSetSplitBlocks ( DM  ,
const std::string &  ,
const std::set< std::string > &   
)
extern

◆ DMMooseSetSplitNames()

PetscErrorCode DMMooseSetSplitNames ( DM  dm,
const std::vector< std::string > &  split_names 
)
extern

Definition at line 454 of file PetscDMMoose.C.

455{
458 DM_Moose * dmm = (DM_Moose *)(dm->data);
459
460 if (dmm->_splits)
461 {
462 for (auto & it : *(dmm->_splits))
463 {
464 LibmeshPetscCallQ(DMDestroy(&(it.second._dm)));
465 LibmeshPetscCallQ(ISDestroy(&(it.second._rembedding)));
466 }
467 delete dmm->_splits;
468 dmm->_splits = LIBMESH_PETSC_NULLPTR;
469 }
470 if (dmm->_splitlocs)
471 {
472 delete dmm->_splitlocs;
473 dmm->_splitlocs = LIBMESH_PETSC_NULLPTR;
474 }
475 dmm->_splits = new std::map<std::string, DM_Moose::SplitInfo>();
476 dmm->_splitlocs = new std::multimap<std::string, unsigned int>();
477 for (unsigned int i = 0; i < split_names.size(); ++i)
478 {
480 info._dm = LIBMESH_PETSC_NULLPTR;
481 info._rembedding = LIBMESH_PETSC_NULLPTR;
482 std::string name = split_names[i];
483 (*dmm->_splits)[name] = info;
484 dmm->_splitlocs->insert(std::make_pair(name, i));
485 }
486 PetscFunctionReturn(PETSC_SUCCESS);
487}
MPI_Info info
std::string name(const ElemQuality q)
std::multimap< std::string, unsigned int > * _splitlocs
std::map< std::string, SplitInfo > * _splits

Referenced by if().

◆ DMMooseSetSplitSides()

PetscErrorCode DMMooseSetSplitSides ( DM  ,
const std::string &  ,
const std::set< std::string > &   
)
extern

◆ DMMooseSetSplitVars()

PetscErrorCode DMMooseSetSplitVars ( DM  ,
const std::string &  ,
const std::set< std::string > &   
)
extern

◆ DMMooseSetUnContacts()

PetscErrorCode DMMooseSetUnContacts ( DM  ,
const std::vector< std::pair< std::string, std::string > > &  ,
const std::vector< bool > &   
)
extern

◆ DMMooseSetUnSides()

PetscErrorCode DMMooseSetUnSides ( DM  dm,
const std::set< std::string > &  unsides 
)
extern

Definition at line 353 of file PetscDMMoose.C.

354{
355 DM_Moose * dmm = (DM_Moose *)dm->data;
356
359 if (dm->setupcalled)
360 SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "Not for an already setup DM");
361 if (dmm->_unsides)
362 delete dmm->_unsides;
363 dmm->_unsides = new std::set<std::string>(unsides);
364 PetscFunctionReturn(PETSC_SUCCESS);
365}

◆ DMMooseSetVariables()

PetscErrorCode DMMooseSetVariables ( DM  ,
const std::vector< std::string > &   
)
extern