예제 #1
0
 def testPrepareEx1(self):
     sourceMesh = self.build2DSourceMesh_1()
     targetMesh = self.build2DTargetMesh_3()
     #
     remapper = MEDCouplingRemapper()
     remapper.setPrecision(1e-12)
     remapper.setIntersectionType(Triangulation)
     srcFt = MEDCouplingFieldTemplate.New(ON_CELLS)
     trgFt = MEDCouplingFieldTemplate.New(ON_CELLS)
     srcFt.setMesh(sourceMesh)
     trgFt.setMesh(targetMesh)
     self.assertEqual(1, remapper.prepareEx(srcFt, trgFt))
     srcField = MEDCouplingFieldDouble.New(ON_CELLS)
     srcField.setNature(ConservativeVolumic)
     srcField.setMesh(sourceMesh)
     array = DataArrayDouble.New()
     ptr = sourceMesh.getNumberOfCells() * [None]
     for i in xrange(sourceMesh.getNumberOfCells()):
         ptr[i] = float(i + 7)
         pass
     array.setValues(ptr, sourceMesh.getNumberOfCells(), 1)
     srcField.setArray(array)
     trgfield = remapper.transferField(srcField, 4.220173)
     values = trgfield.getArray().getValues()
     valuesExpected = [7.75, 7.0625, 4.220173, 8.0]
     self.assertEqual(4,
                      trgfield.getArray().getNumberOfTuples())
     self.assertEqual(1,
                      trgfield.getArray().getNumberOfComponents())
     for i0 in xrange(4):
         self.assertAlmostEqual(valuesExpected[i0], values[i0], 12)
         pass
     pass
예제 #2
0
 def testRemapper1(self):
     sourceMesh = self.build2DSourceMesh_1()
     targetMesh = self.build2DTargetMesh_1()
     remapper = MEDCouplingRemapper()
     remapper.setPrecision(1e-12)
     remapper.setIntersectionType(Triangulation)
     self.failUnless(remapper.prepare(sourceMesh, targetMesh, "P0P0") == 1)
     srcField = MEDCouplingFieldDouble.New(ON_CELLS)
     srcField.setNature(ConservativeVolumic)
     srcField.setMesh(sourceMesh)
     array = DataArrayDouble.New()
     ptr = sourceMesh.getNumberOfCells() * [None]
     for i in xrange(sourceMesh.getNumberOfCells()):
         ptr[i] = float(i + 7)
         pass
     array.setValues(ptr, sourceMesh.getNumberOfCells(), 1)
     srcField.setArray(array)
     trgfield = remapper.transferField(srcField, 4.57)
     values = trgfield.getArray().getValues()
     valuesExpected = [7.5, 7., 7., 8., 7.5]
     for i in xrange(targetMesh.getNumberOfCells()):
         self.failUnless(abs(values[i] - valuesExpected[i]) < 1e-12)
         pass
     self.failUnless(1 == trgfield.getArray().getNumberOfComponents())
     pass
예제 #3
0
trgMesh = MEDCouplingCMesh()
trgMesh.setCoords(arr, arr)
trgMesh = trgMesh.buildUnstructured()
#
arr = DataArrayDouble(21)
arr.iota(0)
arr *= 0.5
srcMesh = MEDCouplingCMesh()
srcMesh.setCoords(arr, arr)
srcMesh = srcMesh.buildUnstructured()
#
tmp = srcMesh[:20]
tmp.simplexize(0)
srcMesh = MEDCouplingUMesh.MergeUMeshes([tmp, srcMesh[20:]])
#
remap = MEDCouplingRemapper()
remap.prepare(srcMesh, trgMesh, "P0P0")
#
myMatrix = remap.getCrudeMatrix()
print myMatrix  # pour voir a quoi elle ressemble
sumByRows = DataArrayDouble(len(myMatrix))
for i, wIt in enumerate(sumByRows):
    su = 0.
    for it in myMatrix[i]:
        su += myMatrix[i][it]
    wIt[0] = su
