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 10*dce8aebaSBarry Smith DMFieldRegisterAll - Registers all the `DMField` implementations 113da551e6SToby Isaac 123da551e6SToby Isaac Not Collective 133da551e6SToby Isaac 143da551e6SToby Isaac Level: advanced 153da551e6SToby Isaac 16*dce8aebaSBarry Smith .seealso: `DMField`, `DMFieldRegisterDestroy()` 173da551e6SToby Isaac @*/ 18d71ae5a4SJacob Faibussowitsch PetscErrorCode DMFieldRegisterAll(void) 19d71ae5a4SJacob Faibussowitsch { 203da551e6SToby Isaac PetscFunctionBegin; 213da551e6SToby Isaac if (DMFieldRegisterAllCalled) PetscFunctionReturn(0); 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)); 263da551e6SToby Isaac PetscFunctionReturn(0); 273da551e6SToby Isaac } 283da551e6SToby Isaac 293da551e6SToby Isaac /*@C 30*dce8aebaSBarry Smith DMFieldRegister - Adds an implementation of the `DMField` object. 313da551e6SToby Isaac 323da551e6SToby Isaac Not collective 333da551e6SToby Isaac 343da551e6SToby Isaac Input Parameters: 353da551e6SToby Isaac + name_impl - name of a new user-defined implementation 363da551e6SToby Isaac - routine_create - 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 48*dce8aebaSBarry Smith Note: 49*dce8aebaSBarry Smith `DMFieldRegister()` may be called multiple times to add several user-defined implementations. 50*dce8aebaSBarry Smith 51*dce8aebaSBarry 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)); 573da551e6SToby Isaac PetscFunctionReturn(0); 583da551e6SToby Isaac } 59