1c4762a1bSJed Brown program main 2c4762a1bSJed Brown!----------------------------------------------------------------------- 3c4762a1bSJed Brown! 4c4762a1bSJed Brown! Tests DMDAGetVecGetArray() 5c4762a1bSJed Brown!----------------------------------------------------------------------- 6c4762a1bSJed Brown! 7c4762a1bSJed Brown 8c4762a1bSJed Brown#include <petsc/finclude/petscdm.h> 9c4762a1bSJed Brown use petsc 10c4762a1bSJed Brown implicit none 11c4762a1bSJed Brown 12c4762a1bSJed Brown Type(tVec) g 13c4762a1bSJed Brown Type(tDM) ada 14c4762a1bSJed Brown 15c4762a1bSJed Brown PetscScalar,pointer :: x1(:),x2(:,:) 16c4762a1bSJed Brown PetscScalar,pointer :: x3(:,:,:),x4(:,:,:,:) 17c4762a1bSJed Brown PetscErrorCode ierr 18c4762a1bSJed Brown PetscInt m,n,p,dof,s,i,j,k,xs,xl 19c4762a1bSJed Brown PetscInt ys,yl 20c4762a1bSJed Brown PetscInt zs,zl,sw 21c4762a1bSJed Brown 22c4762a1bSJed Brown m = 5 23c4762a1bSJed Brown n = 6 24c4762a1bSJed Brown p = 4; 25c4762a1bSJed Brown s = 1 26c4762a1bSJed Brown dof = 1 27c4762a1bSJed Brown sw = 1 28*d8606c27SBarry Smith PetscCallA(PetscInitialize(ierr)) 29*d8606c27SBarry Smith PetscCallA(DMDACreate1d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,m,dof,sw,PETSC_NULL_INTEGER,ada,ierr)) 30*d8606c27SBarry Smith PetscCallA(DMSetUp(ada,ierr)) 31*d8606c27SBarry Smith PetscCallA(DMGetGlobalVector(ada,g,ierr)) 32*d8606c27SBarry Smith PetscCallA(DMDAGetCorners(ada,xs,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,xl,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,ierr)) 33*d8606c27SBarry Smith PetscCallA(DMDAVecGetArrayF90(ada,g,x1,ierr)) 34c4762a1bSJed Brown do i=xs,xs+xl-1 35c4762a1bSJed Brown! CHKMEMQ 36c4762a1bSJed Brown x1(i) = i 37c4762a1bSJed Brown! CHKMEMQ 38c4762a1bSJed Brown enddo 39*d8606c27SBarry Smith PetscCallA(DMDAVecRestoreArrayF90(ada,g,x1,ierr)) 40*d8606c27SBarry Smith PetscCallA(VecView(g,PETSC_VIEWER_STDOUT_WORLD,ierr)) 41*d8606c27SBarry Smith PetscCallA(DMRestoreGlobalVector(ada,g,ierr)) 42*d8606c27SBarry Smith PetscCallA(DMDestroy(ada,ierr)) 43c4762a1bSJed Brown 44*d8606c27SBarry Smith PetscCallA(DMDACreate2d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_BOX,m,n,PETSC_DECIDE,PETSC_DECIDE,dof,s,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,ada,ierr)) 45*d8606c27SBarry Smith PetscCallA(DMSetUp(ada,ierr)) 46*d8606c27SBarry Smith PetscCallA(DMGetGlobalVector(ada,g,ierr)) 47*d8606c27SBarry Smith PetscCallA(DMDAGetCorners(ada,xs,ys,PETSC_NULL_INTEGER,xl,yl,PETSC_NULL_INTEGER,ierr)) 48*d8606c27SBarry Smith PetscCallA(DMDAVecGetArrayF90(ada,g,x2,ierr)) 49c4762a1bSJed Brown do i=xs,xs+xl-1 50c4762a1bSJed Brown do j=ys,ys+yl-1 51c4762a1bSJed Brown! CHKMEMQ 52c4762a1bSJed Brown x2(i,j) = i + j 53c4762a1bSJed Brown! CHKMEMQ 54c4762a1bSJed Brown enddo 55c4762a1bSJed Brown enddo 56*d8606c27SBarry Smith PetscCallA(DMDAVecRestoreArrayF90(ada,g,x2,ierr)) 57*d8606c27SBarry Smith PetscCallA(VecView(g,PETSC_VIEWER_STDOUT_WORLD,ierr)) 58*d8606c27SBarry Smith PetscCallA(DMRestoreGlobalVector(ada,g,ierr)) 59*d8606c27SBarry Smith PetscCallA(DMDestroy(ada,ierr)) 60c4762a1bSJed Brown 61*d8606c27SBarry Smith PetscCallA(DMDACreate3d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_BOX, m,n,p,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,dof,s,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,ada,ierr)) 62*d8606c27SBarry Smith PetscCallA(DMSetUp(ada,ierr)) 63*d8606c27SBarry Smith PetscCallA(DMGetGlobalVector(ada,g,ierr)) 64*d8606c27SBarry Smith PetscCallA(DMDAGetCorners(ada,xs,ys,zs,xl,yl,zl,ierr)) 65*d8606c27SBarry Smith PetscCallA(DMDAVecGetArrayF90(ada,g,x3,ierr)) 66c4762a1bSJed Brown do i=xs,xs+xl-1 67c4762a1bSJed Brown do j=ys,ys+yl-1 68c4762a1bSJed Brown do k=zs,zs+zl-1 69c4762a1bSJed Brown! CHKMEMQ 70c4762a1bSJed Brown x3(i,j,k) = i + j + k 71c4762a1bSJed Brown! CHKMEMQ 72c4762a1bSJed Brown enddo 73c4762a1bSJed Brown enddo 74c4762a1bSJed Brown enddo 75*d8606c27SBarry Smith PetscCallA(DMDAVecRestoreArrayF90(ada,g,x3,ierr)) 76*d8606c27SBarry Smith PetscCallA(VecView(g,PETSC_VIEWER_STDOUT_WORLD,ierr)) 77*d8606c27SBarry Smith PetscCallA(DMRestoreGlobalVector(ada,g,ierr)) 78*d8606c27SBarry Smith PetscCallA(DMDestroy(ada,ierr)) 79c4762a1bSJed Brown 80c4762a1bSJed Brown! 81c4762a1bSJed Brown! Same tests but now with DOF > 1, so dimensions of array are one higher 82c4762a1bSJed Brown! 83c4762a1bSJed Brown dof = 2 84*d8606c27SBarry Smith PetscCallA(DMDACreate1d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,m,dof,sw,PETSC_NULL_INTEGER,ada,ierr)) 85*d8606c27SBarry Smith PetscCallA(DMSetUp(ada,ierr)) 86*d8606c27SBarry Smith PetscCallA(DMGetGlobalVector(ada,g,ierr)) 87*d8606c27SBarry Smith PetscCallA(DMDAGetCorners(ada,xs,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,xl,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,ierr)) 88*d8606c27SBarry Smith PetscCallA(DMDAVecGetArrayF90(ada,g,x2,ierr)) 89c4762a1bSJed Brown do i=xs,xs+xl-1 90c4762a1bSJed Brown! CHKMEMQ 91c4762a1bSJed Brown x2(0,i) = i 92c4762a1bSJed Brown x2(1,i) = -i 93c4762a1bSJed Brown! CHKMEMQ 94c4762a1bSJed Brown enddo 95*d8606c27SBarry Smith PetscCallA(DMDAVecRestoreArrayF90(ada,g,x1,ierr)) 96*d8606c27SBarry Smith PetscCallA(VecView(g,PETSC_VIEWER_STDOUT_WORLD,ierr)) 97*d8606c27SBarry Smith PetscCallA(DMRestoreGlobalVector(ada,g,ierr)) 98*d8606c27SBarry Smith PetscCallA(DMDestroy(ada,ierr)) 99c4762a1bSJed Brown 100c4762a1bSJed Brown dof = 2 101*d8606c27SBarry Smith PetscCallA(DMDACreate2d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_BOX,m,n,PETSC_DECIDE,PETSC_DECIDE,dof,s,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,ada,ierr)) 102*d8606c27SBarry Smith PetscCallA(DMSetUp(ada,ierr)) 103*d8606c27SBarry Smith PetscCallA(DMGetGlobalVector(ada,g,ierr)) 104*d8606c27SBarry Smith PetscCallA(DMDAGetCorners(ada,xs,ys,PETSC_NULL_INTEGER,xl,yl,PETSC_NULL_INTEGER,ierr)) 105*d8606c27SBarry Smith PetscCallA(DMDAVecGetArrayF90(ada,g,x3,ierr)) 106c4762a1bSJed Brown do i=xs,xs+xl-1 107c4762a1bSJed Brown do j=ys,ys+yl-1 108c4762a1bSJed Brown! CHKMEMQ 109c4762a1bSJed Brown x3(0,i,j) = i + j 110c4762a1bSJed Brown x3(1,i,j) = -(i + j) 111c4762a1bSJed Brown! CHKMEMQ 112c4762a1bSJed Brown enddo 113c4762a1bSJed Brown enddo 114*d8606c27SBarry Smith PetscCallA(DMDAVecRestoreArrayF90(ada,g,x3,ierr)) 115*d8606c27SBarry Smith PetscCallA(VecView(g,PETSC_VIEWER_STDOUT_WORLD,ierr)) 116*d8606c27SBarry Smith PetscCallA(DMRestoreGlobalVector(ada,g,ierr)) 117*d8606c27SBarry Smith PetscCallA(DMDestroy(ada,ierr)) 118c4762a1bSJed Brown 119c4762a1bSJed Brown dof = 3 120*d8606c27SBarry Smith PetscCallA(DMDACreate3d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_BOX,m,n,p,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,dof,s,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,ada,ierr)) 121*d8606c27SBarry Smith PetscCallA(DMSetUp(ada,ierr)) 122*d8606c27SBarry Smith PetscCallA(DMGetGlobalVector(ada,g,ierr)) 123*d8606c27SBarry Smith PetscCallA(DMDAGetCorners(ada,xs,ys,zs,xl,yl,zl,ierr)) 124*d8606c27SBarry Smith PetscCallA(DMDAVecGetArrayF90(ada,g,x4,ierr)) 125c4762a1bSJed Brown do i=xs,xs+xl-1 126c4762a1bSJed Brown do j=ys,ys+yl-1 127c4762a1bSJed Brown do k=zs,zs+zl-1 128c4762a1bSJed Brown! CHKMEMQ 129c4762a1bSJed Brown x4(0,i,j,k) = i + j + k 130c4762a1bSJed Brown x4(1,i,j,k) = -(i + j + k) 131c4762a1bSJed Brown x4(2,i,j,k) = i + j + k 132c4762a1bSJed Brown! CHKMEMQ 133c4762a1bSJed Brown enddo 134c4762a1bSJed Brown enddo 135c4762a1bSJed Brown enddo 136*d8606c27SBarry Smith PetscCallA(DMDAVecRestoreArrayF90(ada,g,x4,ierr)) 137*d8606c27SBarry Smith PetscCallA(VecView(g,PETSC_VIEWER_STDOUT_WORLD,ierr)) 138*d8606c27SBarry Smith PetscCallA(DMRestoreGlobalVector(ada,g,ierr)) 139*d8606c27SBarry Smith PetscCallA(DMDestroy(ada,ierr)) 140c4762a1bSJed Brown 141*d8606c27SBarry Smith PetscCallA(PetscFinalize(ierr)) 142c4762a1bSJed Brown END PROGRAM 143c4762a1bSJed Brown 144c4762a1bSJed Brown! 145c4762a1bSJed Brown!/*TEST 146c4762a1bSJed Brown! 147c4762a1bSJed Brown! build: 148c4762a1bSJed Brown! requires: !complex 149c4762a1bSJed Brown! 150c4762a1bSJed Brown! test: 151c4762a1bSJed Brown! filter: Error: grep -v "Vec Object" | grep -v "Warning: ieee_inexact is signaling" 152c4762a1bSJed Brown! 153c4762a1bSJed Brown!TEST*/ 154