print "Does interpolation look OK ? %s" % (str(sumByRows.isUniform(1., 1e-12)))
assert sumByRows.isUniform(1., 1e-12)
#
srcField = MEDCouplingFieldDouble(ON_CELLS, ONE_TIME)
srcField.setMesh(srcMesh)
예제 #4
0
 def testPrepareCC(self):
     # 1D
     src = MEDCouplingCMesh()
     arr = DataArrayDouble([-0.7, -0.1, 0.2, 0.7, 2., 2.3])
     src.setCoordsAt(0, arr)
     trg = MEDCouplingCMesh()
     arr = DataArrayDouble([-0.9, -0.1, 0.15])
     trg.setCoordsAt(0, arr)
     fieldSrc = MEDCouplingFieldDouble(ON_CELLS, NO_TIME)
     fieldSrc.setMesh(src)
     arrTrg = DataArrayDouble([10., 30., 40., 70., 80.])
     fieldSrc.setNature(Integral)
     fieldSrc.setArray(arrTrg)
     rem = MEDCouplingRemapper()
     rem.prepare(src, trg, "P0P0")
     trgField = rem.transferField(fieldSrc, -7.)
     expected1 = [10., 25.]
     self.assertEqual(2., trgField.getArray().getNumberOfTuples())
     self.assertEqual(2, len(expected1))
     for i, val in enumerate(expected1):
         self.assertAlmostEqual(expected1[i],
                                trgField.getArray().getIJ(i, 0), 12)
         pass
     # 2D
     src = MEDCouplingCMesh()
     arr = DataArrayDouble([-0.7, -0.1, 0.2, 0.7, 2., 2.3])
     src.setCoordsAt(0, arr)
     src.setCoordsAt(1, arr)
     trg = MEDCouplingCMesh()
     arr = DataArrayDouble([-0.9, -0.1, 0.15])
     trg.setCoordsAt(0, arr)
     trg.setCoordsAt(1, arr)
     fieldSrc = MEDCouplingFieldDouble(ON_CELLS, NO_TIME)
     fieldSrc.setMesh(src)
     arrSrc = DataArrayDouble([
         10., 30., 40., 70., 80., 110., 130., 140., 170., 180., 210., 230.,
         240., 270., 280., 310., 330., 340., 370., 380., 410., 430., 440.,
         470., 480.
     ])
     fieldSrc.setNature(Integral)
     fieldSrc.setArray(arrSrc)
     rem = MEDCouplingRemapper()
     rem.prepare(src, trg, "P0P0")
     trgField = rem.transferField(fieldSrc, -7.)
     expected2 = [10., 25., 91.66666666666666, 90.27777777777777]
     self.assertEqual(4, trgField.getArray().getNumberOfTuples())
     self.assertEqual(4, len(expected2))
     for i, val in enumerate(expected2):
         self.assertAlmostEqual(expected2[i],
                                trgField.getArray().getIJ(i, 0), 12)
         pass
     # 3D
     src = MEDCouplingCMesh()
     arr = DataArrayDouble([-0.7, -0.1, 0.2, 0.7, 2., 2.3])
     src.setCoordsAt(0, arr)
     src.setCoordsAt(1, arr)
     src.setCoordsAt(2, arr)
     trg = MEDCouplingCMesh()
     arr = DataArrayDouble([-0.9, -0.1, 0.15])
     trg.setCoordsAt(0, arr)
     trg.setCoordsAt(1, arr)
     trg.setCoordsAt(2, arr)
     fieldSrc = MEDCouplingFieldDouble(ON_CELLS, NO_TIME)
     fieldSrc.setMesh(src)
     arrSrc = DataArrayDouble(125)
     arrSrc.iota(7.7)
     fieldSrc.setNature(Integral)
     fieldSrc.setArray(arrSrc)
     fieldSrc.checkCoherency()
     rem = MEDCouplingRemapper()
     rem.prepare(src, trg, "P0P0")
     trgField = rem.transferField(fieldSrc, -7.)
     expected3 = [
         7.7, 7.249999999999999, 10.583333333333332, 9.513888888888886,
         27.25, 23.40277777777777, 26.180555555555546, 22.39583333333333
     ]
     self.assertEqual(8, trgField.getArray().getNumberOfTuples())
     self.assertEqual(8, len(expected3))
     for i, val in enumerate(expected3):
         self.assertAlmostEqual(expected3[i],
                                trgField.getArray().getIJ(i, 0), 12)
         pass
     pass
