def RetrieveFamGrpsMapInternal(fn, mn): famsPy = {} grpsPy = {} fid = med.MEDfileOpen(fn, med.MED_ACC_RDONLY) med.MEDnFamily(fid, mn) s = set() for elt in range(med.MEDnFamily(fid, mn)): nbGrps = med.MEDnFamilyGroup(fid, mn, elt + 1) gro = med.MEDCHAR(med.MED_LNAME_SIZE * nbGrps + 1) famName, famId, grps = med.MEDfamilyInfo(fid, mn, elt + 1, gro) if famName in s: famName = "{}@".format(famName) famsPy[famName] = famId grps2 = [ "".join(gro[i * med.MED_LNAME_SIZE:(i + 1) * med.MED_LNAME_SIZE]).rstrip() for i in range(nbGrps) ] grpsPy[famName] = grps2 s.add(famName) pass med.MEDfileClose(fid) return famsPy, grpsPy
try: med.MEDmeshNodeCoordinateWr(fid, meshname, med.MED_NO_DT, med.MED_NO_IT, med.MED_UNDEF_DT, med.MED_FULL_INTERLACE, nnodes, coordinates) except RuntimeError as ex: print("ERROR : nodes coordinates ...\n%s" % ex) doCleanup(fid, -1) # cells connectiviy is defined in nodal mode # 2 polygons try: med.MEDmeshPolygonWr(fid, meshname, med.MED_NO_DT, med.MED_NO_IT, med.MED_UNDEF_DT, med.MED_CELL, med.MED_NODAL, indexsize, index, connectivity) except RuntimeError as ex: print("ERROR : polygon connectivity ...\n%s" % ex) doCleanup(fid, -1) # create family 0 : by default, all mesh entities family number is 0 #TODO : Etudier la pertinence de définir MED_NO_GROUP comme un MEDCHAR('') #TODO : A confronter aux types des paramètres axisname, axisunit try: med.MEDfamilyCr(fid, meshname, med.MED_NO_NAME, 0, 0, med.MEDCHAR(med.MED_NO_GROUP)) except RuntimeError as ex: print("ERROR : family 0 creation ...\n%s" % ex) doCleanup(fid, -1) # close MED file doCleanup(fid, 0)
# max size of meshname : med.MED_NAME_SIZE+1 meshname = "2D structured mesh" spacedim = 2 meshdim = 2 # max size of axisname and unitname : 2*med.MED_SNAME_SIZE+1 # 12345678901234561234567890123456 axisname = "x y " unitname = "cm cm " cooXaxis = med.MEDFLOAT([1., 2., 3., 4., 5.]) cooYaxis = med.MEDFLOAT([1., 2., 3.]) nquad4 = 8 # max size of cellsname : 8*med.MED_SNAME_SIZE+1 # 12345678901234561234567890123456123456789012345612345678901234561234567890123456123456789012345612345678901234561234567890123456 cellsnames = med.MEDCHAR( "CELL_1 CELL_2 CELL_3 CELL_4 CELL_5 CELL_6 CELL_7 CELL_8 " ) # max size of familyname : med.MED_NAME_SIZE+1 familyname = "CART_GRID_QUAD_FAMILY" # max size of groupname : med.MED_LNAME_SIZE+1 groupname = med.MEDCHAR("CART_GRID_GROUP") familynumbers = med.MEDINT([-1, -1, -1, -1, -1, -1, -1, -1]) # MED file creation try: fid = med.MEDfileOpen("UsesCase_MEDmesh_4.med", med.MED_ACC_CREAT) except RuntimeError as ex: print("ERROR : file creation ...\n%s" % ex) sys.exit(-1) # create the structured mesh in the MED file
try: size2, chgt2, trsf2 = med.MEDmeshnEntity(fid, meshname, med.MED_NO_DT, med.MED_NO_IT, med.MED_NODE, med.MED_NONE, med.MED_COORDINATE_AXIS2, med.MED_NO_CMODE) except RuntimeError as ex: print("ERROR : number of coordinates on Y axis ...\n%s" % ex) doCleanup(fid, -1) ncell = ncell * (size2 - 1) cooYaxis = med.MEDFLOAT([0.] * size2) try: med.MEDmeshGridIndexCoordinateRd(fid, meshname, med.MED_NO_DT, med.MED_NO_IT, axis, cooYaxis) except RuntimeError as ex: print("ERROR : read axis Y coordinates ...\n%s" % ex) doCleanup(fid, -1) # read cells name cellsname = med.MEDCHAR(["\0"] * (ncell * med.MED_SNAME_SIZE + 1)) try: med.MEDmeshEntityNameRd(fid, meshname, med.MED_NO_DT, med.MED_NO_IT, med.MED_CELL, med.MED_QUAD4, cellsname) except RuntimeError as ex: print("ERROR : read cells name ...\n%s" % ex) doCleanup(fid, -1) # close MED file doCleanup(fid, 0)
# nodes coordinates in a cartesian axis in full interlace mode # (X1,Y1, X2,Y2, X3,Y3, ...) with no iteration and computation step try: med.MEDmeshNodeCoordinateWr(fid, meshname, med.MED_NO_DT, med.MED_NO_IT, med.MED_UNDEF_DT, med.MED_FULL_INTERLACE, nnodes, coordinates) except RuntimeError as ex: print("ERROR : nodes coordinates ...\n%s" % ex) doCleanup(fid, -1) # cells connectiviy is defined in nodal mode with no iteration and computation step try: med.MEDmeshPolyhedronWr(fid, meshname, med.MED_NO_DT, med.MED_NO_IT, med.MED_UNDEF_DT, med.MED_CELL, med.MED_NODAL, faceindexSize, faceindex, nodeindexSize, nodeindex, connectivity) except RuntimeError as ex: print("ERROR : polyhedron connectivity ...\n%s" % ex) doCleanup(fid, -1) # create family 0 : by default, all mesh entities family number is 0 #TODO : Etudier la pertinence de définir MED_NO_GROUP comme un MEDCHAR('') #TODO : A confronter aux types des paramètres axisname, axisunit try: med.MEDfamilyCr(fid, meshname, "", 0, 0, med.MEDCHAR("")) except RuntimeError as ex: print("ERROR : family 0 creation ...\n%s" % ex) doCleanup(fid, -1) # close MED file doCleanup(fid, 0)
try: nfamily = med.MEDnFamily(fid, meshname) except RuntimeError as ex: print("ERROR : read number of family ...\n%s" % ex) doCleanup(fid, -1) for i in range(0, nfamily): try: ngroup = med.MEDnFamilyGroup(fid, meshname, i + 1) except RuntimeError as ex: print("ERROR : read number of group in a family ...\n%s" % ex) doCleanup(fid, -1) if ngroup > 0: groupname = med.MEDCHAR("\0" * (med.MED_LNAME_SIZE * ngroup + 1)) try: familyname, familynumber, groupname = med.MEDfamilyInfo( fid, meshname, i + 1, groupname) except RuntimeError as ex: print("ERROR : family info ...\n%s" % ex) doCleanup(fid, -1) # check family numbers for node # By convention, if there is no numbers in the file, it means that 0 is the family # number of all nodes familynumbers = med.MEDINT([0] * nnodes) try: nfamilynumbers, chgt, trsf = med.MEDmeshnEntity( fid, meshname, med.MED_NO_DT, med.MED_NO_IT, med.MED_NODE, med.MED_NONE, med.MED_FAMILY_NUMBER, med.MED_NO_CMODE)
2., 1., 7., 1., 12., 1., 17., 1., 22., 1., 2., 6., 7., 6., 12., 6., 17., 6., 22., 6., 2., 11., 7., 11., 12., 11., 17., 11., 22., 11. ]) nnodes = 15 triaconnectivity = med.MEDINT([ 1, 7, 6, 2, 7, 1, 3, 7, 2, 8, 7, 3, 13, 7, 8, 12, 7, 13, 11, 7, 12, 6, 7, 11 ]) ntria3 = 8 quadconnectivity = med.MEDINT( [3, 4, 9, 8, 4, 5, 10, 9, 15, 14, 9, 10, 13, 8, 9, 14]) nquad4 = 4 # max size of familyname : med.MED_NAME_SIZE+1 familyname = "BOUNDARY_VERTICES" # max size of groupename : med.MED_LNAME_SIZE+1 groupname = med.MEDCHAR("MESH_BOUNDARY_VERTICES") familynumbers = med.MEDINT([1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1]) # MED file creation try: fid = med.MEDfileOpen("UsesCase_MEDmesh_10.med", med.MED_ACC_CREAT) except RuntimeError as ex: print("ERROR : file creation ...\n%s" % ex) sys.exit(-1) # write a comment in the file try: med.MEDfileCommentWr(fid, "A 2D unstructured mesh : 15 nodes, 12 cells") except RuntimeError as ex: print("ERROR : write file description ...\n%s" % ex) doCleanup(fid, -1)