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