1 #include <petsc/private/dmfieldimpl.h> /*I "petscdmfield.h" I*/ 2 3 PETSC_EXTERN PetscErrorCode DMFieldCreate_DA(DMField); 4 PETSC_EXTERN PetscErrorCode DMFieldCreate_DS(DMField); 5 PETSC_EXTERN PetscErrorCode DMFieldCreate_Shell(DMField); 6 7 PetscFunctionList DMFieldList; 8 9 /*@C 10 DMFieldRegisterAll - Registers all the DMField implementations 11 12 Not Collective 13 14 Level: advanced 15 16 .seealso: `DMFieldRegisterDestroy()` 17 @*/ 18 PetscErrorCode DMFieldRegisterAll(void) { 19 PetscFunctionBegin; 20 if (DMFieldRegisterAllCalled) PetscFunctionReturn(0); 21 DMFieldRegisterAllCalled = PETSC_TRUE; 22 PetscCall(DMFieldRegister(DMFIELDDA, DMFieldCreate_DA)); 23 PetscCall(DMFieldRegister(DMFIELDDS, DMFieldCreate_DS)); 24 PetscCall(DMFieldRegister(DMFIELDSHELL, DMFieldCreate_Shell)); 25 PetscFunctionReturn(0); 26 } 27 28 /*@C 29 DMFieldRegister - Adds an implementation of the DMField object. 30 31 Not collective 32 33 Input Parameters: 34 + name_impl - name of a new user-defined implementation 35 - routine_create - routine to create method context 36 37 Notes: 38 DMFieldRegister() may be called multiple times to add several user-defined implementations. 39 40 Sample usage: 41 .vb 42 DMFieldRegister("my_impl",MyImplCreate); 43 .ve 44 45 Then, this implementation can be chosen with the procedural interface via 46 $ DMFieldSetType(tagger,"my_impl") 47 48 Level: advanced 49 50 .seealso: `DMFieldRegisterAll()`, `DMFieldRegisterDestroy()` 51 @*/ 52 PetscErrorCode DMFieldRegister(const char sname[], PetscErrorCode (*function)(DMField)) { 53 PetscFunctionBegin; 54 PetscCall(PetscFunctionListAdd(&DMFieldList, sname, function)); 55 PetscFunctionReturn(0); 56 } 57