예제 #5
0
 def testPrepareCU(self):
     # 1D
     coords = DataArrayDouble([0., 0.5, 0.7])
     trg = MEDCouplingUMesh("", 1)
     trg.setCoords(coords)
     trg.allocateCells(2)
     trg.insertNextCell(NORM_SEG2, [0, 1])
     trg.insertNextCell(NORM_SEG2, [1, 2])
     trg.finishInsertingCells()
     src = MEDCouplingCMesh()
     arr = DataArrayDouble([-0.7, -0.1, 0.2, 0.7, 2., 2.3])
     src.setCoordsAt(0, arr)
     fieldSrc = MEDCouplingFieldDouble(ON_CELLS, NO_TIME)
     fieldSrc.setMesh(src)
     arrTrg = DataArrayDouble([10., 30., 40., 70., 80.])
     fieldSrc.setNature(Integral)
     fieldSrc.setArray(arrTrg)
     rem = MEDCouplingRemapper()
     rem.prepare(src, trg, "P0P0")
     trgField = rem.transferField(fieldSrc, -7.)
     expected1 = [44., 16.]
     self.assertEqual(2., trgField.getArray().getNumberOfTuples())
     self.assertEqual(2, len(expected1))
     for i, val in enumerate(expected1):
         self.assertAlmostEqual(expected1[i],
                                trgField.getArray().getIJ(i, 0), 12)
         pass
     # 2D
     coords = DataArrayDouble([0., 0., 0., 1., 1., 1., 1., 0., 0.5, -0.2],
                              5, 2)
     trg = MEDCouplingUMesh("", 2)
     trg.setCoords(coords)
     trg.allocateCells(2)
     trg.insertNextCell(NORM_TRI3, [0, 1, 2])
     trg.insertNextCell(NORM_TRI3, [3, 4, 0])
     trg.finishInsertingCells()
     src = MEDCouplingCMesh()
     arr = DataArrayDouble([-0.7, -0.1, 0.2, 0.7, 2., 2.3])
     src.setCoordsAt(0, arr)
     src.setCoordsAt(1, arr)
     fieldSrc = MEDCouplingFieldDouble(ON_CELLS, NO_TIME)
     fieldSrc.setMesh(src)
     arrSrc = DataArrayDouble([
         10., 30., 40., 70., 80., 110., 130., 140., 170., 180., 210., 230.,
         240., 270., 280., 310., 330., 340., 370., 380., 410., 430., 440.,
         470., 480.
     ])
     fieldSrc.setNature(Integral)
     fieldSrc.setArray(arrSrc)
     rem = MEDCouplingRemapper()
     rem.prepare(src, trg, "P0P0")
     trgField = rem.transferField(fieldSrc, -7.)
     expected2 = [441.3050624589086, 68.69529914529915]
     self.assertEqual(2, trgField.getArray().getNumberOfTuples())
     self.assertEqual(2, len(expected2))
     for i, val in enumerate(expected2):
         self.assertAlmostEqual(expected2[i],
                                trgField.getArray().getIJ(i, 0), 12)
         pass
     # 3D
     coords = DataArrayDouble([
         0., 0., 0., 0., 1., 0., 1., 1., 0., 1., 0., 0., 0.5, -0.2, 0., 0.1,
         0.8, 1., 0.5, 0., 1.
     ], 7, 3)
     trg = MEDCouplingUMesh("", 3)
     trg.setCoords(coords)
     trg.allocateCells(2)
     trg.insertNextCell(NORM_TETRA4, [0, 1, 2, 5])
     trg.insertNextCell(NORM_TETRA4, [3, 4, 0, 6])
     trg.finishInsertingCells()
     src = MEDCouplingCMesh()
     arr = DataArrayDouble([-0.7, -0.1, 0.2, 0.7, 2., 2.3])
     arr2 = DataArrayDouble([-0.7, 0.2, 0.6, 1.2, 2.])
     src.setCoordsAt(0, arr)
     src.setCoordsAt(1, arr)
     src.setCoordsAt(2, arr2)
     trg.checkCoherency2(1e-10)
     src.checkCoherency()
     fieldSrc = MEDCouplingFieldDouble(ON_CELLS, NO_TIME)
     fieldSrc.setMesh(src)
     arrSrc = DataArrayDouble(100)
     arrSrc.iota(7.7)
     fieldSrc.setNature(Integral)
     fieldSrc.setArray(arrSrc)
     rem = MEDCouplingRemapper()
     rem.prepare(src, trg, "P0P0")
     trgField = rem.transferField(fieldSrc, -7.)
     expected3 = [39.635196634558845, 12.13422356758468]
     self.assertEqual(2, trgField.getArray().getNumberOfTuples())
     self.assertEqual(2, len(expected3))
     for i, val in enumerate(expected3):
         self.assertAlmostEqual(expected3[i],
                                trgField.getArray().getIJ(i, 0), 12)
         pass
     pass
