2 # Copyright (C) 2014-2024 EDF
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 from .getStats import getGroupesRef
24 from .Type_Maille import dicoDimENtite
26 def getCritere(dim,NomMesh,acritere):
28 from salome.smesh import smeshBuilder
29 smesh = smeshBuilder.New()
31 # print dim,NomMesh,acritere
33 NumElt=NomMesh.GetElementsByType(SMESH.FACE)
35 NumElt=NomMesh.GetElementsByType(SMESH.VOLUME)
38 if acritere =="Ratio" :
39 for i in range(len(NumElt)):
40 critere.append (NomMesh.GetAspectRatio(NumElt[i]))
42 if acritere =="Length" :
43 for i in range(len(NumElt)):
44 critere.append (NomMesh.GetMaxElementLength(NumElt[i]))
46 crit= numpy.array(critere)
51 Q1=numpy.percentile(crit,25)
52 Q3=numpy.percentile(crit,75)
54 return [max,min,Q1,M,Q3,moyenne]
56 def getCritereGroupe(NomMesh,NomGr,acritere):
58 from salome.smesh import smeshBuilder
59 smesh = smeshBuilder.New()
62 # on ne traite que les mailles 2D et 3D
63 NumElt = NomGr.GetListOfID()
64 type_gr=NomMesh.GetElementGeomType(NumElt[0])
66 # print "critere",acritere
67 # print "type groupe",type_gr
68 # print dicoDimENtite[str(type_gr)]
70 if dicoDimENtite[str(type_gr)]==0 :
74 if acritere =="Ratio" :
75 for i in range(len(NumElt)):
76 critere.append (NomMesh.GetAspectRatio(NumElt[i]))
78 if acritere =="Length" :
79 for i in range(len(NumElt)):
80 critere.append (NomMesh.GetMaxElementLength(NumElt[i]))
82 crit= numpy.array(critere)
87 Q1=numpy.percentile(crit,25)
88 Q3=numpy.percentile(crit,75)
90 return [max,min,Q1,M,Q3,moyenne]
92 def getObjectsGroupe(Mesh,liste):
94 from salome.smesh import smeshBuilder
96 lGroups=Mesh.GetGroups()
100 if name == n : dico[name]=g
103 def getStatsCritere(dim,Mesh,fichierMedResult):
104 fichierStatRatio=fichierMedResult.replace('.med','.ratio')
105 max,min,Q1,M,Q3,moyenne = getCritere(dim,Mesh,"Ratio")
106 f = open(fichierStatRatio, 'w')
107 f.write(str(max)+","+str(min)+","+str(Q1)+","+str(M)+","+str(Q3)+","+str(moyenne))
110 fichierStatRatio=fichierMedResult.replace('.med','.taille')
111 max,min,Q1,M,Q3,moyenne = getCritere(dim,Mesh,"Length")
112 f = open(fichierStatRatio, 'w')
113 f.write(str(max)+","+str(min)+","+str(Q1)+","+str(M)+","+str(Q3)+","+str(moyenne))
116 liste=getGroupesRef(fichierMedResult)
117 dicoGroupe=getObjectsGroupe(Mesh,liste)
118 for groupe in liste :
119 max,min,Q1,M,Q3,moyenne=getCritereGroupe(Mesh,dicoGroupe[groupe],"Ratio")
120 extension="_"+groupe+'_Ratio.res'
121 fichier=fichierMedResult.replace('.med',extension)
122 f = open(fichier, 'w')
123 f.write(str(max)+","+str(min)+","+str(Q1)+","+str(M)+","+str(Q3)+","+str(moyenne))
125 max,min,Q1,M,Q3,moyenne=getCritereGroupe(Mesh,dicoGroupe[groupe],"Length")
126 extension="_"+groupe+'_Taille.res'
127 fichier=fichierMedResult.replace('.med',extension)
128 f = open(fichier, 'w')
129 f.write(str(max)+","+str(min)+","+str(Q1)+","+str(M)+","+str(Q3)+","+str(moyenne))