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 103da551e6SToby Isaac DMFieldRegisterAll - Registers all the DMField implementations 113da551e6SToby Isaac 123da551e6SToby Isaac Not Collective 133da551e6SToby Isaac 143da551e6SToby Isaac Level: advanced 153da551e6SToby Isaac 16db781477SPatrick Sanan .seealso: `DMFieldRegisterDestroy()` 173da551e6SToby Isaac @*/ 18*d71ae5a4SJacob Faibussowitsch PetscErrorCode DMFieldRegisterAll(void) 19*d71ae5a4SJacob 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 303da551e6SToby Isaac 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 Notes: 393da551e6SToby Isaac DMFieldRegister() may be called multiple times to add several user-defined implementations. 403da551e6SToby Isaac 413da551e6SToby Isaac Sample usage: 423da551e6SToby Isaac .vb 433da551e6SToby Isaac DMFieldRegister("my_impl",MyImplCreate); 443da551e6SToby Isaac .ve 453da551e6SToby Isaac 463da551e6SToby Isaac Then, this implementation can be chosen with the procedural interface via 473da551e6SToby Isaac $ DMFieldSetType(tagger,"my_impl") 483da551e6SToby Isaac 493da551e6SToby Isaac Level: advanced 503da551e6SToby Isaac 51db781477SPatrick Sanan .seealso: `DMFieldRegisterAll()`, `DMFieldRegisterDestroy()` 523da551e6SToby Isaac @*/ 53*d71ae5a4SJacob Faibussowitsch PetscErrorCode DMFieldRegister(const char sname[], PetscErrorCode (*function)(DMField)) 54*d71ae5a4SJacob Faibussowitsch { 553da551e6SToby Isaac PetscFunctionBegin; 569566063dSJacob Faibussowitsch PetscCall(PetscFunctionListAdd(&DMFieldList, sname, function)); 573da551e6SToby Isaac PetscFunctionReturn(0); 583da551e6SToby Isaac } 59