libMesh
Functions
petscdmlibmesh.h File Reference

Go to the source code of this file.

Functions

PETSC_EXTERN PetscErrorCode DMlibMeshSetSystem (DM, libMesh::NonlinearImplicitSystem &)
 Any functional implementation of the DMlibMesh API must compose the following functions with the DM object. More...
 
PETSC_EXTERN PetscErrorCode DMlibMeshGetSystem (DM, libMesh::NonlinearImplicitSystem *&)
 
EXTERN_C_BEGIN PETSC_EXTERN PetscErrorCode DMCreate_libMesh (DM)
 

Function Documentation

◆ DMCreate_libMesh()

EXTERN_C_BEGIN PETSC_EXTERN PetscErrorCode DMCreate_libMesh ( DM  )

Definition at line 1170 of file petscdmlibmeshimpl.C.

1171 {
1172  PetscErrorCode ierr;
1173  DM_libMesh * dlm;
1174 
1175  PetscFunctionBegin;
1176  PetscValidHeaderSpecific(dm,DM_CLASSID,1);
1177 #if PETSC_RELEASE_LESS_THAN(3,5,0)
1178  ierr = PetscNewLog(dm,DM_libMesh,&dlm);CHKERRQ(ierr);
1179 #else
1180  ierr = PetscNewLog(dm,&dlm);CHKERRQ(ierr);
1181 #endif
1182  dm->data = dlm;
1183 
1184  /* DMlibMesh impl */
1185  dlm->varids = new(std::map<std::string, unsigned int>);
1186  dlm->blockids = new(std::map<std::string, unsigned int>);
1187  dlm->varnames = new(std::map<unsigned int, std::string>);
1188  dlm->blocknames = new(std::map<unsigned int, std::string>);
1189  dlm->decomposition = PETSC_NULL;
1190  dlm->decomposition_type = DMLIBMESH_NO_DECOMPOSITION;
1191 
1192  /* DM API */
1193  dm->ops->createglobalvector = DMCreateGlobalVector_libMesh;
1194  dm->ops->createlocalvector = 0; // DMCreateLocalVector_libMesh;
1195  dm->ops->getcoloring = 0; // DMGetColoring_libMesh;
1196  dm->ops->creatematrix = DMCreateMatrix_libMesh;
1197  dm->ops->createinterpolation= 0; // DMCreateInterpolation_libMesh;
1198 
1199  dm->ops->refine = 0; // DMRefine_libMesh;
1200  dm->ops->coarsen = 0; // DMCoarsen_libMesh;
1201 
1202  // * dm->ops->getinjection was renamed to dm->ops->createinjection in PETSc 5a84ad338 (5 Jul 2019)
1203  // * dm->ops-getaggregates was removed in PETSc 97779f9a (5 Jul 2019)
1204  // * Both changes were merged into PETSc master in 94aad3ce (7 Jul 2019).
1205 #if PETSC_RELEASE_LESS_THAN(3,12,0)
1206  dm->ops->getinjection = 0; // DMGetInjection_libMesh;
1207  dm->ops->getaggregates = 0; // DMGetAggregates_libMesh;
1208 #else
1209  dm->ops->createinjection = 0;
1210 #endif
1211 
1212 
1213 #if PETSC_RELEASE_LESS_THAN(3,3,1)
1214  dm->ops->createfielddecompositiondm = DMCreateFieldDecompositionDM_libMesh;
1215  dm->ops->createdomaindecompositiondm = DMCreateDomainDecompositionDM_libMesh;
1216 #endif
1217  dm->ops->createfielddecomposition = DMCreateFieldDecomposition_libMesh;
1218  dm->ops->createdomaindecomposition = DMCreateDomainDecomposition_libMesh;
1219 
1220  dm->ops->destroy = DMDestroy_libMesh;
1221  dm->ops->view = DMView_libMesh;
1222  dm->ops->setfromoptions = 0; // DMSetFromOptions_libMesh;
1223  dm->ops->setup = DMSetUp_libMesh;
1224 
1225  /* DMlibMesh API */
1226 #if PETSC_RELEASE_LESS_THAN(3,4,0)
1227  ierr = PetscObjectComposeFunction((PetscObject)dm,"DMlibMeshSetSystem_C",PETSC_NULL,(PetscVoidFunction)DMlibMeshSetSystem_libMesh);CHKERRQ(ierr);
1228  ierr = PetscObjectComposeFunction((PetscObject)dm,"DMlibMeshGetSystem_C",PETSC_NULL,(PetscVoidFunction)DMlibMeshGetSystem_libMesh);CHKERRQ(ierr);
1229 #else
1230  ierr = PetscObjectComposeFunction((PetscObject)dm,"DMlibMeshSetSystem_C",DMlibMeshSetSystem_libMesh);CHKERRQ(ierr);
1231  ierr = PetscObjectComposeFunction((PetscObject)dm,"DMlibMeshGetSystem_C",DMlibMeshGetSystem_libMesh);CHKERRQ(ierr);
1232 #endif
1233 
1235 }

