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