]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA8/Macro/reca_controles.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA8 / Macro / reca_controles.py
1 #@ MODIF reca_controles Macro  DATE 31/10/2006   AUTEUR ASSIRE A.ASSIRE 
2 # -*- coding: iso-8859-1 -*-
3 # RESPONSABLE ASSIRE A.ASSIRE
4 #            CONFIGURATION MANAGEMENT OF EDF VERSION
5 # ======================================================================
6 # COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
7 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
8 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
9 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
10 # (AT YOUR OPTION) ANY LATER VERSION.                                                  
11 #                                                                       
12 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
13 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
14 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
15 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
16 #                                                                       
17 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
18 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
19 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
20 # ======================================================================
21
22 import string, copy, Numeric, types, os, sys, pprint
23
24 try:
25    from Utilitai.Utmess import UTMESS
26 except ImportError:
27    def UTMESS(code,sprg,texte):
28       fmt='\n <%s> <%s> %s\n\n'
29       print fmt % (code,sprg,texte)
30       if code=='F': sys.exit()
31
32
33 # Nom de la routine
34 nompro = 'MACR_RECAL'
35
36
37
38 #_____________________________________________
39 #
40 # CONTROLE DES ENTREES UTILISATEUR
41 #_____________________________________________
42
43 # ------------------------------------------------------------------------------
44
45 def erreur_de_type(code_erreur,X):
46    #code_erreur ==0 --> X est une liste
47    #code erreur ==1 --> X est un char
48    #code erreur ==2 --> X est un float
49    #test est un boolean (test = 0 défaut et 1 si un test if est verifier
50    txt=""
51    if(code_erreur == 0 ):
52       if type(X) is not types.ListType:
53          txt="\nCette entrée: " +str(X)+" n'est pas une liste valide"
54    if(code_erreur == 1 ):
55       if type(X) is not types.StringType:
56          txt="\nCette entrée: " +str(X)+" n'est pas une chaine de caractère valide ; Veuillez la ressaisir en lui appliquant le type char de python"
57    if(code_erreur == 2 ):
58       if type(X) is not types.FloatType:
59          txt="\nCette entrée:  " +str(X)+" n'est pas une valeur float valide ; Veuillez la ressaisir en lui appliquant le type float de python"
60    return txt
61    
62
63 # ------------------------------------------------------------------------------
64    
65 def erreur_dimension(PARAMETRES,REPONSES):
66 #On verifie que la dimension de chaque sous_liste de parametre est 4
67 #et que la dimension de chaque sous_liste de REPONSES est 3
68    txt=""
69    for i in range(len(PARAMETRES)):
70       if (len(PARAMETRES[i]) != 4):
71          txt=txt + "\nLa sous-liste de la variable paramètre numéro " + str(i+1)+" n'est pas de longueur 4"
72    for i in range(len(REPONSES)):
73       if (len(REPONSES[i]) != 3):
74          txt=txt + "\nLa sous-liste de la variable réponse numéro " + str(i+1)+" n'est pas de longueur 3"
75    return txt
76
77
78 # ------------------------------------------------------------------------------
79
80 def compare__dim_rep__dim_RESU_EXP(REPONSES,RESU_EXP):
81    # X et Y sont deux arguments qui doivent avoir la meme dimension
82    # pour éviter l'arret du programme
83    txt=""
84    if( len(REPONSES) != len(RESU_EXP)):
85       txt="\nVous avez entré " +str(len(REPONSES))+ " réponses et "+str(len(RESU_EXP))+ " expériences ; On doit avoir autant de réponses que de résultats expérimentaux"
86    return txt
87
88
89 # ------------------------------------------------------------------------------
90
91 def compare__dim_poids__dim_RESU_EXP(POIDS,RESU_EXP):
92    # POIDS et Y sont deux arguments qui doivent avoir la meme dimension
93    # pour éviter l'arret du programme
94    txt=""
95    if( len(POIDS) != len(RESU_EXP)):
96       txt="\nVous avez entré " +str(len(POIDS))+ " poids et "+str(len(RESU_EXP))+ " expériences ; On doit avoir autant de poids que de résultats expérimentaux"
97    return txt
98
99
100 # ------------------------------------------------------------------------------
101
102 def verif_fichier(UL,PARAMETRES,REPONSES):
103 #On verifie les occurences des noms des PARAMETRES et REPONSES 
104 #dans le fichier de commande ASTER
105    txt=""
106
107    try:
108       fichier = open('fort.'+str(UL),'r')
109       fic=fichier.read()
110    except:
111       txt += "\nImpossible d'ouvrir le fichier esclave declare avec l'unite logique " + str(UL)
112       return txt
113    for i in range(len(PARAMETRES)):
114       if((string.find(fic,PARAMETRES[i][0])==-1) or ((string.find(fic,PARAMETRES[i][0]+'=')==-1) and (string.find(fic,PARAMETRES[i][0]+' ')==-1))):
115          txt += "\nLe paramètre "+PARAMETRES[i][0]+" que vous avez entré pour la phase d'optimisation n'a pas été trouvé dans votre fichier de commandes ASTER"
116    for i in range(len(REPONSES)):
117       if((string.find(fic,REPONSES[i][0])==-1) or ((string.find(fic,REPONSES[i][0]+'=')==-1) and (string.find(fic,REPONSES[i][0]+' ')==-1))):
118          txt += "\nLa réponse  "+REPONSES[i][0]+" que vous avez entrée pour la phase d'optimisation n'a pas été trouvée dans votre fichier de commandes ASTER"
119    return txt
120
121
122 # ------------------------------------------------------------------------------
123
124 def verif_valeurs_des_PARAMETRES(PARAMETRES):
125 #On verifie que pour chaque PARAMETRES de l'optimisation
126 # les valeurs entrées par l'utilisateur sont telles que :
127 #              val_inf<val_sup
128 #              val_init appartient à [borne_inf, borne_sup] 
129 #              val_init!=0         
130 #              borne_sup!=0         
131 #              borne_inf!=0         
132    txt=""
133    #verification des bornes
134    for i in range(len(PARAMETRES)):
135       if( PARAMETRES[i][2] >PARAMETRES[i][3]):
136          txt=txt + "\nLa borne inférieure "+str(PARAMETRES[i][2])+" de  "+PARAMETRES[i][0]+ "est plus grande que sa borne supérieure"+str(PARAMETRES[i][3])
137    #verification de l'encadrement de val_init 
138    for i in range(len(PARAMETRES)):
139       if( (PARAMETRES[i][1] < PARAMETRES[i][2]) or (PARAMETRES[i][1] > PARAMETRES[i][3])):
140          txt=txt + "\nLa valeur initiale "+str(PARAMETRES[i][1])+" de "+PARAMETRES[i][0]+ " n'est pas dans l'intervalle [borne_inf,born_inf]=["+str(PARAMETRES[i][2])+" , "+str(PARAMETRES[i][3])+"]"
141    #verification que val_init !=0
142    for  i in range(len(PARAMETRES)):
143       if (PARAMETRES[i][1] == 0. ):
144          txt=txt + "\nProblème de valeurs initiales pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur initiale nulle mais un ordre de grandeur."
145    #verification que borne_sup !=0
146    for  i in range(len(PARAMETRES)):
147       if (PARAMETRES[i][3] == 0. ):
148          txt=txt + "\nProblème de borne supérieure pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur strictement nulle."
149    #verification que borne_inf !=0
150    for  i in range(len(PARAMETRES)):
151       if (PARAMETRES[i][2] == 0. ):
152          txt=txt + "\nProblème de borne inférieure pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur strictement nulle."
153    return txt
154
155
156 # ------------------------------------------------------------------------------
157
158 def verif_UNITE(GRAPHIQUE,UNITE_RESU):
159    # On vérifie que les unités de résultat et 
160    # de graphique sont différentes
161    txt=""
162    if GRAPHIQUE:
163       GRAPHE_UL_OUT=GRAPHIQUE['UNITE']
164       if (GRAPHE_UL_OUT==UNITE_RESU):
165           txt=txt + "\nLes unités logiques des fichiers de résultats graphiques et de résultats d'optimisation sont les memes."
166    return txt
167
168
169 # ------------------------------------------------------------------------------
170
171 def gestion(UL,PARAMETRES,REPONSES,RESU_EXP,POIDS,GRAPHIQUE,UNITE_RESU,METHODE):
172    #Cette methode va utiliser les methodes de cette classe declarée ci-dessus
173    #test  est un boolean: test=0 -> pas d'erreur
174    #                      test=1 -> erreur détectée
175
176    texte=""
177    #On vérifie d'abord si PARAMETRES, REPONSES, RESU_EXP sont bien des listes au sens python
178    #test de PARAMETRES
179    texte = texte + erreur_de_type(0,PARAMETRES)
180    #test de REPONSES
181    texte = texte + erreur_de_type(0,REPONSES)
182    #test de RESU_EXP
183    texte = texte + erreur_de_type(0,RESU_EXP) 
184    
185    #On vérifie si chaque sous liste de PARAMETRES, REPONSES,  possède le type adéquat
186    #test des sous_listes de PARAMETRES
187    for i in range(len(PARAMETRES)):
188       texte = texte +  erreur_de_type(0,PARAMETRES[i]) 
189    #test des sous_listes de REPONSES
190    for i in range(len(REPONSES)):
191       texte = texte + erreur_de_type(0,REPONSES[i])
192
193    #On verifie si la dimension de chaque sous-liste de : PARAMETRES, REPONSES
194    #il faut que:la dimension d'une sous-liste de PARAMETRES = 4
195    #et   que    la dimension d'une sous liste de REPONSES   = 3
196    texte = texte + erreur_dimension(PARAMETRES,REPONSES)
197
198    #on verifie que l'on a autant de réponses que de résultats expérimentaux
199    texte = texte + compare__dim_rep__dim_RESU_EXP(REPONSES,RESU_EXP)
200    #on verifie que l'on a autant de poids que de résultats expérimentaux
201    texte = texte + compare__dim_poids__dim_RESU_EXP(POIDS,RESU_EXP)
202
203    #on verifie les types des arguments de chaque sous liste de PARAMETRES et REPONSES
204       #verification du type stringet type float des arguments de PARAMETRES
205    for i in range(len(PARAMETRES)):
206       texte = texte + erreur_de_type(1,PARAMETRES[i][0])
207       for k in [1,2,3]:
208          texte = texte + erreur_de_type(2,PARAMETRES[i][k])
209
210    #verification du type string pour les arguments  de REPONSES
211    for i in range(len(REPONSES)):
212       for j in range(len(REPONSES[i])):
213          texte = texte + erreur_de_type(1,REPONSES[i][j])
214    
215    #verification du fichier de commndes ASTER
216    if METHODE != 'EXTERNE': # pour celui-ci le fort.UL n'est pas l'esclave... voir comment faire
217       texte = texte + verif_fichier(UL,PARAMETRES,REPONSES)
218
219    #verification des valeurs des PARAMETRES entrées par l'utilisteur 
220    if METHODE == 'LEVENBERG':
221       texte = texte + verif_valeurs_des_PARAMETRES(PARAMETRES)
222
223    #verification des unités logiques renseignées par l'utilisateur
224    if METHODE != 'EXTERNE':
225       texte = texte + verif_UNITE(GRAPHIQUE,UNITE_RESU)
226
227    return texte
228