1*47c6ae99SBarry Smith #define PETSCDM_DLL 2*47c6ae99SBarry Smith 3*47c6ae99SBarry Smith #include "private/daimpl.h" /*I "petscda.h" I*/ 4*47c6ae99SBarry Smith 5*47c6ae99SBarry Smith PetscFList DAList = PETSC_NULL; 6*47c6ae99SBarry Smith PetscBool DARegisterAllCalled = PETSC_FALSE; 7*47c6ae99SBarry Smith 8*47c6ae99SBarry Smith #undef __FUNCT__ 9*47c6ae99SBarry Smith #define __FUNCT__ "DASetType" 10*47c6ae99SBarry Smith /*@C 11*47c6ae99SBarry Smith DASetType - Builds a DA, for a particular DA implementation. 12*47c6ae99SBarry Smith 13*47c6ae99SBarry Smith Collective on DA 14*47c6ae99SBarry Smith 15*47c6ae99SBarry Smith Input Parameters: 16*47c6ae99SBarry Smith + da - The DA object 17*47c6ae99SBarry Smith - method - The name of the DA type 18*47c6ae99SBarry Smith 19*47c6ae99SBarry Smith Options Database Key: 20*47c6ae99SBarry Smith . -da_type <type> - Sets the DA type; use -help for a list of available types 21*47c6ae99SBarry Smith 22*47c6ae99SBarry Smith Notes: 23*47c6ae99SBarry Smith See "petsc/include/petscda.h" for available DA types (for instance, DA1D, DA2D, or DA3D). 24*47c6ae99SBarry Smith 25*47c6ae99SBarry Smith Level: intermediate 26*47c6ae99SBarry Smith 27*47c6ae99SBarry Smith .keywords: DA, set, type 28*47c6ae99SBarry Smith .seealso: DAGetType(), DACreate() 29*47c6ae99SBarry Smith @*/ 30*47c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DASetType(DA da, const DAType method) 31*47c6ae99SBarry Smith { 32*47c6ae99SBarry Smith PetscErrorCode (*r)(DA); 33*47c6ae99SBarry Smith PetscBool match; 34*47c6ae99SBarry Smith PetscErrorCode ierr; 35*47c6ae99SBarry Smith 36*47c6ae99SBarry Smith PetscFunctionBegin; 37*47c6ae99SBarry Smith PetscValidHeaderSpecific(da, DM_CLASSID,1); 38*47c6ae99SBarry Smith ierr = PetscTypeCompare((PetscObject) da, method, &match);CHKERRQ(ierr); 39*47c6ae99SBarry Smith if (match) PetscFunctionReturn(0); 40*47c6ae99SBarry Smith 41*47c6ae99SBarry Smith if (!DARegisterAllCalled) {ierr = DARegisterAll(PETSC_NULL);CHKERRQ(ierr);} 42*47c6ae99SBarry Smith ierr = PetscFListFind(DAList, ((PetscObject)da)->comm, method,(void (**)(void)) &r);CHKERRQ(ierr); 43*47c6ae99SBarry Smith if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE, "Unknown DA type: %s", method); 44*47c6ae99SBarry Smith 45*47c6ae99SBarry Smith if (da->ops->destroy) { 46*47c6ae99SBarry Smith ierr = (*da->ops->destroy)(da);CHKERRQ(ierr); 47*47c6ae99SBarry Smith } 48*47c6ae99SBarry Smith ierr = (*r)(da);CHKERRQ(ierr); 49*47c6ae99SBarry Smith ierr = PetscObjectChangeTypeName((PetscObject)da,method);CHKERRQ(ierr); 50*47c6ae99SBarry Smith PetscFunctionReturn(0); 51*47c6ae99SBarry Smith } 52*47c6ae99SBarry Smith 53*47c6ae99SBarry Smith #undef __FUNCT__ 54*47c6ae99SBarry Smith #define __FUNCT__ "DAGetType" 55*47c6ae99SBarry Smith /*@C 56*47c6ae99SBarry Smith DAGetType - Gets the DA type name (as a string) from the DA. 57*47c6ae99SBarry Smith 58*47c6ae99SBarry Smith Not Collective 59*47c6ae99SBarry Smith 60*47c6ae99SBarry Smith Input Parameter: 61*47c6ae99SBarry Smith . da - The DA 62*47c6ae99SBarry Smith 63*47c6ae99SBarry Smith Output Parameter: 64*47c6ae99SBarry Smith . type - The DA type name 65*47c6ae99SBarry Smith 66*47c6ae99SBarry Smith Level: intermediate 67*47c6ae99SBarry Smith 68*47c6ae99SBarry Smith .keywords: DA, get, type, name 69*47c6ae99SBarry Smith .seealso: DASetType(), DACreate() 70*47c6ae99SBarry Smith @*/ 71*47c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DAGetType(DA da, const DAType *type) 72*47c6ae99SBarry Smith { 73*47c6ae99SBarry Smith PetscErrorCode ierr; 74*47c6ae99SBarry Smith 75*47c6ae99SBarry Smith PetscFunctionBegin; 76*47c6ae99SBarry Smith PetscValidHeaderSpecific(da, DM_CLASSID,1); 77*47c6ae99SBarry Smith PetscValidCharPointer(type,2); 78*47c6ae99SBarry Smith if (!DARegisterAllCalled) { 79*47c6ae99SBarry Smith ierr = DARegisterAll(PETSC_NULL);CHKERRQ(ierr); 80*47c6ae99SBarry Smith } 81*47c6ae99SBarry Smith *type = ((PetscObject)da)->type_name; 82*47c6ae99SBarry Smith PetscFunctionReturn(0); 83*47c6ae99SBarry Smith } 84*47c6ae99SBarry Smith 85*47c6ae99SBarry Smith 86*47c6ae99SBarry Smith /*--------------------------------------------------------------------------------------------------------------------*/ 87*47c6ae99SBarry Smith 88*47c6ae99SBarry Smith #undef __FUNCT__ 89*47c6ae99SBarry Smith #define __FUNCT__ "DARegister" 90*47c6ae99SBarry Smith /*@C 91*47c6ae99SBarry Smith DARegister - See DARegisterDynamic() 92*47c6ae99SBarry Smith 93*47c6ae99SBarry Smith Level: advanced 94*47c6ae99SBarry Smith @*/ 95*47c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DARegister(const char sname[], const char path[], const char name[], PetscErrorCode (*function)(DA)) 96*47c6ae99SBarry Smith { 97*47c6ae99SBarry Smith char fullname[PETSC_MAX_PATH_LEN]; 98*47c6ae99SBarry Smith PetscErrorCode ierr; 99*47c6ae99SBarry Smith 100*47c6ae99SBarry Smith PetscFunctionBegin; 101*47c6ae99SBarry Smith ierr = PetscStrcpy(fullname, path);CHKERRQ(ierr); 102*47c6ae99SBarry Smith ierr = PetscStrcat(fullname, ":");CHKERRQ(ierr); 103*47c6ae99SBarry Smith ierr = PetscStrcat(fullname, name);CHKERRQ(ierr); 104*47c6ae99SBarry Smith ierr = PetscFListAdd(&DAList, sname, fullname, (void (*)(void)) function);CHKERRQ(ierr); 105*47c6ae99SBarry Smith PetscFunctionReturn(0); 106*47c6ae99SBarry Smith } 107*47c6ae99SBarry Smith 108*47c6ae99SBarry Smith 109*47c6ae99SBarry Smith /*--------------------------------------------------------------------------------------------------------------------*/ 110*47c6ae99SBarry Smith #undef __FUNCT__ 111*47c6ae99SBarry Smith #define __FUNCT__ "DARegisterDestroy" 112*47c6ae99SBarry Smith /*@C 113*47c6ae99SBarry Smith DARegisterDestroy - Frees the list of DA methods that were registered by DARegister()/DARegisterDynamic(). 114*47c6ae99SBarry Smith 115*47c6ae99SBarry Smith Not Collective 116*47c6ae99SBarry Smith 117*47c6ae99SBarry Smith Level: advanced 118*47c6ae99SBarry Smith 119*47c6ae99SBarry Smith .keywords: DA, register, destroy 120*47c6ae99SBarry Smith .seealso: DARegister(), DARegisterAll(), DARegisterDynamic() 121*47c6ae99SBarry Smith @*/ 122*47c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DARegisterDestroy(void) 123*47c6ae99SBarry Smith { 124*47c6ae99SBarry Smith PetscErrorCode ierr; 125*47c6ae99SBarry Smith 126*47c6ae99SBarry Smith PetscFunctionBegin; 127*47c6ae99SBarry Smith ierr = PetscFListDestroy(&DAList);CHKERRQ(ierr); 128*47c6ae99SBarry Smith DARegisterAllCalled = PETSC_FALSE; 129*47c6ae99SBarry Smith PetscFunctionReturn(0); 130*47c6ae99SBarry Smith } 131