15808f684SSatish Balayfrom petsc4py import PETSc 25808f684SSatish Balayimport unittest 35808f684SSatish Balay 45808f684SSatish Balay# -------------------------------------------------------------------- 55808f684SSatish Balay 65808f684SSatish Balayclass BaseTestDA(object): 75808f684SSatish Balay 85808f684SSatish Balay COMM = PETSc.COMM_WORLD 95808f684SSatish Balay SIZES = None 105808f684SSatish Balay BOUNDARY = None 115808f684SSatish Balay DOF = 1 125808f684SSatish Balay STENCIL = PETSc.DMDA.StencilType.STAR 135808f684SSatish Balay SWIDTH = 1 145808f684SSatish Balay 155808f684SSatish Balay def setUp(self): 165808f684SSatish Balay self.da = PETSc.DMDA().create(dim=len(self.SIZES), 175808f684SSatish Balay dof=self.DOF, 185808f684SSatish Balay sizes=self.SIZES, 195808f684SSatish Balay boundary_type=self.BOUNDARY, 205808f684SSatish Balay stencil_type=self.STENCIL, 215808f684SSatish Balay stencil_width=self.SWIDTH, 225808f684SSatish Balay comm=self.COMM) 235808f684SSatish Balay 245808f684SSatish Balay def tearDown(self): 255808f684SSatish Balay self.da = None 26*62e5d2d2SJDBetteridge PETSc.garbage_cleanup() 275808f684SSatish Balay 285808f684SSatish Balay def testGetInfo(self): 295808f684SSatish Balay dim = self.da.getDim() 305808f684SSatish Balay dof = self.da.getDof() 315808f684SSatish Balay sizes = self.da.getSizes() 325808f684SSatish Balay psizes = self.da.getProcSizes() 335808f684SSatish Balay boundary = self.da.getBoundaryType() 345808f684SSatish Balay stencil_type = self.da.getStencilType() 355808f684SSatish Balay stencil_width = self.da.getStencilWidth() 365808f684SSatish Balay self.assertEqual(dim, len(self.SIZES)) 375808f684SSatish Balay self.assertEqual(dof, self.DOF) 385808f684SSatish Balay self.assertEqual(sizes, tuple(self.SIZES)) 395808f684SSatish Balay self.assertEqual(boundary, self.BOUNDARY or (0,)*dim) 405808f684SSatish Balay self.assertEqual(stencil_type, self.STENCIL) 415808f684SSatish Balay self.assertEqual(stencil_width, self.SWIDTH) 425808f684SSatish Balay 435808f684SSatish Balay def testRangesCorners(self): 445808f684SSatish Balay dim = self.da.getDim() 455808f684SSatish Balay ranges = self.da.getRanges() 465808f684SSatish Balay starts, lsizes = self.da.getCorners() 475808f684SSatish Balay self.assertEqual(dim, len(ranges)) 485808f684SSatish Balay self.assertEqual(dim, len(starts)) 495808f684SSatish Balay self.assertEqual(dim, len(lsizes)) 505808f684SSatish Balay for i in range(dim): 515808f684SSatish Balay s, e = ranges[i] 525808f684SSatish Balay self.assertEqual(s, starts[i]) 535808f684SSatish Balay self.assertEqual(e-s, lsizes[i]) 545808f684SSatish Balay 555808f684SSatish Balay def testGhostRangesCorners(self): 565808f684SSatish Balay dim = self.da.getDim() 575808f684SSatish Balay ranges = self.da.getGhostRanges() 585808f684SSatish Balay starts, lsizes = self.da.getGhostCorners() 595808f684SSatish Balay self.assertEqual(dim, len(ranges)) 605808f684SSatish Balay self.assertEqual(dim, len(starts)) 615808f684SSatish Balay self.assertEqual(dim, len(lsizes)) 625808f684SSatish Balay for i in range(dim): 635808f684SSatish Balay s, e = ranges[i] 645808f684SSatish Balay self.assertEqual(s, starts[i]) 655808f684SSatish Balay self.assertEqual(e-s, lsizes[i]) 665808f684SSatish Balay 675808f684SSatish Balay def testOwnershipRanges(self): 685808f684SSatish Balay dim = self.da.getDim() 695808f684SSatish Balay ownership_ranges = self.da.getOwnershipRanges() 705808f684SSatish Balay procsizes = self.da.getProcSizes() 715808f684SSatish Balay self.assertEqual(len(procsizes), len(ownership_ranges)) 725808f684SSatish Balay for i,m in enumerate(procsizes): 735808f684SSatish Balay self.assertEqual(m, len(ownership_ranges[i])) 745808f684SSatish Balay 755808f684SSatish Balay def testFieldName(self): 765808f684SSatish Balay for i in range(self.da.getDof()): 775808f684SSatish Balay self.da.setFieldName(i, "field%d" % i) 785808f684SSatish Balay for i in range(self.da.getDof()): 795808f684SSatish Balay name = self.da.getFieldName(i) 805808f684SSatish Balay self.assertEqual(name, "field%d" % i) 815808f684SSatish Balay 825808f684SSatish Balay def testCoordinates(self): 835808f684SSatish Balay self.da.setUniformCoordinates(0,1,0,1,0,1) 845808f684SSatish Balay # 855808f684SSatish Balay c = self.da.getCoordinates() 865808f684SSatish Balay self.da.setCoordinates(c) 875808f684SSatish Balay c.destroy() 885808f684SSatish Balay cda = self.da.getCoordinateDM() 895808f684SSatish Balay cda.destroy() 905808f684SSatish Balay # 915808f684SSatish Balay c = self.da.getCoordinates() 925808f684SSatish Balay self.da.setCoordinates(c) 935808f684SSatish Balay c.destroy() 945808f684SSatish Balay gc = self.da.getCoordinatesLocal() 955808f684SSatish Balay gc.destroy() 965808f684SSatish Balay 975808f684SSatish Balay def testCreateVecMat(self): 985808f684SSatish Balay vn = self.da.createNaturalVec() 995808f684SSatish Balay vg = self.da.createGlobalVec() 1005808f684SSatish Balay vl = self.da.createLocalVec() 1015808f684SSatish Balay mat = self.da.createMat() 1025808f684SSatish Balay self.assertTrue(mat.getType() in ('aij', 'seqaij', 'mpiaij')) 1035808f684SSatish Balay vn.set(1.0) 1045808f684SSatish Balay self.da.naturalToGlobal(vn,vg) 1055808f684SSatish Balay self.assertEqual(vg.max()[1], 1.0) 1065808f684SSatish Balay self.assertEqual(vg.min()[1], 1.0) 1075808f684SSatish Balay self.da.globalToLocal(vg,vl) 1085808f684SSatish Balay self.assertEqual(vl.max()[1], 1.0) 1095808f684SSatish Balay self.assertTrue (vl.min()[1] in (1.0, 0.0)) 1105808f684SSatish Balay vn.set(0.0) 1115808f684SSatish Balay self.da.globalToNatural(vg,vn) 1125808f684SSatish Balay self.assertEqual(vn.max()[1], 1.0) 1135808f684SSatish Balay self.assertEqual(vn.min()[1], 1.0) 1145808f684SSatish Balay vl2 = self.da.createLocalVec() 1155808f684SSatish Balay self.da.localToLocal(vl,vl2) 1165808f684SSatish Balay self.assertEqual(vl2.max()[1], 1.0) 1175808f684SSatish Balay self.assertTrue (vl2.min()[1] in (1.0, 0.0)) 1185808f684SSatish Balay NONE = PETSc.DM.BoundaryType.NONE 1195808f684SSatish Balay s = self.da.stencil_width 1205808f684SSatish Balay btype = self.da.boundary_type 1215808f684SSatish Balay psize = self.da.proc_sizes 1225808f684SSatish Balay for b, p in zip(btype, psize): 1235808f684SSatish Balay if b != NONE and p == 1: return 1245808f684SSatish Balay vg2 = self.da.createGlobalVec() 1255808f684SSatish Balay self.da.localToGlobal(vl2,vg2) 1265808f684SSatish Balay 1275808f684SSatish Balay def testGetVec(self): 1285808f684SSatish Balay vg = self.da.getGlobalVec() 1295808f684SSatish Balay vl = self.da.getLocalVec() 1305808f684SSatish Balay try: 1315808f684SSatish Balay vg.set(1.0) 1325808f684SSatish Balay self.assertEqual(vg.max()[1], 1.0) 1335808f684SSatish Balay self.assertEqual(vg.min()[1], 1.0) 1345808f684SSatish Balay self.da.globalToLocal(vg,vl) 1355808f684SSatish Balay self.assertEqual(vl.max()[1], 1.0) 1365808f684SSatish Balay self.assertTrue (vl.min()[1] in (1.0, 0.0)) 1375808f684SSatish Balay vl.set(2.0) 1385808f684SSatish Balay NONE = PETSc.DM.BoundaryType.NONE 1395808f684SSatish Balay s = self.da.stencil_width 1405808f684SSatish Balay btype = self.da.boundary_type 1415808f684SSatish Balay psize = self.da.proc_sizes 1425808f684SSatish Balay for b, p in zip(btype, psize): 1435808f684SSatish Balay if b != NONE and p == 1: return 1445808f684SSatish Balay self.da.localToGlobal(vl,vg) 1455808f684SSatish Balay self.assertEqual(vg.max()[1], 2.0) 1465808f684SSatish Balay self.assertTrue (vg.min()[1] in (2.0, 0.0)) 1475808f684SSatish Balay finally: 1485808f684SSatish Balay self.da.restoreGlobalVec(vg) 1495808f684SSatish Balay self.da.restoreLocalVec(vl) 1505808f684SSatish Balay 1515808f684SSatish Balay def testGetOther(self): 1525808f684SSatish Balay ao = self.da.getAO() 1535808f684SSatish Balay lgmap = self.da.getLGMap() 1545808f684SSatish Balay l2g, g2l = self.da.getScatter() 1555808f684SSatish Balay 1565808f684SSatish Balay def testRefineCoarsen(self): 1575808f684SSatish Balay da = self.da 1585808f684SSatish Balay rda = da.refine() 1595808f684SSatish Balay self.assertEqual(da.getDim(), rda.getDim()) 1605808f684SSatish Balay self.assertEqual(da.getDof(), rda.getDof()) 1615808f684SSatish Balay if da.dim != 1: 1625808f684SSatish Balay self.assertEqual(da.getStencilType(), rda.getStencilType()) 1635808f684SSatish Balay self.assertEqual(da.getStencilWidth(), rda.getStencilWidth()) 1645808f684SSatish Balay cda = rda.coarsen() 1655808f684SSatish Balay self.assertEqual(rda.getDim(), cda.getDim()) 1665808f684SSatish Balay self.assertEqual(rda.getDof(), cda.getDof()) 1675808f684SSatish Balay for n1, n2 in zip(self.da.getSizes(), cda.getSizes()): 1685808f684SSatish Balay self.assertTrue(abs(n1-n2)<=1) 1695808f684SSatish Balay 1705808f684SSatish Balay def testCoarsenRefine(self): 1715808f684SSatish Balay da = self.da 1725808f684SSatish Balay cda = self.da.coarsen() 1735808f684SSatish Balay self.assertEqual(da.getDim(), cda.getDim()) 1745808f684SSatish Balay self.assertEqual(da.getDof(), cda.getDof()) 1755808f684SSatish Balay if da.dim != 1: 1765808f684SSatish Balay self.assertEqual(da.getStencilType(), cda.getStencilType()) 1775808f684SSatish Balay self.assertEqual(da.getStencilWidth(), cda.getStencilWidth()) 1785808f684SSatish Balay rda = cda.refine() 1795808f684SSatish Balay for n1, n2 in zip(self.da.getSizes(), rda.getSizes()): 1805808f684SSatish Balay self.assertTrue(abs(n1-n2)<=1) 1815808f684SSatish Balay 1825808f684SSatish Balay def testRefineHierarchy(self): 1835808f684SSatish Balay levels = self.da.refineHierarchy(2) 1845808f684SSatish Balay self.assertTrue(isinstance(levels, list)) 1855808f684SSatish Balay self.assertEqual(len(levels), 2) 1865808f684SSatish Balay for item in levels: 1875808f684SSatish Balay self.assertTrue(isinstance(item, PETSc.DM)) 1885808f684SSatish Balay 1895808f684SSatish Balay def testCoarsenHierarchy(self): 1905808f684SSatish Balay levels = self.da.coarsenHierarchy(2) 1915808f684SSatish Balay self.assertTrue(isinstance(levels, list)) 1925808f684SSatish Balay self.assertEqual(len(levels), 2) 1935808f684SSatish Balay for item in levels: 1945808f684SSatish Balay self.assertTrue(isinstance(item, PETSc.DM)) 1955808f684SSatish Balay 1965808f684SSatish Balay def testCreateInterpolation(self): 1975808f684SSatish Balay da = self.da 1985808f684SSatish Balay if da.dim == 1: return 1995808f684SSatish Balay rda = da.refine() 2005808f684SSatish Balay mat, vec = da.createInterpolation(rda) 2015808f684SSatish Balay 2025808f684SSatish Balay def testCreateInjection(self): 2035808f684SSatish Balay da = self.da 2045808f684SSatish Balay if da.dim == 1: return 2055808f684SSatish Balay rda = da.refine() 2065808f684SSatish Balay scatter = da.createInjection(rda) 2075808f684SSatish Balay 2088c2316a8SJeremy Tillay def testzeroRowsColumnsStencil(self): 2098c2316a8SJeremy Tillay da = self.da 2108c2316a8SJeremy Tillay A = da.createMatrix() 2118c2316a8SJeremy Tillay x = da.createGlobalVector() 2128c2316a8SJeremy Tillay x.set(2.0) 2138c2316a8SJeremy Tillay A.setDiagonal(x) 2148c2316a8SJeremy Tillay diag1 = x.duplicate() 2158c2316a8SJeremy Tillay A.getDiagonal(diag1) 2168c2316a8SJeremy Tillay if self.SIZES != 2: #only coded test for 2D case 2178c2316a8SJeremy Tillay return 2188c2316a8SJeremy Tillay istart,iend, jstart, jend = da.getRanges() 2198c2316a8SJeremy Tillay self.assertTrue(x.equal(diag1)) 2208c2316a8SJeremy Tillay zeroidx = [] 2218c2316a8SJeremy Tillay for i in range(istart,iend): 2228c2316a8SJeremy Tillay for j in range(jstart,jend): 2238c2316a8SJeremy Tillay row = PETSc.Mat.Stencil() 2248c2316a8SJeremy Tillay row.index = (i,j) 2258c2316a8SJeremy Tillay zeroidx = zeroidx + [row] 2268c2316a8SJeremy Tillay diag2 = x.duplicate() 2278c2316a8SJeremy Tillay diag2.set(1.0) 2288c2316a8SJeremy Tillay A.zeroRowsColumnsStencil(zeroidx, 1.0, x, diag2) 2298c2316a8SJeremy Tillay ans = x.duplicate() 2308c2316a8SJeremy Tillay ans.set(2.0) 2318c2316a8SJeremy Tillay self.assertTrue(ans.equal(diag2)) 2328c2316a8SJeremy Tillay 2335808f684SSatish Balay 2345808f684SSatish BalayMIRROR = PETSc.DMDA.BoundaryType.MIRROR 2355808f684SSatish BalayGHOSTED = PETSc.DMDA.BoundaryType.GHOSTED 2365808f684SSatish BalayPERIODIC = PETSc.DMDA.BoundaryType.PERIODIC 2375808f684SSatish BalayTWIST = PETSc.DMDA.BoundaryType.TWIST 2385808f684SSatish Balay 2395808f684SSatish BalaySCALE = 4 2405808f684SSatish Balay 2415808f684SSatish Balayclass BaseTestDA_1D(BaseTestDA): 2425808f684SSatish Balay SIZES = [100*SCALE] 2435808f684SSatish Balay 2445808f684SSatish Balayclass BaseTestDA_2D(BaseTestDA): 2455808f684SSatish Balay SIZES = [9*SCALE,11*SCALE] 2465808f684SSatish Balay 2475808f684SSatish Balayclass BaseTestDA_3D(BaseTestDA): 2485808f684SSatish Balay SIZES = [6*SCALE,7*SCALE,8*SCALE] 2495808f684SSatish Balay 2505808f684SSatish Balay# -------------------------------------------------------------------- 2515808f684SSatish Balay 2525808f684SSatish Balayclass TestDA_1D(BaseTestDA_1D, unittest.TestCase): 2535808f684SSatish Balay pass 2545808f684SSatish Balayclass TestDA_1D_W0(TestDA_1D): 2555808f684SSatish Balay SWIDTH = 0 2565808f684SSatish Balayclass TestDA_1D_W2(TestDA_1D): 2575808f684SSatish Balay SWIDTH = 2 2585808f684SSatish Balay 2595808f684SSatish Balayclass TestDA_2D(BaseTestDA_2D, unittest.TestCase): 2605808f684SSatish Balay pass 2615808f684SSatish Balayclass TestDA_2D_W0(TestDA_2D): 2625808f684SSatish Balay SWIDTH = 0 2635808f684SSatish Balayclass TestDA_2D_W0_N2(TestDA_2D): 2645808f684SSatish Balay DOF = 2 2655808f684SSatish Balay SWIDTH = 0 2665808f684SSatish Balayclass TestDA_2D_W2(TestDA_2D): 2675808f684SSatish Balay SWIDTH = 2 2685808f684SSatish Balayclass TestDA_2D_W2_N2(TestDA_2D): 2695808f684SSatish Balay DOF = 2 2705808f684SSatish Balay SWIDTH = 2 2715808f684SSatish Balayclass TestDA_2D_PXY(TestDA_2D): 2725808f684SSatish Balay SIZES = [13*SCALE,17*SCALE] 2735808f684SSatish Balay DOF = 2 2745808f684SSatish Balay SWIDTH = 5 2755808f684SSatish Balay BOUNDARY = (PERIODIC,)*2 2765808f684SSatish Balayclass TestDA_2D_GXY(TestDA_2D): 2775808f684SSatish Balay SIZES = [13*SCALE,17*SCALE] 2785808f684SSatish Balay DOF = 2 2795808f684SSatish Balay SWIDTH = 5 2805808f684SSatish Balay BOUNDARY = (GHOSTED,)*2 2815808f684SSatish Balayclass TestDA_2D_TXY(TestDA_2D): 2825808f684SSatish Balay SIZES = [13*SCALE,17*SCALE] 2835808f684SSatish Balay DOF = 2 2845808f684SSatish Balay SWIDTH = 5 2855808f684SSatish Balay BOUNDARY = (TWIST,)*2 2865808f684SSatish Balay 2875808f684SSatish Balayclass TestDA_3D(BaseTestDA_3D, unittest.TestCase): 2885808f684SSatish Balay pass 2895808f684SSatish Balayclass TestDA_3D_W0(TestDA_3D): 2905808f684SSatish Balay SWIDTH = 0 2915808f684SSatish Balayclass TestDA_3D_W0_N2(TestDA_3D): 2925808f684SSatish Balay DOF = 2 2935808f684SSatish Balay SWIDTH = 0 2945808f684SSatish Balayclass TestDA_3D_W2(TestDA_3D): 2955808f684SSatish Balay SWIDTH = 2 2965808f684SSatish Balayclass TestDA_3D_W2_N2(TestDA_3D): 2975808f684SSatish Balay DOF = 2 2985808f684SSatish Balay SWIDTH = 2 2995808f684SSatish Balayclass TestDA_3D_PXYZ(TestDA_3D): 3005808f684SSatish Balay SIZES = [11*SCALE,13*SCALE,17*SCALE] 3015808f684SSatish Balay DOF = 2 3025808f684SSatish Balay SWIDTH = 3 3035808f684SSatish Balay BOUNDARY = (PERIODIC,)*3 3045808f684SSatish Balayclass TestDA_3D_GXYZ(TestDA_3D): 3055808f684SSatish Balay SIZES = [11*SCALE,13*SCALE,17*SCALE] 3065808f684SSatish Balay DOF = 2 3075808f684SSatish Balay SWIDTH = 3 3085808f684SSatish Balay BOUNDARY = (GHOSTED,)*3 3095808f684SSatish Balayclass TestDA_3D_TXYZ(TestDA_3D): 3105808f684SSatish Balay SIZES = [11*SCALE,13*SCALE,17*SCALE] 3115808f684SSatish Balay DOF = 2 3125808f684SSatish Balay SWIDTH = 3 3135808f684SSatish Balay BOUNDARY = (TWIST,)*3 3145808f684SSatish Balay 3155808f684SSatish Balay# -------------------------------------------------------------------- 3165808f684SSatish Balay 3175808f684SSatish BalayDIM = (1,2,3,) 3185808f684SSatish BalayDOF = (None,1,2,3,4,5,) 3195808f684SSatish BalayBOUNDARY_TYPE = ( 3205808f684SSatish Balay None, 3215808f684SSatish Balay "none", (0,)*3, 0, 3225808f684SSatish Balay "ghosted", (GHOSTED,)*3, GHOSTED, 3235808f684SSatish Balay "periodic", (PERIODIC,)*3, PERIODIC, 3245808f684SSatish Balay "twist", (TWIST,)*3, TWIST, 3255808f684SSatish Balay ) 3265808f684SSatish BalaySTENCIL_TYPE = (None,"star","box") 3275808f684SSatish BalaySTENCIL_WIDTH = (None,0,1,2,3) 3285808f684SSatish Balay 3295808f684SSatish Balay 3305808f684SSatish BalayDIM = (1,2,3) 3315808f684SSatish BalayDOF = (None,2,5) 3325808f684SSatish BalayBOUNDARY_TYPE = (None,"none","periodic","ghosted","twist") 3335808f684SSatish BalaySTENCIL_TYPE = (None,"box") 3345808f684SSatish BalaySTENCIL_WIDTH = (None,1,2) 3355808f684SSatish Balay 3365808f684SSatish Balayclass TestDACreate(unittest.TestCase): 3375808f684SSatish Balay pass 3385808f684SSatish Balaycounter = 0 3395808f684SSatish Balayfor dim in DIM: 3405808f684SSatish Balay for dof in DOF: 3415808f684SSatish Balay for boundary in BOUNDARY_TYPE: 3425808f684SSatish Balay if isinstance(boundary, tuple): 3435808f684SSatish Balay boundary = boundary[:dim] 3445808f684SSatish Balay for stencil in STENCIL_TYPE: 3455808f684SSatish Balay for width in STENCIL_WIDTH: 3465808f684SSatish Balay kargs = dict(sizes=[8*SCALE]*dim, 3475808f684SSatish Balay dim=dim, dof=dof, 3485808f684SSatish Balay boundary_type=boundary, 3495808f684SSatish Balay stencil_type=stencil, 3505808f684SSatish Balay stencil_width=width) 3515808f684SSatish Balay def testCreate(self, kargs=kargs): 3525808f684SSatish Balay kargs = dict(kargs) 3535808f684SSatish Balay da = PETSc.DMDA().create(**kargs) 3545808f684SSatish Balay da.destroy() 3555808f684SSatish Balay setattr(TestDACreate, 3565808f684SSatish Balay "testCreate%04d"%counter, 3575808f684SSatish Balay testCreate) 3585808f684SSatish Balay del testCreate, kargs 3595808f684SSatish Balay counter += 1 3605808f684SSatish Balaydel counter, dim, dof, boundary, stencil, width 3615808f684SSatish Balay 3625808f684SSatish Balayclass TestDADuplicate(unittest.TestCase): 3635808f684SSatish Balay pass 3645808f684SSatish Balaycounter = 0 3655808f684SSatish Balayfor dim in DIM: 3665808f684SSatish Balay for dof in DOF: 3675808f684SSatish Balay for boundary in BOUNDARY_TYPE: 3685808f684SSatish Balay if isinstance(boundary, tuple): 3695808f684SSatish Balay boundary = boundary[:dim] 3705808f684SSatish Balay for stencil in STENCIL_TYPE: 3715808f684SSatish Balay for width in STENCIL_WIDTH: 3725808f684SSatish Balay kargs = dict(dim=dim, dof=dof, 3735808f684SSatish Balay boundary_type=boundary, 3745808f684SSatish Balay stencil_type=stencil, 3755808f684SSatish Balay stencil_width=width) 3765808f684SSatish Balay def testDuplicate(self, kargs=kargs): 3775808f684SSatish Balay kargs = dict(kargs) 3785808f684SSatish Balay dim = kargs.pop('dim') 3795808f684SSatish Balay dof = kargs['dof'] 3805808f684SSatish Balay boundary = kargs['boundary_type'] 3815808f684SSatish Balay stencil = kargs['stencil_type'] 3825808f684SSatish Balay width = kargs['stencil_width'] 3835808f684SSatish Balay da = PETSc.DMDA().create([8*SCALE]*dim) 3845808f684SSatish Balay newda = da.duplicate(**kargs) 3855808f684SSatish Balay self.assertEqual(newda.dim, da.dim) 3865808f684SSatish Balay self.assertEqual(newda.sizes, da.sizes) 3875808f684SSatish Balay self.assertEqual(newda.proc_sizes, 3885808f684SSatish Balay da.proc_sizes) 3895808f684SSatish Balay self.assertEqual(newda.ranges, da.ranges) 3905808f684SSatish Balay self.assertEqual(newda.corners, da.corners) 3915808f684SSatish Balay if (newda.boundary_type == da.boundary_type 3925808f684SSatish Balay and 3935808f684SSatish Balay newda.stencil_width == da.stencil_width): 3945808f684SSatish Balay self.assertEqual(newda.ghost_ranges, 3955808f684SSatish Balay da.ghost_ranges) 3965808f684SSatish Balay self.assertEqual(newda.ghost_corners, 3975808f684SSatish Balay da.ghost_corners) 3985808f684SSatish Balay if dof is None: 3995808f684SSatish Balay dof = da.dof 4005808f684SSatish Balay if boundary is None: 4015808f684SSatish Balay boundary = da.boundary_type 4025808f684SSatish Balay elif boundary == "none": 4035808f684SSatish Balay boundary = (0,) * dim 4045808f684SSatish Balay elif boundary == "mirror": 4055808f684SSatish Balay boundary = (MIRROR,) * dim 4065808f684SSatish Balay elif boundary == "ghosted": 4075808f684SSatish Balay boundary = (GHOSTED,) * dim 4085808f684SSatish Balay elif boundary == "periodic": 4095808f684SSatish Balay boundary = (PERIODIC,) * dim 4105808f684SSatish Balay elif boundary == "twist": 4115808f684SSatish Balay boundary = (TWIST,) * dim 4125808f684SSatish Balay elif isinstance(boundary, int): 4135808f684SSatish Balay boundary = (boundary,) * dim 4145808f684SSatish Balay if stencil is None: 4155808f684SSatish Balay stencil = da.stencil[0] 4165808f684SSatish Balay if width is None: 4175808f684SSatish Balay width = da.stencil_width 4185808f684SSatish Balay self.assertEqual(newda.dof, dof) 4195808f684SSatish Balay self.assertEqual(newda.boundary_type, 4205808f684SSatish Balay boundary) 4215808f684SSatish Balay if dim == 1: 4225808f684SSatish Balay self.assertEqual(newda.stencil, 4235808f684SSatish Balay (stencil, width)) 4245808f684SSatish Balay newda.destroy() 4255808f684SSatish Balay da.destroy() 4265808f684SSatish Balay setattr(TestDADuplicate, 4275808f684SSatish Balay "testDuplicate%04d"%counter, 4285808f684SSatish Balay testDuplicate) 4295808f684SSatish Balay del testDuplicate, kargs 4305808f684SSatish Balay counter += 1 4315808f684SSatish Balaydel counter, dim, dof, boundary, stencil, width 4325808f684SSatish Balay 4335808f684SSatish Balay# -------------------------------------------------------------------- 4345808f684SSatish Balay 4355808f684SSatish Balayif PETSc.COMM_WORLD.getSize() > 1: 4365808f684SSatish Balay del TestDA_1D_W0 4375808f684SSatish Balay del TestDA_2D_W0, TestDA_2D_W0_N2 4385808f684SSatish Balay del TestDA_3D_W0, TestDA_3D_W0_N2 4395808f684SSatish Balay 4405808f684SSatish Balay# -------------------------------------------------------------------- 4415808f684SSatish Balay 4425808f684SSatish Balayif __name__ == '__main__': 4435808f684SSatish Balay unittest.main() 4445808f684SSatish Balay 4455808f684SSatish Balay# -------------------------------------------------------------------- 446