References DM_libMesh::blockids, DM_libMesh::blocknames, libMesh::CHKERRQ(), DM_libMesh::decomposition, DM_libMesh::decomposition_type, dlm, DMCreateDomainDecomposition_libMesh(), DMCreateDomainDecompositionDM_libMesh(), DMCreateFieldDecomposition_libMesh(), DMCreateFieldDecompositionDM_libMesh(), DMCreateGlobalVector_libMesh(), DMCreateMatrix_libMesh(), DMDestroy_libMesh(), DMlibMeshGetSystem_libMesh(), DMlibMeshSetSystem_libMesh(), DMSetUp_libMesh(), DMView_libMesh(), libMesh::ierr, PetscFunctionReturn(), DM_libMesh::varids, and DM_libMesh::varnames.

Referenced by libMesh::LibMeshInit::LibMeshInit().

◆ DMlibMeshGetSystem()

PETSC_EXTERN PetscErrorCode DMlibMeshGetSystem ( DM  ,
libMesh::NonlinearImplicitSystem *&   
)

Definition at line 53 of file petscdmlibmesh.C.

54 {
55  PetscErrorCode (*f)(DM,libMesh::NonlinearImplicitSystem *&) = nullptr;
56  PetscErrorCode ierr;
57 
58  PetscFunctionBegin;
59  PetscValidHeaderSpecific(dm,DM_CLASSID,1);
60 #if PETSC_RELEASE_LESS_THAN(3,4,0)
61  ierr = PetscObjectQueryFunction((PetscObject)dm,"DMlibMeshGetSystem_C",(PetscVoidFunction*)&f);CHKERRQ(ierr);
62 #else
63  ierr = PetscObjectQueryFunction((PetscObject)dm,"DMlibMeshGetSystem_C",&f);CHKERRQ(ierr);
64 #endif
65  if (!f) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP, "DM has no implementation for DMlibMeshGetSystem");
66  ierr = (*f)(dm,sys);CHKERRQ(ierr);
68 }

References CHKERRQ(), ierr, and PetscFunctionReturn().

Referenced by DMlibMeshFunction(), DMlibMeshJacobian(), and DMVariableBounds_libMesh().

◆ DMlibMeshSetSystem()

PETSC_EXTERN PetscErrorCode DMlibMeshSetSystem ( DM  ,
libMesh::NonlinearImplicitSystem  
)

Any functional implementation of the DMlibMesh API must compose the following functions with the DM object.

(See PETSc documentation on PetscObjectComposeFunction(), a polymorphism mechanism.) The following functions are called in PetscNonlinear Solver (others can be called by users): DMlibMeshSetSystem(), DMlibMeshGetSystem()

Any implementation needs to register its creation routine, DMCreate_libMesh, with PETSc using DMRegister().

Definition at line 34 of file petscdmlibmesh.C.

35 {
36  PetscErrorCode (*f)(DM,libMesh::NonlinearImplicitSystem &) = nullptr;
37  PetscErrorCode ierr;
38 
39  PetscFunctionBegin;
40  PetscValidHeaderSpecific(dm,DM_CLASSID,1);
41 #if PETSC_RELEASE_LESS_THAN(3,4,0)
42  ierr = PetscObjectQueryFunction((PetscObject)dm,"DMlibMeshSetSystem_C",(PetscVoidFunction*)&f);CHKERRQ(ierr);
43 #else
44  ierr = PetscObjectQueryFunction((PetscObject)dm,"DMlibMeshSetSystem_C",&f);CHKERRQ(ierr);
45 #endif
46  if (!f) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP, "DM has no implementation for DMlibMeshSetSystem");
47  ierr = (*f)(dm,sys);CHKERRQ(ierr);
49 }

