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 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 @*/ 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