1 #include <petsc/private/dmfieldimpl.h> /*I "petscdmfield.h" I*/
2
3 PETSC_EXTERN PetscErrorCode DMFieldCreate_DA(DMField);
4 PETSC_EXTERN PetscErrorCode DMFieldCreate_DS(DMField);
5 PETSC_EXTERN PetscErrorCode DMFieldCreate_Shell(DMField);
6
7 PetscFunctionList DMFieldList;
8
9 /*@C
10 DMFieldRegisterAll - Registers all the `DMField` implementations
11
12 Not Collective
13
14 Level: advanced
15
16 .seealso: `DMField`, `DMFieldRegisterDestroy()`
17 @*/
DMFieldRegisterAll(void)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 }
28
29 /*@C
30 DMFieldRegister - Adds an implementation of the `DMField` object.
31
32 Not collective, No Fortran Support
33
34 Input Parameters:
35 + sname - name of a new user-defined implementation
36 - function - routine to create method context
37
38 Example Usage:
39 .vb
40 DMFieldRegister("my_impl",MyImplCreate);
41 .ve
42
43 Then, this implementation can be chosen with the procedural interface via
44 .vb
45 DMFieldSetType(tagger, "my_impl")
46 .ve
47
48 Level: advanced
49
50 Note:
51 `DMFieldRegister()` may be called multiple times to add several user-defined implementations.
52
53 .seealso: `DMField`, `DMFieldRegisterAll()`, `DMFieldRegisterDestroy()`
54 @*/
DMFieldRegister(const char sname[],PetscErrorCode (* function)(DMField))55 PetscErrorCode DMFieldRegister(const char sname[], PetscErrorCode (*function)(DMField))
56 {
57 PetscFunctionBegin;
58 PetscCall(PetscFunctionListAdd(&DMFieldList, sname, function));
59 PetscFunctionReturn(PETSC_SUCCESS);
60 }
61