xref: /petsc/src/dm/field/interface/dmfieldregi.c (revision 2fe279fdf3e687a416e4eadb7d3c7a82d60442c6)
13da551e6SToby Isaac #include <petsc/private/dmfieldimpl.h> /*I  "petscdmfield.h"  I*/
23da551e6SToby Isaac 
33da551e6SToby Isaac PETSC_EXTERN PetscErrorCode DMFieldCreate_DA(DMField);
43da551e6SToby Isaac PETSC_EXTERN PetscErrorCode DMFieldCreate_DS(DMField);
53da551e6SToby Isaac PETSC_EXTERN PetscErrorCode DMFieldCreate_Shell(DMField);
63da551e6SToby Isaac 
73da551e6SToby Isaac PetscFunctionList DMFieldList;
83da551e6SToby Isaac 
93da551e6SToby Isaac /*@C
10dce8aebaSBarry Smith    DMFieldRegisterAll - Registers all the `DMField` implementations
113da551e6SToby Isaac 
123da551e6SToby Isaac    Not Collective
133da551e6SToby Isaac 
143da551e6SToby Isaac    Level: advanced
153da551e6SToby Isaac 
16dce8aebaSBarry Smith .seealso: `DMField`, `DMFieldRegisterDestroy()`
173da551e6SToby Isaac @*/
18d71ae5a4SJacob Faibussowitsch PetscErrorCode DMFieldRegisterAll(void)
19d71ae5a4SJacob Faibussowitsch {
203da551e6SToby Isaac   PetscFunctionBegin;
213ba16761SJacob Faibussowitsch   if (DMFieldRegisterAllCalled) PetscFunctionReturn(PETSC_SUCCESS);
223da551e6SToby Isaac   DMFieldRegisterAllCalled = PETSC_TRUE;
239566063dSJacob Faibussowitsch   PetscCall(DMFieldRegister(DMFIELDDA, DMFieldCreate_DA));
249566063dSJacob Faibussowitsch   PetscCall(DMFieldRegister(DMFIELDDS, DMFieldCreate_DS));
259566063dSJacob Faibussowitsch   PetscCall(DMFieldRegister(DMFIELDSHELL, DMFieldCreate_Shell));
263ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
273da551e6SToby Isaac }
283da551e6SToby Isaac 
293da551e6SToby Isaac /*@C
30dce8aebaSBarry Smith   DMFieldRegister  - Adds an implementation of the `DMField` object.
313da551e6SToby Isaac 
323da551e6SToby Isaac    Not collective
333da551e6SToby Isaac 
343da551e6SToby Isaac    Input Parameters:
35*2fe279fdSBarry Smith +  sname - name of a new user-defined implementation
36*2fe279fdSBarry Smith -  function - routine to create method context
373da551e6SToby Isaac 
383da551e6SToby Isaac    Sample usage:
393da551e6SToby Isaac .vb
403da551e6SToby Isaac    DMFieldRegister("my_impl",MyImplCreate);
413da551e6SToby Isaac .ve
423da551e6SToby Isaac 
433da551e6SToby Isaac    Then, this implementation can be chosen with the procedural interface via
443da551e6SToby Isaac $     DMFieldSetType(tagger,"my_impl")
453da551e6SToby Isaac 
463da551e6SToby Isaac    Level: advanced
473da551e6SToby Isaac 
48dce8aebaSBarry Smith    Note:
49dce8aebaSBarry Smith    `DMFieldRegister()` may be called multiple times to add several user-defined implementations.
50dce8aebaSBarry Smith 
51dce8aebaSBarry Smith .seealso: `DMField`, `DMFieldRegisterAll()`, `DMFieldRegisterDestroy()`
523da551e6SToby Isaac @*/
53d71ae5a4SJacob Faibussowitsch PetscErrorCode DMFieldRegister(const char sname[], PetscErrorCode (*function)(DMField))
54d71ae5a4SJacob Faibussowitsch {
553da551e6SToby Isaac   PetscFunctionBegin;
569566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListAdd(&DMFieldList, sname, function));
573ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
583da551e6SToby Isaac }
59