References CHKERRQ(), ierr, and PetscFunctionReturn().

Referenced by libMesh::PetscNonlinearSolver< Number >::init().

DMCreateGlobalVector_libMesh
static PetscErrorCode DMCreateGlobalVector_libMesh(DM dm, Vec *x)
Definition: petscdmlibmeshimpl.C:980
dlm
DM_libMesh * dlm
Definition: petscdmlibmeshimpl.C:1029
DMView_libMesh
static PetscErrorCode DMView_libMesh(DM dm, PetscViewer viewer)
Definition: petscdmlibmeshimpl.C:1048
DM_libMesh::blockids
std::map< std::string, unsigned int > * blockids
Definition: petscdmlibmeshimpl.C:62
DMCreateFieldDecomposition_libMesh
static PetscErrorCode DMCreateFieldDecomposition_libMesh(DM dm, PetscInt *len, char ***namelist, IS **islist, DM **dmlist)
Definition: petscdmlibmeshimpl.C:272
DMCreateDomainDecomposition_libMesh
static PetscErrorCode DMCreateDomainDecomposition_libMesh(DM dm, PetscInt *len, char ***namelist, IS **innerislist, IS **outerislist, DM **dmlist)
Definition: petscdmlibmeshimpl.C:378
DMlibMeshSetSystem_libMesh
PetscErrorCode DMlibMeshSetSystem_libMesh(DM dm, NonlinearImplicitSystem &sys)
Definition: petscdmlibmeshimpl.C:90
DM_libMesh::decomposition_type
unsigned int decomposition_type
Definition: petscdmlibmeshimpl.C:64
DM_libMesh::decomposition
std::vector< std::set< unsigned int > > * decomposition
Definition: petscdmlibmeshimpl.C:65
DMSetUp_libMesh
static PetscErrorCode DMSetUp_libMesh(DM dm)
Definition: petscdmlibmeshimpl.C:1107
libMesh::NonlinearImplicitSystem
Manages consistently variables, degrees of freedom, coefficient vectors, matrices and non-linear solv...
Definition: nonlinear_implicit_system.h:54
DMlibMeshGetSystem_libMesh
PetscErrorCode DMlibMeshGetSystem_libMesh(DM dm, NonlinearImplicitSystem *&sys)
Definition: petscdmlibmeshimpl.C:151
DM_libMesh::varids
std::map< std::string, unsigned int > * varids
Definition: petscdmlibmeshimpl.C:60
DM_libMesh::blocknames
std::map< unsigned int, std::string > * blocknames
Definition: petscdmlibmeshimpl.C:63
DM_libMesh::varnames
std::map< unsigned int, std::string > * varnames
Definition: petscdmlibmeshimpl.C:61
DMCreateMatrix_libMesh
static PetscErrorCode DMCreateMatrix_libMesh(DM dm, const MatType, Mat *A) static PetscErrorCode DMCreateMatrix_libMesh(DM dm
DM_libMesh
Definition: petscdmlibmeshimpl.C:57
DMCreateFieldDecompositionDM_libMesh
static PetscErrorCode DMCreateFieldDecompositionDM_libMesh(DM dm, const char *ddesc, DM *ddm)
Definition: petscdmlibmeshimpl.C:745
DMDestroy_libMesh
static PetscErrorCode DMDestroy_libMesh(DM dm)
Definition: petscdmlibmeshimpl.C:1151
CHKERRQ
CHKERRQ(ierr)
ierr
PetscErrorCode ierr
Definition: petscdmlibmeshimpl.C:1028
DMCreateDomainDecompositionDM_libMesh
static PetscErrorCode DMCreateDomainDecompositionDM_libMesh(DM dm, const char *ddesc, DM *ddm)
Definition: petscdmlibmeshimpl.C:764
PetscFunctionReturn
PetscFunctionReturn(0)