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