Salome HOME
Update by request of Nathalie GORE
[modules/smesh.git] / src / Tools / blocFissure / gmu / getStatsMaillageFissure.py
index a92be1e1764541de422a84fa369174f1348b85c6..2f1a6813d2c4be4aeb0dedb24713c3390a021b52 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2021  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
 
 import os
 import logging
-import SMESH
-
 
 def getStatsMaillageFissure(maillage, referencesMaillageFissure, maillageFissureParams):
-  """
-  TODO: a completer
-  """
+  """"Statistiques maillage"""
+
   logging.debug('start')
 
   if 'nomRep' in maillageFissureParams:
@@ -40,7 +37,7 @@ def getStatsMaillageFissure(maillage, referencesMaillageFissure, maillageFissure
   fichierNewRef = os.path.join(nomRep, "{}.new".format(nomFicFissure))
   logging.debug("fichierStatMaillageFissure=%s", fichierStatMaillageFissure)
 
-  OK = False
+  ok_maillage = False
   if maillage is not None:
     mesures = maillage.GetMeshInfo()
     d_resu = dict()
@@ -50,40 +47,48 @@ def getStatsMaillageFissure(maillage, referencesMaillageFissure, maillageFissure
     logging.debug("dico mesures %s", d_resu)
 
     text_2 = ""
-    OK = True
+    ok_maillage = True
     with open(fichierStatMaillageFissure, "w") as fic_stat :
+
+      # Le nombre de quadrangles ou d'hexaèdres doit être rigoureusement identique
       for key in ('Entity_Quad_Quadrangle', 'Entity_Quad_Hexa'):
         if d_resu[key] != referencesMaillageFissure[key]:
           text = "Ecart"
-          OK = False
+          ok_maillage = False
         else:
           text = "Valeur_OK"
         text += ": {} reference: {} calcul: {}".format(key,referencesMaillageFissure[key],d_resu[key])
         logging.info(text)
         fic_stat.write(text+"\n")
         text_2 += "                                          {} = {}, \\\n".format(key,d_resu[key])
+
+      # Le nombre de noeuds, d'arêtes, de triangles, de tétraèdres ou de pyramides peut varier du fait des algorithmes. On tolère 5% d'écart.
       tolerance = 0.05
       for key in ('Entity_Node', 'Entity_Quad_Edge', 'Entity_Quad_Triangle', 'Entity_Quad_Tetra', 'Entity_Quad_Pyramid', 'Entity_Quad_Penta'):
-        if (d_resu[key] < (1.0 - tolerance)*referencesMaillageFissure[key]) \
-        or (d_resu[key] > (1.0 + tolerance)*referencesMaillageFissure[key]):
-          text = "Ecart"
-          OK = False
-        else:
+        if d_resu[key] == referencesMaillageFissure[key]:
           text = "Valeur_OK"
+        elif (d_resu[key] < (1.0 - tolerance)*referencesMaillageFissure[key]) \
+          or (d_resu[key] > (1.0 + tolerance)*referencesMaillageFissure[key]):
+          text = "Ecart de plus de {}%".format(tolerance*100.)
+          ok_maillage = False
+        else:
+          text = "Valeur_OK à moins de {}%".format(tolerance*100.)
         text += ": {} reference: {} calcul: {}".format(key,referencesMaillageFissure[key],d_resu[key])
         logging.info(text)
         fic_stat.write(text+"\n")
         text_2 += "                                          {} = {}, \\\n".format(key,d_resu[key])
 
-# Résultats de référence pour intégration dans le python du cas pour une mise à jour
-    with open(fichierNewRef, "w") as fic_info :
-      fic_info.write(text_2[:-4]+" \\")
-
-    if OK:
-      print ("Calcul cohérent avec la référence.")
+    if ok_maillage:
+      text = "Calcul cohérent avec la référence."
     else:
       text = "Calcul différent de la référence.\n"
-      texte += "Voir le fichier {}".format(fichierStatMaillageFissure)
-      print (text)
+      text += "Voir le fichier {}\n".format(fichierStatMaillageFissure)
+      text += "La nouvelle référence est disponible dans le fichier :\n{}\n".format(fichierNewRef)
+      text += "Il faut l'insérer pour créer le dictionnaire 'referencesMaillageFissure' dans le paramétrage du cas."
+#     Résultats de référence pour intégration dans le python du cas pour une mise à jour
+      with open(fichierNewRef, "w") as fic_info :
+        fic_info.write(text_2[:-4]+" \\")
+
+    print (text)
 
-  return OK
+  return ok_maillage