xref: /petsc/src/dm/field/interface/dmfieldregi.c (revision ccb4e88a40f0b86eaeca07ff64c64e4de2fae686)
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:  DMFieldRegisterDestroy()
17 @*/
18 PetscErrorCode  DMFieldRegisterAll(void)
19 {
20   PetscErrorCode ierr;
21 
22   PetscFunctionBegin;
23   if (DMFieldRegisterAllCalled) PetscFunctionReturn(0);
24   DMFieldRegisterAllCalled = PETSC_TRUE;
25   ierr = DMFieldRegister(DMFIELDDA,    DMFieldCreate_DA);CHKERRQ(ierr);
26   ierr = DMFieldRegister(DMFIELDDS,    DMFieldCreate_DS);CHKERRQ(ierr);
27   ierr = DMFieldRegister(DMFIELDSHELL, DMFieldCreate_Shell);CHKERRQ(ierr);
28   PetscFunctionReturn(0);
29 }
30 
31 /*@C
32   DMFieldRegister  - Adds an implementation of the DMField object.
33 
34    Not collective
35 
36    Input Parameters:
37 +  name_impl - name of a new user-defined implementation
38 -  routine_create - routine to create method context
39 
40    Notes:
41    DMFieldRegister() may be called multiple times to add several user-defined implementations.
42 
43    Sample usage:
44 .vb
45    DMFieldRegister("my_impl",MyImplCreate);
46 .ve
47 
48    Then, this implementation can be chosen with the procedural interface via
49 $     DMFieldSetType(tagger,"my_impl")
50 
51    Level: advanced
52 
53 .seealso: DMFieldRegisterAll(), DMFieldRegisterDestroy()
54 @*/
55 PetscErrorCode  DMFieldRegister(const char sname[],PetscErrorCode (*function)(DMField))
56 {
57   PetscErrorCode ierr;
58 
59   PetscFunctionBegin;
60   ierr = PetscFunctionListAdd(&DMFieldList,sname,function);CHKERRQ(ierr);
61   PetscFunctionReturn(0);
62 }
63 
64