1*5808f684SSatish Balayfrom petsc4py import PETSc 2*5808f684SSatish Balayimport unittest 3*5808f684SSatish Balay 4*5808f684SSatish Balay# -------------------------------------------------------------------- 5*5808f684SSatish Balay 6*5808f684SSatish Balayclass BaseTestDA(object): 7*5808f684SSatish Balay 8*5808f684SSatish Balay COMM = PETSc.COMM_WORLD 9*5808f684SSatish Balay SIZES = None 10*5808f684SSatish Balay BOUNDARY = None 11*5808f684SSatish Balay DOF = 1 12*5808f684SSatish Balay STENCIL = PETSc.DMDA.StencilType.STAR 13*5808f684SSatish Balay SWIDTH = 1 14*5808f684SSatish Balay 15*5808f684SSatish Balay def setUp(self): 16*5808f684SSatish Balay self.da = PETSc.DMDA().create(dim=len(self.SIZES), 17*5808f684SSatish Balay dof=self.DOF, 18*5808f684SSatish Balay sizes=self.SIZES, 19*5808f684SSatish Balay boundary_type=self.BOUNDARY, 20*5808f684SSatish Balay stencil_type=self.STENCIL, 21*5808f684SSatish Balay stencil_width=self.SWIDTH, 22*5808f684SSatish Balay comm=self.COMM) 23*5808f684SSatish Balay 24*5808f684SSatish Balay def tearDown(self): 25*5808f684SSatish Balay self.da = None 26*5808f684SSatish Balay 27*5808f684SSatish Balay def testGetInfo(self): 28*5808f684SSatish Balay dim = self.da.getDim() 29*5808f684SSatish Balay dof = self.da.getDof() 30*5808f684SSatish Balay sizes = self.da.getSizes() 31*5808f684SSatish Balay psizes = self.da.getProcSizes() 32*5808f684SSatish Balay boundary = self.da.getBoundaryType() 33*5808f684SSatish Balay stencil_type = self.da.getStencilType() 34*5808f684SSatish Balay stencil_width = self.da.getStencilWidth() 35*5808f684SSatish Balay self.assertEqual(dim, len(self.SIZES)) 36*5808f684SSatish Balay self.assertEqual(dof, self.DOF) 37*5808f684SSatish Balay self.assertEqual(sizes, tuple(self.SIZES)) 38*5808f684SSatish Balay self.assertEqual(boundary, self.BOUNDARY or (0,)*dim) 39*5808f684SSatish Balay self.assertEqual(stencil_type, self.STENCIL) 40*5808f684SSatish Balay self.assertEqual(stencil_width, self.SWIDTH) 41*5808f684SSatish Balay 42*5808f684SSatish Balay def testRangesCorners(self): 43*5808f684SSatish Balay dim = self.da.getDim() 44*5808f684SSatish Balay ranges = self.da.getRanges() 45*5808f684SSatish Balay starts, lsizes = self.da.getCorners() 46*5808f684SSatish Balay self.assertEqual(dim, len(ranges)) 47*5808f684SSatish Balay self.assertEqual(dim, len(starts)) 48*5808f684SSatish Balay self.assertEqual(dim, len(lsizes)) 49*5808f684SSatish Balay for i in range(dim): 50*5808f684SSatish Balay s, e = ranges[i] 51*5808f684SSatish Balay self.assertEqual(s, starts[i]) 52*5808f684SSatish Balay self.assertEqual(e-s, lsizes[i]) 53*5808f684SSatish Balay 54*5808f684SSatish Balay def testGhostRangesCorners(self): 55*5808f684SSatish Balay dim = self.da.getDim() 56*5808f684SSatish Balay ranges = self.da.getGhostRanges() 57*5808f684SSatish Balay starts, lsizes = self.da.getGhostCorners() 58*5808f684SSatish Balay self.assertEqual(dim, len(ranges)) 59*5808f684SSatish Balay self.assertEqual(dim, len(starts)) 60*5808f684SSatish Balay self.assertEqual(dim, len(lsizes)) 61*5808f684SSatish Balay for i in range(dim): 62*5808f684SSatish Balay s, e = ranges[i] 63*5808f684SSatish Balay self.assertEqual(s, starts[i]) 64*5808f684SSatish Balay self.assertEqual(e-s, lsizes[i]) 65*5808f684SSatish Balay 66*5808f684SSatish Balay def testOwnershipRanges(self): 67*5808f684SSatish Balay dim = self.da.getDim() 68*5808f684SSatish Balay ownership_ranges = self.da.getOwnershipRanges() 69*5808f684SSatish Balay procsizes = self.da.getProcSizes() 70*5808f684SSatish Balay self.assertEqual(len(procsizes), len(ownership_ranges)) 71*5808f684SSatish Balay for i,m in enumerate(procsizes): 72*5808f684SSatish Balay self.assertEqual(m, len(ownership_ranges[i])) 73*5808f684SSatish Balay 74*5808f684SSatish Balay def testFieldName(self): 75*5808f684SSatish Balay for i in range(self.da.getDof()): 76*5808f684SSatish Balay self.da.setFieldName(i, "field%d" % i) 77*5808f684SSatish Balay for i in range(self.da.getDof()): 78*5808f684SSatish Balay name = self.da.getFieldName(i) 79*5808f684SSatish Balay self.assertEqual(name, "field%d" % i) 80*5808f684SSatish Balay 81*5808f684SSatish Balay def testCoordinates(self): 82*5808f684SSatish Balay self.da.setUniformCoordinates(0,1,0,1,0,1) 83*5808f684SSatish Balay # 84*5808f684SSatish Balay c = self.da.getCoordinates() 85*5808f684SSatish Balay self.da.setCoordinates(c) 86*5808f684SSatish Balay c.destroy() 87*5808f684SSatish Balay cda = self.da.getCoordinateDM() 88*5808f684SSatish Balay cda.destroy() 89*5808f684SSatish Balay # 90*5808f684SSatish Balay c = self.da.getCoordinates() 91*5808f684SSatish Balay self.da.setCoordinates(c) 92*5808f684SSatish Balay c.destroy() 93*5808f684SSatish Balay gc = self.da.getCoordinatesLocal() 94*5808f684SSatish Balay gc.destroy() 95*5808f684SSatish Balay 96*5808f684SSatish Balay def testCreateVecMat(self): 97*5808f684SSatish Balay vn = self.da.createNaturalVec() 98*5808f684SSatish Balay vg = self.da.createGlobalVec() 99*5808f684SSatish Balay vl = self.da.createLocalVec() 100*5808f684SSatish Balay mat = self.da.createMat() 101*5808f684SSatish Balay self.assertTrue(mat.getType() in ('aij', 'seqaij', 'mpiaij')) 102*5808f684SSatish Balay vn.set(1.0) 103*5808f684SSatish Balay self.da.naturalToGlobal(vn,vg) 104*5808f684SSatish Balay self.assertEqual(vg.max()[1], 1.0) 105*5808f684SSatish Balay self.assertEqual(vg.min()[1], 1.0) 106*5808f684SSatish Balay self.da.globalToLocal(vg,vl) 107*5808f684SSatish Balay self.assertEqual(vl.max()[1], 1.0) 108*5808f684SSatish Balay self.assertTrue (vl.min()[1] in (1.0, 0.0)) 109*5808f684SSatish Balay vn.set(0.0) 110*5808f684SSatish Balay self.da.globalToNatural(vg,vn) 111*5808f684SSatish Balay self.assertEqual(vn.max()[1], 1.0) 112*5808f684SSatish Balay self.assertEqual(vn.min()[1], 1.0) 113*5808f684SSatish Balay vl2 = self.da.createLocalVec() 114*5808f684SSatish Balay self.da.localToLocal(vl,vl2) 115*5808f684SSatish Balay self.assertEqual(vl2.max()[1], 1.0) 116*5808f684SSatish Balay self.assertTrue (vl2.min()[1] in (1.0, 0.0)) 117*5808f684SSatish Balay NONE = PETSc.DM.BoundaryType.NONE 118*5808f684SSatish Balay s = self.da.stencil_width 119*5808f684SSatish Balay btype = self.da.boundary_type 120*5808f684SSatish Balay psize = self.da.proc_sizes 121*5808f684SSatish Balay for b, p in zip(btype, psize): 122*5808f684SSatish Balay if b != NONE and p == 1: return 123*5808f684SSatish Balay vg2 = self.da.createGlobalVec() 124*5808f684SSatish Balay self.da.localToGlobal(vl2,vg2) 125*5808f684SSatish Balay 126*5808f684SSatish Balay def testGetVec(self): 127*5808f684SSatish Balay vg = self.da.getGlobalVec() 128*5808f684SSatish Balay vl = self.da.getLocalVec() 129*5808f684SSatish Balay try: 130*5808f684SSatish Balay vg.set(1.0) 131*5808f684SSatish Balay self.assertEqual(vg.max()[1], 1.0) 132*5808f684SSatish Balay self.assertEqual(vg.min()[1], 1.0) 133*5808f684SSatish Balay self.da.globalToLocal(vg,vl) 134*5808f684SSatish Balay self.assertEqual(vl.max()[1], 1.0) 135*5808f684SSatish Balay self.assertTrue (vl.min()[1] in (1.0, 0.0)) 136*5808f684SSatish Balay vl.set(2.0) 137*5808f684SSatish Balay NONE = PETSc.DM.BoundaryType.NONE 138*5808f684SSatish Balay s = self.da.stencil_width 139*5808f684SSatish Balay btype = self.da.boundary_type 140*5808f684SSatish Balay psize = self.da.proc_sizes 141*5808f684SSatish Balay for b, p in zip(btype, psize): 142*5808f684SSatish Balay if b != NONE and p == 1: return 143*5808f684SSatish Balay self.da.localToGlobal(vl,vg) 144*5808f684SSatish Balay self.assertEqual(vg.max()[1], 2.0) 145*5808f684SSatish Balay self.assertTrue (vg.min()[1] in (2.0, 0.0)) 146*5808f684SSatish Balay finally: 147*5808f684SSatish Balay self.da.restoreGlobalVec(vg) 148*5808f684SSatish Balay self.da.restoreLocalVec(vl) 149*5808f684SSatish Balay 150*5808f684SSatish Balay def testGetOther(self): 151*5808f684SSatish Balay ao = self.da.getAO() 152*5808f684SSatish Balay lgmap = self.da.getLGMap() 153*5808f684SSatish Balay l2g, g2l = self.da.getScatter() 154*5808f684SSatish Balay 155*5808f684SSatish Balay def testRefineCoarsen(self): 156*5808f684SSatish Balay da = self.da 157*5808f684SSatish Balay rda = da.refine() 158*5808f684SSatish Balay self.assertEqual(da.getDim(), rda.getDim()) 159*5808f684SSatish Balay self.assertEqual(da.getDof(), rda.getDof()) 160*5808f684SSatish Balay if da.dim != 1: 161*5808f684SSatish Balay self.assertEqual(da.getStencilType(), rda.getStencilType()) 162*5808f684SSatish Balay self.assertEqual(da.getStencilWidth(), rda.getStencilWidth()) 163*5808f684SSatish Balay cda = rda.coarsen() 164*5808f684SSatish Balay self.assertEqual(rda.getDim(), cda.getDim()) 165*5808f684SSatish Balay self.assertEqual(rda.getDof(), cda.getDof()) 166*5808f684SSatish Balay for n1, n2 in zip(self.da.getSizes(), cda.getSizes()): 167*5808f684SSatish Balay self.assertTrue(abs(n1-n2)<=1) 168*5808f684SSatish Balay 169*5808f684SSatish Balay def testCoarsenRefine(self): 170*5808f684SSatish Balay da = self.da 171*5808f684SSatish Balay cda = self.da.coarsen() 172*5808f684SSatish Balay self.assertEqual(da.getDim(), cda.getDim()) 173*5808f684SSatish Balay self.assertEqual(da.getDof(), cda.getDof()) 174*5808f684SSatish Balay if da.dim != 1: 175*5808f684SSatish Balay self.assertEqual(da.getStencilType(), cda.getStencilType()) 176*5808f684SSatish Balay self.assertEqual(da.getStencilWidth(), cda.getStencilWidth()) 177*5808f684SSatish Balay rda = cda.refine() 178*5808f684SSatish Balay for n1, n2 in zip(self.da.getSizes(), rda.getSizes()): 179*5808f684SSatish Balay self.assertTrue(abs(n1-n2)<=1) 180*5808f684SSatish Balay 181*5808f684SSatish Balay def testRefineHierarchy(self): 182*5808f684SSatish Balay levels = self.da.refineHierarchy(2) 183*5808f684SSatish Balay self.assertTrue(isinstance(levels, list)) 184*5808f684SSatish Balay self.assertEqual(len(levels), 2) 185*5808f684SSatish Balay for item in levels: 186*5808f684SSatish Balay self.assertTrue(isinstance(item, PETSc.DM)) 187*5808f684SSatish Balay 188*5808f684SSatish Balay def testCoarsenHierarchy(self): 189*5808f684SSatish Balay levels = self.da.coarsenHierarchy(2) 190*5808f684SSatish Balay self.assertTrue(isinstance(levels, list)) 191*5808f684SSatish Balay self.assertEqual(len(levels), 2) 192*5808f684SSatish Balay for item in levels: 193*5808f684SSatish Balay self.assertTrue(isinstance(item, PETSc.DM)) 194*5808f684SSatish Balay 195*5808f684SSatish Balay def testCreateInterpolation(self): 196*5808f684SSatish Balay da = self.da 197*5808f684SSatish Balay if da.dim == 1: return 198*5808f684SSatish Balay rda = da.refine() 199*5808f684SSatish Balay mat, vec = da.createInterpolation(rda) 200*5808f684SSatish Balay 201*5808f684SSatish Balay def testCreateInjection(self): 202*5808f684SSatish Balay da = self.da 203*5808f684SSatish Balay if da.dim == 1: return 204*5808f684SSatish Balay rda = da.refine() 205*5808f684SSatish Balay scatter = da.createInjection(rda) 206*5808f684SSatish Balay 207*5808f684SSatish Balay 208*5808f684SSatish BalayMIRROR = PETSc.DMDA.BoundaryType.MIRROR 209*5808f684SSatish BalayGHOSTED = PETSc.DMDA.BoundaryType.GHOSTED 210*5808f684SSatish BalayPERIODIC = PETSc.DMDA.BoundaryType.PERIODIC 211*5808f684SSatish BalayTWIST = PETSc.DMDA.BoundaryType.TWIST 212*5808f684SSatish Balay 213*5808f684SSatish BalaySCALE = 4 214*5808f684SSatish Balay 215*5808f684SSatish Balayclass BaseTestDA_1D(BaseTestDA): 216*5808f684SSatish Balay SIZES = [100*SCALE] 217*5808f684SSatish Balay 218*5808f684SSatish Balayclass BaseTestDA_2D(BaseTestDA): 219*5808f684SSatish Balay SIZES = [9*SCALE,11*SCALE] 220*5808f684SSatish Balay 221*5808f684SSatish Balayclass BaseTestDA_3D(BaseTestDA): 222*5808f684SSatish Balay SIZES = [6*SCALE,7*SCALE,8*SCALE] 223*5808f684SSatish Balay 224*5808f684SSatish Balay# -------------------------------------------------------------------- 225*5808f684SSatish Balay 226*5808f684SSatish Balayclass TestDA_1D(BaseTestDA_1D, unittest.TestCase): 227*5808f684SSatish Balay pass 228*5808f684SSatish Balayclass TestDA_1D_W0(TestDA_1D): 229*5808f684SSatish Balay SWIDTH = 0 230*5808f684SSatish Balayclass TestDA_1D_W2(TestDA_1D): 231*5808f684SSatish Balay SWIDTH = 2 232*5808f684SSatish Balay 233*5808f684SSatish Balayclass TestDA_2D(BaseTestDA_2D, unittest.TestCase): 234*5808f684SSatish Balay pass 235*5808f684SSatish Balayclass TestDA_2D_W0(TestDA_2D): 236*5808f684SSatish Balay SWIDTH = 0 237*5808f684SSatish Balayclass TestDA_2D_W0_N2(TestDA_2D): 238*5808f684SSatish Balay DOF = 2 239*5808f684SSatish Balay SWIDTH = 0 240*5808f684SSatish Balayclass TestDA_2D_W2(TestDA_2D): 241*5808f684SSatish Balay SWIDTH = 2 242*5808f684SSatish Balayclass TestDA_2D_W2_N2(TestDA_2D): 243*5808f684SSatish Balay DOF = 2 244*5808f684SSatish Balay SWIDTH = 2 245*5808f684SSatish Balayclass TestDA_2D_PXY(TestDA_2D): 246*5808f684SSatish Balay SIZES = [13*SCALE,17*SCALE] 247*5808f684SSatish Balay DOF = 2 248*5808f684SSatish Balay SWIDTH = 5 249*5808f684SSatish Balay BOUNDARY = (PERIODIC,)*2 250*5808f684SSatish Balayclass TestDA_2D_GXY(TestDA_2D): 251*5808f684SSatish Balay SIZES = [13*SCALE,17*SCALE] 252*5808f684SSatish Balay DOF = 2 253*5808f684SSatish Balay SWIDTH = 5 254*5808f684SSatish Balay BOUNDARY = (GHOSTED,)*2 255*5808f684SSatish Balayclass TestDA_2D_TXY(TestDA_2D): 256*5808f684SSatish Balay SIZES = [13*SCALE,17*SCALE] 257*5808f684SSatish Balay DOF = 2 258*5808f684SSatish Balay SWIDTH = 5 259*5808f684SSatish Balay BOUNDARY = (TWIST,)*2 260*5808f684SSatish Balay 261*5808f684SSatish Balayclass TestDA_3D(BaseTestDA_3D, unittest.TestCase): 262*5808f684SSatish Balay pass 263*5808f684SSatish Balayclass TestDA_3D_W0(TestDA_3D): 264*5808f684SSatish Balay SWIDTH = 0 265*5808f684SSatish Balayclass TestDA_3D_W0_N2(TestDA_3D): 266*5808f684SSatish Balay DOF = 2 267*5808f684SSatish Balay SWIDTH = 0 268*5808f684SSatish Balayclass TestDA_3D_W2(TestDA_3D): 269*5808f684SSatish Balay SWIDTH = 2 270*5808f684SSatish Balayclass TestDA_3D_W2_N2(TestDA_3D): 271*5808f684SSatish Balay DOF = 2 272*5808f684SSatish Balay SWIDTH = 2 273*5808f684SSatish Balayclass TestDA_3D_PXYZ(TestDA_3D): 274*5808f684SSatish Balay SIZES = [11*SCALE,13*SCALE,17*SCALE] 275*5808f684SSatish Balay DOF = 2 276*5808f684SSatish Balay SWIDTH = 3 277*5808f684SSatish Balay BOUNDARY = (PERIODIC,)*3 278*5808f684SSatish Balayclass TestDA_3D_GXYZ(TestDA_3D): 279*5808f684SSatish Balay SIZES = [11*SCALE,13*SCALE,17*SCALE] 280*5808f684SSatish Balay DOF = 2 281*5808f684SSatish Balay SWIDTH = 3 282*5808f684SSatish Balay BOUNDARY = (GHOSTED,)*3 283*5808f684SSatish Balayclass TestDA_3D_TXYZ(TestDA_3D): 284*5808f684SSatish Balay SIZES = [11*SCALE,13*SCALE,17*SCALE] 285*5808f684SSatish Balay DOF = 2 286*5808f684SSatish Balay SWIDTH = 3 287*5808f684SSatish Balay BOUNDARY = (TWIST,)*3 288*5808f684SSatish Balay 289*5808f684SSatish Balay# -------------------------------------------------------------------- 290*5808f684SSatish Balay 291*5808f684SSatish BalayDIM = (1,2,3,) 292*5808f684SSatish BalayDOF = (None,1,2,3,4,5,) 293*5808f684SSatish BalayBOUNDARY_TYPE = ( 294*5808f684SSatish Balay None, 295*5808f684SSatish Balay "none", (0,)*3, 0, 296*5808f684SSatish Balay "ghosted", (GHOSTED,)*3, GHOSTED, 297*5808f684SSatish Balay "periodic", (PERIODIC,)*3, PERIODIC, 298*5808f684SSatish Balay "twist", (TWIST,)*3, TWIST, 299*5808f684SSatish Balay ) 300*5808f684SSatish BalaySTENCIL_TYPE = (None,"star","box") 301*5808f684SSatish BalaySTENCIL_WIDTH = (None,0,1,2,3) 302*5808f684SSatish Balay 303*5808f684SSatish Balay 304*5808f684SSatish BalayDIM = (1,2,3) 305*5808f684SSatish BalayDOF = (None,2,5) 306*5808f684SSatish BalayBOUNDARY_TYPE = (None,"none","periodic","ghosted","twist") 307*5808f684SSatish BalaySTENCIL_TYPE = (None,"box") 308*5808f684SSatish BalaySTENCIL_WIDTH = (None,1,2) 309*5808f684SSatish Balay 310*5808f684SSatish Balayclass TestDACreate(unittest.TestCase): 311*5808f684SSatish Balay pass 312*5808f684SSatish Balaycounter = 0 313*5808f684SSatish Balayfor dim in DIM: 314*5808f684SSatish Balay for dof in DOF: 315*5808f684SSatish Balay for boundary in BOUNDARY_TYPE: 316*5808f684SSatish Balay if isinstance(boundary, tuple): 317*5808f684SSatish Balay boundary = boundary[:dim] 318*5808f684SSatish Balay for stencil in STENCIL_TYPE: 319*5808f684SSatish Balay for width in STENCIL_WIDTH: 320*5808f684SSatish Balay kargs = dict(sizes=[8*SCALE]*dim, 321*5808f684SSatish Balay dim=dim, dof=dof, 322*5808f684SSatish Balay boundary_type=boundary, 323*5808f684SSatish Balay stencil_type=stencil, 324*5808f684SSatish Balay stencil_width=width) 325*5808f684SSatish Balay def testCreate(self, kargs=kargs): 326*5808f684SSatish Balay kargs = dict(kargs) 327*5808f684SSatish Balay da = PETSc.DMDA().create(**kargs) 328*5808f684SSatish Balay da.destroy() 329*5808f684SSatish Balay setattr(TestDACreate, 330*5808f684SSatish Balay "testCreate%04d"%counter, 331*5808f684SSatish Balay testCreate) 332*5808f684SSatish Balay del testCreate, kargs 333*5808f684SSatish Balay counter += 1 334*5808f684SSatish Balaydel counter, dim, dof, boundary, stencil, width 335*5808f684SSatish Balay 336*5808f684SSatish Balayclass TestDADuplicate(unittest.TestCase): 337*5808f684SSatish Balay pass 338*5808f684SSatish Balaycounter = 0 339*5808f684SSatish Balayfor dim in DIM: 340*5808f684SSatish Balay for dof in DOF: 341*5808f684SSatish Balay for boundary in BOUNDARY_TYPE: 342*5808f684SSatish Balay if isinstance(boundary, tuple): 343*5808f684SSatish Balay boundary = boundary[:dim] 344*5808f684SSatish Balay for stencil in STENCIL_TYPE: 345*5808f684SSatish Balay for width in STENCIL_WIDTH: 346*5808f684SSatish Balay kargs = dict(dim=dim, dof=dof, 347*5808f684SSatish Balay boundary_type=boundary, 348*5808f684SSatish Balay stencil_type=stencil, 349*5808f684SSatish Balay stencil_width=width) 350*5808f684SSatish Balay def testDuplicate(self, kargs=kargs): 351*5808f684SSatish Balay kargs = dict(kargs) 352*5808f684SSatish Balay dim = kargs.pop('dim') 353*5808f684SSatish Balay dof = kargs['dof'] 354*5808f684SSatish Balay boundary = kargs['boundary_type'] 355*5808f684SSatish Balay stencil = kargs['stencil_type'] 356*5808f684SSatish Balay width = kargs['stencil_width'] 357*5808f684SSatish Balay da = PETSc.DMDA().create([8*SCALE]*dim) 358*5808f684SSatish Balay newda = da.duplicate(**kargs) 359*5808f684SSatish Balay self.assertEqual(newda.dim, da.dim) 360*5808f684SSatish Balay self.assertEqual(newda.sizes, da.sizes) 361*5808f684SSatish Balay self.assertEqual(newda.proc_sizes, 362*5808f684SSatish Balay da.proc_sizes) 363*5808f684SSatish Balay self.assertEqual(newda.ranges, da.ranges) 364*5808f684SSatish Balay self.assertEqual(newda.corners, da.corners) 365*5808f684SSatish Balay if (newda.boundary_type == da.boundary_type 366*5808f684SSatish Balay and 367*5808f684SSatish Balay newda.stencil_width == da.stencil_width): 368*5808f684SSatish Balay self.assertEqual(newda.ghost_ranges, 369*5808f684SSatish Balay da.ghost_ranges) 370*5808f684SSatish Balay self.assertEqual(newda.ghost_corners, 371*5808f684SSatish Balay da.ghost_corners) 372*5808f684SSatish Balay if dof is None: 373*5808f684SSatish Balay dof = da.dof 374*5808f684SSatish Balay if boundary is None: 375*5808f684SSatish Balay boundary = da.boundary_type 376*5808f684SSatish Balay elif boundary == "none": 377*5808f684SSatish Balay boundary = (0,) * dim 378*5808f684SSatish Balay elif boundary == "mirror": 379*5808f684SSatish Balay boundary = (MIRROR,) * dim 380*5808f684SSatish Balay elif boundary == "ghosted": 381*5808f684SSatish Balay boundary = (GHOSTED,) * dim 382*5808f684SSatish Balay elif boundary == "periodic": 383*5808f684SSatish Balay boundary = (PERIODIC,) * dim 384*5808f684SSatish Balay elif boundary == "twist": 385*5808f684SSatish Balay boundary = (TWIST,) * dim 386*5808f684SSatish Balay elif isinstance(boundary, int): 387*5808f684SSatish Balay boundary = (boundary,) * dim 388*5808f684SSatish Balay if stencil is None: 389*5808f684SSatish Balay stencil = da.stencil[0] 390*5808f684SSatish Balay if width is None: 391*5808f684SSatish Balay width = da.stencil_width 392*5808f684SSatish Balay self.assertEqual(newda.dof, dof) 393*5808f684SSatish Balay self.assertEqual(newda.boundary_type, 394*5808f684SSatish Balay boundary) 395*5808f684SSatish Balay if dim == 1: 396*5808f684SSatish Balay self.assertEqual(newda.stencil, 397*5808f684SSatish Balay (stencil, width)) 398*5808f684SSatish Balay newda.destroy() 399*5808f684SSatish Balay da.destroy() 400*5808f684SSatish Balay setattr(TestDADuplicate, 401*5808f684SSatish Balay "testDuplicate%04d"%counter, 402*5808f684SSatish Balay testDuplicate) 403*5808f684SSatish Balay del testDuplicate, kargs 404*5808f684SSatish Balay counter += 1 405*5808f684SSatish Balaydel counter, dim, dof, boundary, stencil, width 406*5808f684SSatish Balay 407*5808f684SSatish Balay# -------------------------------------------------------------------- 408*5808f684SSatish Balay 409*5808f684SSatish Balayif PETSc.COMM_WORLD.getSize() > 1: 410*5808f684SSatish Balay del TestDA_1D_W0 411*5808f684SSatish Balay del TestDA_2D_W0, TestDA_2D_W0_N2 412*5808f684SSatish Balay del TestDA_3D_W0, TestDA_3D_W0_N2 413*5808f684SSatish Balay 414*5808f684SSatish Balay# -------------------------------------------------------------------- 415*5808f684SSatish Balay 416*5808f684SSatish Balayif __name__ == '__main__': 417*5808f684SSatish Balay unittest.main() 418*5808f684SSatish Balay 419*5808f684SSatish Balay# -------------------------------------------------------------------- 420