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