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