Créer un unstructured mesh ``m0`` issu d'un maillage structuré (meshDim=2, spaceDim=2) de 30*30.
Chacune des cellules paires du maillage sera *simplexisée* (i.e. coupée en triangle - méthode ``MEDCouplingUMesh.simplexize(0)``) ::
- import MEDLoader as ml
+ import medcoupling as mc
- m0 = ml.MEDCouplingCMesh()
- arr = ml.DataArrayDouble(31,1) ; arr.iota(0.)
+ m0 = mc.MEDCouplingCMesh()
+ arr = mc.DataArrayDouble(31,1) ; arr.iota(0.)
m0.setCoords(arr,arr)
m0 = m0.buildUnstructured()
m00 = m0[::2] # Extract even cells
m00.simplexize(0)
m01 = m0[1::2]
- m0 = ml.MEDCouplingUMesh.MergeUMeshes([m00,m01])
+ m0 = mc.MEDCouplingUMesh.MergeUMeshes([m00,m01])
m0.getCoords()[:] *= 1/15. # Illustrate how to quickly rescale a mesh
m0.setName("mesh")
Créer les champs ``cellField`` et ``nodeField`` au pas de temps identifié à (5,6) et au pas de temps 5.6 s. ::
# Cell field
- cellField = ml.MEDCouplingFieldDouble(ml.ON_CELLS, ml.ONE_TIME)
+ cellField = mc.MEDCouplingFieldDouble(mc.ON_CELLS, mc.ONE_TIME)
cellField.setTime(5.6,5,6)
cellField.setMesh(m0)
cellField.setName("CellField")
cellField.fillFromAnalytic(1,"exp(-((x-1)*(x-1)+(y-1)*(y-1)))")
cellField.getArray().setInfoOnComponent(0,"powercell [W]")
# Node field
- nodeField = ml.MEDCouplingFieldDouble(ml.ON_NODES,ml.ONE_TIME)
+ nodeField = mc.MEDCouplingFieldDouble(mc.ON_NODES,mc.ONE_TIME)
nodeField.setTime(5.6,5,6)
nodeField.setMesh(m0)
nodeField.setName("NodeField")
nodeField1 = nodeField[proc1] ; cellField1 = cellField[proc1] ; cellField1.setMesh(nodeField1.getMesh())
proc0_fname = "proc0.med"
- ml.WriteField(proc0_fname, nodeField0, True)
- ml.WriteFieldUsingAlreadyWrittenMesh(proc0_fname, cellField0)
+ mc.WriteField(proc0_fname, nodeField0, True)
+ mc.WriteFieldUsingAlreadyWrittenMesh(proc0_fname, cellField0)
proc1_fname = "proc1.med"
- ml.WriteField(proc1_fname,nodeField1,True)
- ml.WriteFieldUsingAlreadyWrittenMesh(proc1_fname,cellField1)
+ mc.WriteField(proc1_fname,nodeField1,True)
+ mc.WriteFieldUsingAlreadyWrittenMesh(proc1_fname,cellField1)
Lecture et fusion des 2 fichiers MED séparés (non optimal)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Partant de "proc0.med" et de "proc1.med" lire leur "CellField" respectif avec l'API basique,
agréger les deux et mettre le résultat dans ``cellField_read`` : ::
- cellField0_read = ml.ReadFieldCell("proc0.med","mesh",0,"CellField",5,6)
- cellField1_read = ml.ReadFieldCell("proc1.med","mesh",0,"CellField",5,6)
- cellField_read = ml.MEDCouplingFieldDouble.MergeFields([cellField0_read,cellField1_read])
+ cellField0_read = mc.ReadFieldCell("proc0.med","mesh",0,"CellField",5,6)
+ cellField1_read = mc.ReadFieldCell("proc1.med","mesh",0,"CellField",5,6)
+ cellField_read = mc.MEDCouplingFieldDouble.MergeFields([cellField0_read,cellField1_read])
.. note:: On peut avoir l'impression que l'information Cell (méthode ``ReadFieldCell``) est répétée de manière abusive
(effectivement le champ "CellField" a été créé aux cellules),
La différence ici c'est qu'il va y avoir duplication de l'information à la frontière, car les noeuds limites sont partagés
des deux côtés : ::
- nodeField0_read = ml.ReadFieldNode("proc0.med","mesh",0,"NodeField",5,6)
- nodeField1_read = ml.ReadFieldNode("proc1.med","mesh",0,"NodeField",5,6)
- nodeField_read = ml.MEDCouplingFieldDouble.MergeFields([nodeField0_read, nodeField1_read])
+ nodeField0_read = mc.ReadFieldNode("proc0.med","mesh",0,"NodeField",5,6)
+ nodeField1_read = mc.ReadFieldNode("proc1.med","mesh",0,"NodeField",5,6)
+ nodeField_read = mc.MEDCouplingFieldDouble.MergeFields([nodeField0_read, nodeField1_read])
.. note:: Dans cette partie, on a donc relu le maillage une deuxième fois ce qui peut être pénalisant ...
différents types géométriques : ::
fileNames = ["proc0.med","proc1.med"]
- msML = [ml.MEDFileMesh.New(fname) for fname in fileNames]
- fsML = [ml.MEDFileFields.New(fname) for fname in fileNames]
- mergeMLMesh = ml.MEDFileUMesh()
- mergeMLFields = ml.MEDFileFields()
+ msML = [mc.MEDFileMesh.New(fname) for fname in fileNames]
+ fsML = [mc.MEDFileFields.New(fname) for fname in fileNames]
+ mergeMLMesh = mc.MEDFileUMesh()
+ mergeMLFields = mc.MEDFileFields()
for lev in msML[0].getNonEmptyLevels():
o2nML = len(msML[0].getNonEmptyLevels())*[None]
cs = [mML.getCoords() for mML in msML]
- mergeMLMesh.setCoords(ml.DataArrayDouble.Aggregate(cs))
+ mergeMLMesh.setCoords(mc.DataArrayDouble.Aggregate(cs))
ms = [mML.getMeshAtLevel(lev) for mML in msML]
- m = ml.MEDCouplingUMesh.MergeUMeshes(ms) ; m.setCoords(mergeMLMesh.getCoords())
+ m = mc.MEDCouplingUMesh.MergeUMeshes(ms) ; m.setCoords(mergeMLMesh.getCoords())
o2nML[lev] = m.sortCellsInMEDFileFrmt()
mergeMLMesh.setMeshAtLevel(lev,m)
pass
for fieldName in fsML[0].getFieldsNames():
fmts = [fML[fieldName] for fML in fsML]
- mergeField = ml.MEDFileFieldMultiTS()
+ mergeField = mc.MEDFileFieldMultiTS()
for dt,it,tim in fmts[0].getTimeSteps():
fts = [fmt[dt,it] for fmt in fmts]
arrs = len(fts)*[None]
for typp in fts[0].getTypesOfFieldAvailable():
arr1s = []
- if typp == ml.ON_CELLS:
+ if typp == mc.ON_CELLS:
for ft in fts:
for geoTyp,smth in ft.getFieldSplitedByType():
- if geoTyp != ml.NORM_ERROR:
- smth1 = filter(lambda x:x[0] == ml.ON_CELLS,smth)
+ if geoTyp != mc.NORM_ERROR:
+ smth1 = filter(lambda x:x[0] == mc.ON_CELLS,smth)
arr2s = [ft.getUndergroundDataArray()[elt[1][0]:elt[1][1]] for elt in smth1]
- arr1s.append(ml.DataArrayDouble.Aggregate(arr2s))
+ arr1s.append(mc.DataArrayDouble.Aggregate(arr2s))
pass
pass
pass
pass
else:
for ft in fts:
- smth = filter(lambda x:x[0] == ml.NORM_ERROR,ft.getFieldSplitedByType())
- arr2 = ml.DataArrayDouble.Aggregate([ft.getUndergroundDataArray()[elt[1][0][1][0]:elt[1][0][1][1]] for elt in smth])
+ smth = filter(lambda x:x[0] == mc.NORM_ERROR,ft.getFieldSplitedByType())
+ arr2 = mc.DataArrayDouble.Aggregate([ft.getUndergroundDataArray()[elt[1][0][1][0]:elt[1][0][1][1]] for elt in smth])
arr1s.append(arr2)
pass
pass
- arr = ml.DataArrayDouble.Aggregate(arr1s)
- if typp == ml.ON_CELLS:
+ arr = mc.DataArrayDouble.Aggregate(arr1s)
+ if typp == mc.ON_CELLS:
arr.renumberInPlace(o2nML[lev])
- mcf = ml.MEDCouplingFieldDouble(typp,ml.ONE_TIME) ; mcf.setName(fieldName) ; mcf.setTime(tim,dt,it) ; mcf.setArray(arr)
+ mcf = mc.MEDCouplingFieldDouble(typp,mc.ONE_TIME) ; mcf.setName(fieldName) ; mcf.setTime(tim,dt,it) ; mcf.setArray(arr)
mcf.setMesh(mergeMLMesh.getMeshAtLevel(lev)) ; mcf.checkConsistencyLight()
mergeField.appendFieldNoProfileSBT(mcf)
pass