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: if (DMFieldRegisterAllCalled) return 0;
21: DMFieldRegisterAllCalled = PETSC_TRUE;
22: DMFieldRegister(DMFIELDDA, DMFieldCreate_DA);
23: DMFieldRegister(DMFIELDDS, DMFieldCreate_DS);
24: DMFieldRegister(DMFIELDSHELL, DMFieldCreate_Shell);
25: return 0;
26: }
28: /*@C
29: DMFieldRegister - Adds an implementation of the `DMField` object.
31: Not collective
33: Input Parameters:
34: + name_impl - name of a new user-defined implementation
35: - routine_create - routine to create method context
37: Sample usage:
38: .vb
39: DMFieldRegister("my_impl",MyImplCreate);
40: .ve
42: Then, this implementation can be chosen with the procedural interface via
43: $ DMFieldSetType(tagger,"my_impl")
45: Level: advanced
47: Note:
48: `DMFieldRegister()` may be called multiple times to add several user-defined implementations.
50: .seealso: `DMField`, `DMFieldRegisterAll()`, `DMFieldRegisterDestroy()`
51: @*/
52: PetscErrorCode DMFieldRegister(const char sname[], PetscErrorCode (*function)(DMField))
53: {
54: PetscFunctionListAdd(&DMFieldList, sname, function);
55: return 0;
56: }