Actual source code: dmfieldregi.c

  1: #include <petsc/private/dmfieldimpl.h>

  3: PETSC_EXTERN PetscErrorCode DMFieldCreate_DA(DMField);
  4: PETSC_EXTERN PetscErrorCode DMFieldCreate_DS(DMField);
  5: PETSC_EXTERN PetscErrorCode DMFieldCreate_Shell(DMField);

  7: PetscFunctionList DMFieldList;

  9: /*@C
 10:   DMFieldRegisterAll - Registers all the `DMField` implementations

 12:   Not Collective

 14:   Level: advanced

 16: .seealso: `DMField`, `DMFieldRegisterDestroy()`
 17: @*/
 18: PetscErrorCode DMFieldRegisterAll(void)
 19: {
 20:   PetscFunctionBegin;
 21:   if (DMFieldRegisterAllCalled) PetscFunctionReturn(PETSC_SUCCESS);
 22:   DMFieldRegisterAllCalled = PETSC_TRUE;
 23:   PetscCall(DMFieldRegister(DMFIELDDA, DMFieldCreate_DA));
 24:   PetscCall(DMFieldRegister(DMFIELDDS, DMFieldCreate_DS));
 25:   PetscCall(DMFieldRegister(DMFIELDSHELL, DMFieldCreate_Shell));
 26:   PetscFunctionReturn(PETSC_SUCCESS);
 27: }

 29: /*@C
 30:   DMFieldRegister  - Adds an implementation of the `DMField` object.

 32:   Not collective

 34:   Input Parameters:
 35: + sname    - name of a new user-defined implementation
 36: - function - routine to create method context

 38:   Example Usage:
 39: .vb
 40:    DMFieldRegister("my_impl",MyImplCreate);
 41: .ve

 43:   Then, this implementation can be chosen with the procedural interface via
 44: $     DMFieldSetType(tagger,"my_impl")

 46:   Level: advanced

 48:   Note:
 49:   `DMFieldRegister()` may be called multiple times to add several user-defined implementations.

 51: .seealso: `DMField`, `DMFieldRegisterAll()`, `DMFieldRegisterDestroy()`
 52: @*/
 53: PetscErrorCode DMFieldRegister(const char sname[], PetscErrorCode (*function)(DMField))
 54: {
 55:   PetscFunctionBegin;
 56:   PetscCall(PetscFunctionListAdd(&DMFieldList, sname, function));
 57:   PetscFunctionReturn(PETSC_SUCCESS);
 58: }