petsc-3.14.6 2021-03-30
DMSetNullSpaceConstructor
Provide a callback function which constructs the nullspace for a given field
Synopsis
#include "petscdm.h"
#include "petscdmlabel.h"
#include "petscds.h"
PetscErrorCode DMCreateFieldIS(DM dm, PetscInt *numFields, char ***fieldNames, IS **fields)
Logically collective on DM
Input Parameters
| dm | - The DM
|
| field | - The field number for the nullspace
|
| nullsp | - A callback to create the nullspace
|
Notes
The callback is intended to provide nullspaces when function spaces are joined or split, such as in DMCreateSubDM(). The calling sequence is
PetscErrorCode nullsp(DM dm, PetscInt origField, PetscInt field, MatNullSpace *nullSpace)
dm - The present DM
origField - The field number given above, in the original DM
field - The field number in dm
nullSpace - The nullspace for the given field
This function is currently not available from Fortran.
See Also
DMGetNullSpaceConstructor(), DMSetNearNullSpaceConstructor(), DMGetNearNullSpaceConstructor(), DMCreateSubDM(), DMCreateSuperDM()
*/
PetscErrorCode DMSetNullSpaceConstructor(DM dm, PetscInt field, PetscErrorCode (*nullsp)(DM dm, PetscInt origField, PetscInt field, MatNullSpace *nullSpace))
{
PetscFunctionBegin;
PetscValidHeaderSpecific(dm, DM_CLASSID, 1);
if (field >= 10) SETERRQ1(PetscObjectComm((PetscObject)dm), PETSC_ERR_ARG_OUTOFRANGE, "Cannot handle %d >= 10 fields", field);
dm->nullspaceConstructors[field] = nullsp;
PetscFunctionReturn(0);
}
/*@C
DMGetNullSpaceConstructor - Return the callback function which constructs the nullspace for a given field, or NULL
Not collective
Input Parameters
| dm | - The DM
|
| field | - The field number for the nullspace
|
Output Parameter
| nullsp | - A callback to create the nullspace
|
Notes
The callback is intended to provide nullspaces when function spaces are joined or split, such as in DMCreateSubDM(). The calling sequence is
PetscErrorCode nullsp(DM dm, PetscInt origField, PetscInt field, MatNullSpace *nullSpace)
dm - The present DM
origField - The field number given above, in the original DM
field - The field number in dm
nullSpace - The nullspace for the given field
This function is currently not available from Fortran.
See Also
DMSetNullSpaceConstructor(), DMSetNearNullSpaceConstructor(), DMGetNearNullSpaceConstructor(), DMCreateSubDM(), DMCreateSuperDM()
*/
PetscErrorCode DMGetNullSpaceConstructor(DM dm, PetscInt field, PetscErrorCode (**nullsp)(DM dm, PetscInt origField, PetscInt field, MatNullSpace *nullSpace))
{
PetscFunctionBegin;
PetscValidHeaderSpecific(dm, DM_CLASSID, 1);
PetscValidPointer(nullsp, 3);
if (field >= 10) SETERRQ1(PetscObjectComm((PetscObject)dm), PETSC_ERR_ARG_OUTOFRANGE, "Cannot handle %d >= 10 fields", field);
*nullsp = dm->nullspaceConstructors[field];
PetscFunctionReturn(0);
}
/*@C
DMSetNearNullSpaceConstructor - Provide a callback function which constructs the near-nullspace for a given field
Logically collective on DM
Input Parameters
| dm | - The DM
|
| field | - The field number for the nullspace
|
| nullsp | - A callback to create the near-nullspace
|
Notes
The callback is intended to provide nullspaces when function spaces are joined or split, such as in DMCreateSubDM(). The calling sequence is
PetscErrorCode nullsp(DM dm, PetscInt origField, PetscInt field, MatNullSpace *nullSpace)
dm - The present DM
origField - The field number given above, in the original DM
field - The field number in dm
nullSpace - The nullspace for the given field
This function is currently not available from Fortran.
See Also
DMGetNearNullSpaceConstructor(), DMSetNullSpaceConstructor(), DMGetNullSpaceConstructor(), DMCreateSubDM(), DMCreateSuperDM()
*/
PetscErrorCode DMSetNearNullSpaceConstructor(DM dm, PetscInt field, PetscErrorCode (*nullsp)(DM dm, PetscInt origField, PetscInt field, MatNullSpace *nullSpace))
{
PetscFunctionBegin;
PetscValidHeaderSpecific(dm, DM_CLASSID, 1);
if (field >= 10) SETERRQ1(PetscObjectComm((PetscObject)dm), PETSC_ERR_ARG_OUTOFRANGE, "Cannot handle %d >= 10 fields", field);
dm->nearnullspaceConstructors[field] = nullsp;
PetscFunctionReturn(0);
}
/*@C
DMGetNearNullSpaceConstructor - Return the callback function which constructs the near-nullspace for a given field, or NULL
Not collective
Input Parameters
| dm | - The DM
|
| field | - The field number for the nullspace
|
Output Parameter
| nullsp | - A callback to create the near-nullspace
|
Notes
The callback is intended to provide nullspaces when function spaces are joined or split, such as in DMCreateSubDM(). The calling sequence is
PetscErrorCode nullsp(DM dm, PetscInt origField, PetscInt field, MatNullSpace *nullSpace)
dm - The present DM
origField - The field number given above, in the original DM
field - The field number in dm
nullSpace - The nullspace for the given field
This function is currently not available from Fortran.
See Also
DMSetNearNullSpaceConstructor(), DMSetNullSpaceConstructor(), DMGetNullSpaceConstructor(), DMCreateSubDM(), DMCreateSuperDM()
*/
PetscErrorCode DMGetNearNullSpaceConstructor(DM dm, PetscInt field, PetscErrorCode (**nullsp)(DM dm, PetscInt origField, PetscInt field, MatNullSpace *nullSpace))
{
PetscFunctionBegin;
PetscValidHeaderSpecific(dm, DM_CLASSID, 1);
PetscValidPointer(nullsp, 3);
if (field >= 10) SETERRQ1(PetscObjectComm((PetscObject)dm), PETSC_ERR_ARG_OUTOFRANGE, "Cannot handle %d >= 10 fields", field);
*nullsp = dm->nearnullspaceConstructors[field];
PetscFunctionReturn(0);
}
/*@C
DMCreateFieldIS - Creates a set of IS objects with the global indices of dofs for each field
Not collective
Input Parameter
Output Parameters
| numFields | - The number of fields (or NULL if not requested)
|
| fieldNames | - The name for each field (or NULL if not requested)
|
| fields | - The global indices for each field (or NULL if not requested)
|
Notes
The user is responsible for freeing all requested arrays. In particular, every entry of names should be freed with
PetscFree(), every entry of fields should be destroyed with ISDestroy(), and both arrays should be freed with
PetscFree().
See Also
DMDestroy(), DMView(), DMCreateInterpolation(), DMCreateColoring(), DMCreateMatrix()
Level
intermediate
Location
src/dm/interface/dm.c
Examples
src/snes/tutorials/ex62.c.html
Index of all DM routines
Table of Contents for all manual pages
Index of all manual pages