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