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 @*/
DMFieldRegisterAll(void)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
32cc4c1da9SBarry Smith Not collective, No Fortran Support
333da551e6SToby Isaac
343da551e6SToby Isaac Input Parameters:
352fe279fdSBarry Smith + sname - name of a new user-defined implementation
362fe279fdSBarry Smith - function - routine to create method context
373da551e6SToby Isaac
3860225df5SJacob Faibussowitsch Example 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
44*b44f4de4SBarry Smith .vb
45*b44f4de4SBarry Smith DMFieldSetType(tagger, "my_impl")
46*b44f4de4SBarry Smith .ve
473da551e6SToby Isaac
483da551e6SToby Isaac Level: advanced
493da551e6SToby Isaac
50dce8aebaSBarry Smith Note:
51dce8aebaSBarry Smith `DMFieldRegister()` may be called multiple times to add several user-defined implementations.
52dce8aebaSBarry Smith
53dce8aebaSBarry Smith .seealso: `DMField`, `DMFieldRegisterAll()`, `DMFieldRegisterDestroy()`
543da551e6SToby Isaac @*/
DMFieldRegister(const char sname[],PetscErrorCode (* function)(DMField))55d71ae5a4SJacob Faibussowitsch PetscErrorCode DMFieldRegister(const char sname[], PetscErrorCode (*function)(DMField))
56d71ae5a4SJacob Faibussowitsch {
573da551e6SToby Isaac PetscFunctionBegin;
589566063dSJacob Faibussowitsch PetscCall(PetscFunctionListAdd(&DMFieldList, sname, function));
593ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
603da551e6SToby Isaac }
61