xref: /petsc/src/dm/field/interface/dmfieldregi.c (revision 3da551e6902c90981197ed1d321ca1b1c7d15a9d)
1*3da551e6SToby Isaac #include <petsc/private/dmfieldimpl.h>     /*I  "petscdmfield.h"  I*/
2*3da551e6SToby Isaac 
3*3da551e6SToby Isaac PETSC_EXTERN PetscErrorCode DMFieldCreate_DA(DMField);
4*3da551e6SToby Isaac PETSC_EXTERN PetscErrorCode DMFieldCreate_DS(DMField);
5*3da551e6SToby Isaac PETSC_EXTERN PetscErrorCode DMFieldCreate_Shell(DMField);
6*3da551e6SToby Isaac 
7*3da551e6SToby Isaac PetscFunctionList DMFieldList;
8*3da551e6SToby Isaac 
9*3da551e6SToby Isaac /*@C
10*3da551e6SToby Isaac    DMFieldRegisterAll - Registers all the DMField implementations
11*3da551e6SToby Isaac 
12*3da551e6SToby Isaac    Not Collective
13*3da551e6SToby Isaac 
14*3da551e6SToby Isaac    Level: advanced
15*3da551e6SToby Isaac 
16*3da551e6SToby Isaac .keywords: DMField, register, all
17*3da551e6SToby Isaac 
18*3da551e6SToby Isaac .seealso:  DMFieldRegisterDestroy()
19*3da551e6SToby Isaac @*/
20*3da551e6SToby Isaac PetscErrorCode  DMFieldRegisterAll(void)
21*3da551e6SToby Isaac {
22*3da551e6SToby Isaac   PetscErrorCode ierr;
23*3da551e6SToby Isaac 
24*3da551e6SToby Isaac   PetscFunctionBegin;
25*3da551e6SToby Isaac   if (DMFieldRegisterAllCalled) PetscFunctionReturn(0);
26*3da551e6SToby Isaac   DMFieldRegisterAllCalled = PETSC_TRUE;
27*3da551e6SToby Isaac   ierr = DMFieldRegister(DMFIELDDA,    DMFieldCreate_DA);CHKERRQ(ierr);
28*3da551e6SToby Isaac   ierr = DMFieldRegister(DMFIELDDS,    DMFieldCreate_DS);CHKERRQ(ierr);
29*3da551e6SToby Isaac   ierr = DMFieldRegister(DMFIELDSHELL, DMFieldCreate_Shell);CHKERRQ(ierr);
30*3da551e6SToby Isaac   PetscFunctionReturn(0);
31*3da551e6SToby Isaac }
32*3da551e6SToby Isaac 
33*3da551e6SToby Isaac /*@C
34*3da551e6SToby Isaac   DMFieldRegister  - Adds an implementation of the DMField object.
35*3da551e6SToby Isaac 
36*3da551e6SToby Isaac    Not collective
37*3da551e6SToby Isaac 
38*3da551e6SToby Isaac    Input Parameters:
39*3da551e6SToby Isaac +  name_impl - name of a new user-defined implementation
40*3da551e6SToby Isaac -  routine_create - routine to create method context
41*3da551e6SToby Isaac 
42*3da551e6SToby Isaac    Notes:
43*3da551e6SToby Isaac    DMFieldRegister() may be called multiple times to add several user-defined implementations.
44*3da551e6SToby Isaac 
45*3da551e6SToby Isaac    Sample usage:
46*3da551e6SToby Isaac .vb
47*3da551e6SToby Isaac    DMFieldRegister("my_impl",MyImplCreate);
48*3da551e6SToby Isaac .ve
49*3da551e6SToby Isaac 
50*3da551e6SToby Isaac    Then, this implementation can be chosen with the procedural interface via
51*3da551e6SToby Isaac $     DMFieldSetType(tagger,"my_impl")
52*3da551e6SToby Isaac 
53*3da551e6SToby Isaac    Level: advanced
54*3da551e6SToby Isaac 
55*3da551e6SToby Isaac .keywords: DMField, register
56*3da551e6SToby Isaac 
57*3da551e6SToby Isaac .seealso: DMFieldRegisterAll(), DMFieldRegisterDestroy()
58*3da551e6SToby Isaac @*/
59*3da551e6SToby Isaac PetscErrorCode  DMFieldRegister(const char sname[],PetscErrorCode (*function)(DMField))
60*3da551e6SToby Isaac {
61*3da551e6SToby Isaac   PetscErrorCode ierr;
62*3da551e6SToby Isaac 
63*3da551e6SToby Isaac   PetscFunctionBegin;
64*3da551e6SToby Isaac   ierr = PetscFunctionListAdd(&DMFieldList,sname,function);CHKERRQ(ierr);
65*3da551e6SToby Isaac   PetscFunctionReturn(0);
66*3da551e6SToby Isaac }
67*3da551e6SToby Isaac 
68