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