X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FParaMEDMEM_Swig%2Ftest_NonCoincidentDEC.py;h=7be5f973ef7cc708b12b1e98db74b48e8c80fcb9;hb=f5ef9d3ee60ec09d1a57a9777af9d989748788ee;hp=acf78aa5e3f58f758bf8f973a9e817a864492862;hpb=3c911ce36f5caa779ea60042e738fa57671a44b1;p=tools%2Fmedcoupling.git diff --git a/src/ParaMEDMEM_Swig/test_NonCoincidentDEC.py b/src/ParaMEDMEM_Swig/test_NonCoincidentDEC.py index acf78aa5e..7be5f973e 100755 --- a/src/ParaMEDMEM_Swig/test_NonCoincidentDEC.py +++ b/src/ParaMEDMEM_Swig/test_NonCoincidentDEC.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2015 CEA/DEN, EDF R&D +# Copyright (C) 2007-2021 CEA/DEN, EDF R&D # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -19,126 +19,119 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -from ParaMEDMEM import * -import sys, os +from medcoupling import * +from mpi4py import MPI +import unittest +import os -MPI_Init(sys.argv) +class ParaMEDMEM_DEC_Tests(unittest.TestCase): + def test_NonCoincidentDEC_py(self): + size = MPI.COMM_WORLD.size + rank = MPI.COMM_WORLD.rank -size = MPI_Comm_size(MPI_COMM_WORLD) -rank = MPI_Comm_rank(MPI_COMM_WORLD) -if size != 5: - raise RuntimeError, "Expect MPI_COMM_WORLD size == 5" + if size != 5: + raise RuntimeError("Expect MPI.MPI_COMM_WORLD size == 5") -nproc_source = 3 -procs_source = range( nproc_source ) -procs_target = range( size - nproc_source + 1, size) + nproc_source = 3 + procs_source = list(range(nproc_source)) + procs_target = list(range(size - nproc_source + 1, size)) -interface = CommInterface() + interface = CommInterface() -target_group = MPIProcessorGroup(interface, procs_target) -source_group = MPIProcessorGroup(interface, procs_source) + target_group = MPIProcessorGroup(interface, procs_target) + source_group = MPIProcessorGroup(interface, procs_source) -source_mesh= 0 -target_mesh= 0 -parasupport= 0 -mesh = 0 -support = 0 -field = 0 -paramesh = 0 -parafield = 0 -icocofield = 0 + dec = NonCoincidentDEC(source_group, target_group) -dec = NonCoincidentDEC(source_group, target_group) + data_dir = os.path.join(os.environ['MEDCOUPLING_ROOT_DIR'], "share", "resources", "med") + if not os.path.isdir(data_dir): + data_dir = os.environ.get('MED_RESOURCES_DIR',"::").split(":")[1] + tmp_dir = os.environ.get('TMP', "") + if tmp_dir == '': + tmp_dir = "/tmp" -data_dir = os.environ['MED_ROOT_DIR'] -tmp_dir = os.environ['TMP'] -if tmp_dir == '': - tmp_dir = "/tmp" - pass + filename_xml1 = os.path.join(data_dir, "square1_split") + filename_xml2 = os.path.join(data_dir, "square2_split") -filename_xml1 = data_dir + "/share/salome/resources/med/square1_split" -filename_xml2 = data_dir + "/share/salome/resources/med/square2_split" + MPI.COMM_WORLD.Barrier() -MPI_Barrier(MPI_COMM_WORLD) - -if source_group.containsMyRank(): + if source_group.containsMyRank(): + filename = filename_xml1 + str(rank+1) + ".med" + meshname = "Mesh_2_" + str(rank+1) - filename = filename_xml1 + str(rank+1) + ".med" - meshname = "Mesh_2_" + str(rank+1) + mesh = MESH(MED_DRIVER, filename, meshname) + support = SUPPORT(mesh, "all elements", MED_CELL) + paramesh = ParaMESH(mesh, source_group, "source mesh") - mesh = MESH(MED_DRIVER, filename, meshname) - support = SUPPORT(mesh, "all elements", MED_CELL) - paramesh = ParaMESH(mesh, source_group, "source mesh") + parasupport = UnstructuredParaSUPPORT( support, source_group) + comptopo = ComponentTopology() - parasupport = UnstructuredParaSUPPORT( support, source_group) - comptopo = ComponentTopology() + parafield = ParaFIELD(parasupport, comptopo) - parafield = ParaFIELD(parasupport, comptopo) + nb_local = support.getNumberOfElements(MED_ALL_ELEMENTS); - nb_local = support.getNumberOfElements(MED_ALL_ELEMENTS); + value = [1.0]*nb_local - value = [1.0]*nb_local + parafield.getField().setValue(value) + icocofield = ICoCoMEDDoubleField(paramesh,parafield) + dec.attachLocalField(icocofield,'P0') + pass - parafield.getField().setValue(value) - icocofield = ICoCo_MEDField(paramesh,parafield) - dec.attachLocalField(icocofield,'P0') - pass + if target_group.containsMyRank(): + filename = filename_xml2 + str(rank - nproc_source + 1) + ".med" + meshname = "Mesh_3_" + str(rank - nproc_source + 1) -if target_group.containsMyRank(): + mesh = MESH(MED_DRIVER, filename, meshname) + support = SUPPORT(mesh, "all elements", MED_CELL) + paramesh = ParaMESH(mesh, target_group, "target mesh") - filename = filename_xml2 + str(rank - nproc_source + 1) + ".med" - meshname = "Mesh_3_" + str(rank - nproc_source + 1) + parasupport = UnstructuredParaSUPPORT( support, target_group) + comptopo = ComponentTopology() + parafield = ParaFIELD(parasupport, comptopo) - mesh = MESH(MED_DRIVER, filename, meshname) - support = SUPPORT(mesh, "all elements", MED_CELL) - paramesh = ParaMESH(mesh, target_group, "target mesh") + nb_local = support.getNumberOfElements(MED_ALL_ELEMENTS) + value = [0.0]*nb_local - parasupport = UnstructuredParaSUPPORT( support, target_group) - comptopo = ComponentTopology() - parafield = ParaFIELD(parasupport, comptopo) + parafield.getField().setValue(value) + icocofield = ICoCoMEDDoubleField(paramesh,parafield) - nb_local = support.getNumberOfElements(MED_ALL_ELEMENTS) - value = [0.0]*nb_local + dec.attachLocalField(icocofield, 'P0') + pass - parafield.getField().setValue(value) - icocofield = ICoCo_MEDField(paramesh,parafield) + field_before_int = [0.0] + field_after_int = [0.0] - dec.attachLocalField(icocofield, 'P0') - pass + if source_group.containsMyRank(): + field_before_int = [parafield.getVolumeIntegral(1)] + MPI.MPI_Bcast(field_before_int, 1, MPI.MPI_DOUBLE, 0, MPI.MPI_COMM_WORLD); + dec.synchronize() + print("DEC usage") + dec.setForcedRenormalization(False) + dec.sendData() + pass -field_before_int = [0.0] -field_after_int = [0.0] + if target_group.containsMyRank(): + MPI.MPI_Bcast(field_before_int, 1, MPI.MPI_DOUBLE, 0, MPI.MPI_COMM_WORLD) + dec.synchronize() + dec.setForcedRenormalization(False) + dec.recvData() + field_after_int = [parafield.getVolumeIntegral(1)] + pass -if source_group.containsMyRank(): + MPI.MPI_Bcast(field_before_int, 1, MPI.MPI_DOUBLE, 0, MPI.MPI_COMM_WORLD) + MPI.MPI_Bcast(field_after_int , 1, MPI.MPI_DOUBLE, size-1, MPI.MPI_COMM_WORLD) - field_before_int = [parafield.getVolumeIntegral(1)] - MPI_Bcast(field_before_int, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); - dec.synchronize() - print "DEC usage" - dec.setForcedRenormalization(False) + epsilon = 1e-6 + self.assertDoubleEquals(field_before_int[0], field_after_int[0], epsilon) - dec.sendData() - pass - -if target_group.containsMyRank(): + # Some clean up that still needs MPI communication, so to be done before MPI_Finalize() + dec.release() + target_group.release() + source_group.release() - MPI_Bcast(field_before_int, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD) - dec.synchronize() - dec.setForcedRenormalization(False) - dec.recvData() - field_after_int = [parafield.getVolumeIntegral(1)] - pass + MPI.COMM_WORLD.Barrier() + MPI.Finalize() -MPI_Bcast(field_before_int, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD) -MPI_Bcast(field_after_int , 1, MPI_DOUBLE, size-1, MPI_COMM_WORLD) +if __name__ == "__main__": + unittest.main() -epsilon = 1e-6 -if abs(field_before_int[0] - field_after_int[0]) > epsilon: - print "Field before is not equal field after: %s != %s"%\ - (field_before_int[0],field_after_int[0]) - pass - - -MPI_Barrier(MPI_COMM_WORLD) -MPI_Finalize() -print "# End of testNonCoincidentDEC"