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, No Fortran Support
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: .vb
45: DMFieldSetType(tagger, "my_impl")
46: .ve
48: Level: advanced
50: Note:
51: `DMFieldRegister()` may be called multiple times to add several user-defined implementations.
53: .seealso: `DMField`, `DMFieldRegisterAll()`, `DMFieldRegisterDestroy()`
54: @*/
55: PetscErrorCode DMFieldRegister(const char sname[], PetscErrorCode (*function)(DMField))
56: {
57: PetscFunctionBegin;
58: PetscCall(PetscFunctionListAdd(&DMFieldList, sname, function));
59: PetscFunctionReturn(PETSC_SUCCESS);
60: }