예제 #6
0
 def testPrepareUC(self):
     # 1D
     coords = DataArrayDouble([0., 0.5, 0.7])
     src = MEDCouplingUMesh("", 1)
     src.setCoords(coords)
     src.allocateCells(2)
     src.insertNextCell(NORM_SEG2, [0, 1])
     src.insertNextCell(NORM_SEG2, [1, 2])
     src.finishInsertingCells()
     trg = MEDCouplingCMesh()
     arr = DataArrayDouble([-0.7, -0.1, 0.2, 0.7, 2., 2.3])
     trg.setCoordsAt(0, arr)
     fieldSrc = MEDCouplingFieldDouble(ON_CELLS, NO_TIME)
     fieldSrc.setMesh(src)
     arrSrc = DataArrayDouble([10., 30.])
     fieldSrc.setNature(Integral)
     fieldSrc.setArray(arrSrc)
     rem = MEDCouplingRemapper()
     rem.prepare(src, trg, "P0P0")
     trgField = rem.transferField(fieldSrc, -7.)
     expected1 = [-7., 4., 36., -7., -7.]
     self.assertEqual(5, trgField.getArray().getNumberOfTuples())
     self.assertEqual(5, len(expected1))
     for i, val in enumerate(expected1):
         self.assertAlmostEqual(expected1[i],
                                trgField.getArray().getIJ(i, 0), 12)
         pass
     # 2D
     coords = DataArrayDouble([0., 0., 0., 1., 1., 1., 1., 0., 0.5, -0.2],
                              5, 2)
     src = MEDCouplingUMesh("", 2)
     src.setCoords(coords)
     src.allocateCells(2)
     src.insertNextCell(NORM_TRI3, [0, 1, 2])
     src.insertNextCell(NORM_TRI3, [3, 4, 0])
     src.finishInsertingCells()
     trg = MEDCouplingCMesh()
     arr = DataArrayDouble([-0.7, -0.1, 0.2, 0.7, 2., 2.3])
     trg.setCoordsAt(0, arr)
     trg.setCoordsAt(1, arr)
     fieldSrc = MEDCouplingFieldDouble(ON_CELLS, NO_TIME)
     fieldSrc.setMesh(src)
     arrSrc = DataArrayDouble([10., 30.])
     fieldSrc.setNature(Integral)
     fieldSrc.setArray(arrSrc)
     rem = MEDCouplingRemapper()
     rem.prepare(src, trg, "P0P0")
     trgField = rem.transferField(fieldSrc, -7.)
     expected2 = [
         -7., -7., 7.35, 0.15, -7., -7., 2.8, 14.85, 5.25, -7., -7., 2.,
         2.5, -7., -7., -7., 1.2, 3., 0.9, -7., -7., -7., -7., -7., -7.
     ]
     self.assertEqual(25, trgField.getArray().getNumberOfTuples())
     self.assertEqual(25, len(expected2))
     for i, val in enumerate(expected2):
         self.assertAlmostEqual(expected2[i],
                                trgField.getArray().getIJ(i, 0), 12)
         pass
     # 3D
     coords = DataArrayDouble([
         0., 0., 0., 0., 1., 0., 1., 1., 0., 1., 0., 0., 0.5, -0.2, 0., 0.1,
         0.8, 1., 0.5, 0., 1.
     ], 7, 3)
     src = MEDCouplingUMesh("", 3)
     src.setCoords(coords)
     src.allocateCells(2)
     src.insertNextCell(NORM_TETRA4, [0, 1, 2, 5])
     src.insertNextCell(NORM_TETRA4, [3, 4, 0, 6])
     src.finishInsertingCells()
     trg = MEDCouplingCMesh()
     arr = DataArrayDouble([-0.7, -0.1, 0.2, 0.7, 2., 2.3])
     arr2 = DataArrayDouble([-0.7, 0.2, 0.6, 1.2, 2.])
     trg.setCoordsAt(0, arr)
     trg.setCoordsAt(1, arr)
     trg.setCoordsAt(2, arr2)
     src.checkCoherency2(1e-10)
     trg.checkCoherency()
     fieldSrc = MEDCouplingFieldDouble(ON_CELLS, NO_TIME)
     fieldSrc.setMesh(src)
     arrSrc = DataArrayDouble([10., 30.])
     fieldSrc.setNature(Integral)
     fieldSrc.setArray(arrSrc)
     rem = MEDCouplingRemapper()
     rem.prepare(src, trg, "P0P0")
     trgField = rem.transferField(fieldSrc, -7.)
     expected3 = [
         -7., -7., 2.925, 0.015, -7., -7., 0.9392, 8.595, 2.265, -7., -7.,
         1.1008, 1.1192, -7., -7., -7., 0.6392, 1.6408, 0.2808, -7., -7.,
         -7., -7., -7., -7., -7., -7., 0.81, -7., -7., -7., 0.1208, 11.55,
         0.96, -7., -7., 1.1752, 0.6592, -7., -7., -7., 0.8512, 1.7744,
         0.0192, -7., -7., -7., -7., -7., -7., -7., -7., -7., -7., -7., -7.,
         -7., 1.92, -7., -7., -7., 0.12578571428571422,
         0.007314285714285673, -7., -7., -7., 0.3189253968253971,
         0.1879746031746033, -7., -7., -7., -7., -7., -7., -7., -7., -7.,
         -7., -7., -7., -7., -7., -7., -7., -7., -7., -7., -7., -7., -7.,
         -7., -7., -7., -7., -7., -7., -7., -7., -7., -7.
     ]
     self.assertEqual(100, trgField.getArray().getNumberOfTuples())
     self.assertEqual(100, len(expected3))
     for i, val in enumerate(expected3):
         self.assertAlmostEqual(expected3[i],
                                trgField.getArray().getIJ(i, 0), 12)
         pass
     pass