1 2 #include <petsc/private/dmdaimpl.h> /*I "petscdmda.h" I*/ 3 4 extern PetscErrorCode DMSetUp_DA_1D(DM); 5 extern PetscErrorCode DMSetUp_DA_2D(DM); 6 extern PetscErrorCode DMSetUp_DA_3D(DM); 7 8 PetscErrorCode DMSetUp_DA(DM da) 9 { 10 PetscErrorCode ierr; 11 DM_DA *dd = (DM_DA*)da->data; 12 13 PetscFunctionBegin; 14 PetscValidHeaderSpecific(da, DM_CLASSID,1); 15 if (dd->w < 1) SETERRQ1(PetscObjectComm((PetscObject)da),PETSC_ERR_ARG_OUTOFRANGE,"Must have 1 or more degrees of freedom per node: %D",dd->w); 16 if (dd->s < 0) SETERRQ1(PetscObjectComm((PetscObject)da),PETSC_ERR_ARG_OUTOFRANGE,"Stencil width cannot be negative: %D",dd->s); 17 18 ierr = PetscCalloc1(dd->w+1,&dd->fieldname);CHKERRQ(ierr); 19 ierr = PetscCalloc1(da->dim,&dd->coordinatename);CHKERRQ(ierr); 20 if (da->dim == 1) { 21 ierr = DMSetUp_DA_1D(da);CHKERRQ(ierr); 22 } else if (da->dim == 2) { 23 ierr = DMSetUp_DA_2D(da);CHKERRQ(ierr); 24 } else if (da->dim == 3) { 25 ierr = DMSetUp_DA_3D(da);CHKERRQ(ierr); 26 } else SETERRQ(PetscObjectComm((PetscObject)da),PETSC_ERR_SUP,"DMs only supported for 1, 2, and 3d"); 27 ierr = DMViewFromOptions(da,NULL,"-dm_view");CHKERRQ(ierr); 28 PetscFunctionReturn(0); 29 } 30 31