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: `DMField`, `DMFieldRegisterDestroy()` 17 @*/ 18 PetscErrorCode DMFieldRegisterAll(void) 19 { 20 PetscFunctionBegin; 21 if (DMFieldRegisterAllCalled) PetscFunctionReturn(PETSC_SUCCESS); 22 DMFieldRegisterAllCalled = PETSC_TRUE; 23 PetscCall(DMFieldRegister(DMFIELDDA, DMFieldCreate_DA)); 24 PetscCall(DMFieldRegister(DMFIELDDS, DMFieldCreate_DS)); 25 PetscCall(DMFieldRegister(DMFIELDSHELL, DMFieldCreate_Shell)); 26 PetscFunctionReturn(PETSC_SUCCESS); 27 } 28 29 /*@C 30 DMFieldRegister - Adds an implementation of the `DMField` object. 31 32 Not collective, No Fortran Support 33 34 Input Parameters: 35 + sname - name of a new user-defined implementation 36 - function - routine to create method context 37 38 Example Usage: 39 .vb 40 DMFieldRegister("my_impl",MyImplCreate); 41 .ve 42 43 Then, this implementation can be chosen with the procedural interface via 44 .vb 45 DMFieldSetType(tagger, "my_impl") 46 .ve 47 48 Level: advanced 49 50 Note: 51 `DMFieldRegister()` may be called multiple times to add several user-defined implementations. 52 53 .seealso: `DMField`, `DMFieldRegisterAll()`, `DMFieldRegisterDestroy()` 54 @*/ 55 PetscErrorCode DMFieldRegister(const char sname[], PetscErrorCode (*function)(DMField)) 56 { 57 PetscFunctionBegin; 58 PetscCall(PetscFunctionListAdd(&DMFieldList, sname, function)); 59 PetscFunctionReturn(PETSC_SUCCESS); 60 } 61