1 #@ MODIF reca_controles Macro DATE 16/05/2007 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.
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.
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 # ======================================================================
22 import string, copy, Numeric, types, os, sys, pprint
25 import Utilitai.Utmess
26 from Utilitai.Utmess import UTMESS
28 def UTMESS(code,sprg,texte):
29 fmt='\n <%s> <%s> %s\n\n'
30 print fmt % (code,sprg,texte)
31 if code=='F': sys.exit()
39 #_____________________________________________
41 # CONTROLE DES ENTREES UTILISATEUR
42 #_____________________________________________
44 # ------------------------------------------------------------------------------
46 def erreur_de_type(code_erreur,X):
48 code_erreur ==0 --> X est une liste
49 code erreur ==1 --> X est un char
50 code erreur ==2 --> X est un float
51 test est un boolean (test = 0 défaut et 1 si un test if est verifier
55 if(code_erreur == 0 ):
56 if type(X) is not types.ListType:
57 txt="\nCette entrée: " +str(X)+" n'est pas une liste valide"
58 if(code_erreur == 1 ):
59 if type(X) is not types.StringType:
60 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"
61 if(code_erreur == 2 ):
62 if type(X) is not types.FloatType:
63 txt="\nCette entrée: " +str(X)+" n'est pas une valeur float valide ; Veuillez la ressaisir en lui appliquant le type float de python"
67 # ------------------------------------------------------------------------------
69 def erreur_dimension(PARAMETRES,REPONSES):
71 On verifie que la dimension de chaque sous_liste de parametre est 4
72 et que la dimension de chaque sous_liste de REPONSES est 3
76 for i in range(len(PARAMETRES)):
77 if (len(PARAMETRES[i]) != 4):
78 txt=txt + "\nLa sous-liste de la variable paramètre numéro " + str(i+1)+" n'est pas de longueur 4"
79 for i in range(len(REPONSES)):
80 if (len(REPONSES[i]) != 3):
81 txt=txt + "\nLa sous-liste de la variable réponse numéro " + str(i+1)+" n'est pas de longueur 3"
85 # ------------------------------------------------------------------------------
87 def compare__dim_rep__dim_RESU_EXP(REPONSES,RESU_EXP):
89 X et Y sont deux arguments qui doivent avoir la meme dimension
90 pour éviter l'arret du programme
94 if( len(REPONSES) != len(RESU_EXP)):
95 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"
99 # ------------------------------------------------------------------------------
101 def compare__dim_poids__dim_RESU_EXP(POIDS,RESU_EXP):
103 POIDS et Y sont deux arguments qui doivent avoir la meme dimension
104 pour éviter l'arret du programme
108 if( len(POIDS) != len(RESU_EXP)):
109 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"
113 # ------------------------------------------------------------------------------
115 def verif_fichier(UL,PARAMETRES,REPONSES):
117 On verifie les occurences des noms des PARAMETRES et REPONSES
118 dans le fichier de commande ASTER
124 fichier = open('fort.'+str(UL),'r')
127 txt += "\nImpossible d'ouvrir le fichier esclave declare avec l'unite logique " + str(UL)
128 return txt, txt_alarme
129 for i in range(len(PARAMETRES)):
130 if((string.find(fic,PARAMETRES[i][0])==-1) or ((string.find(fic,PARAMETRES[i][0]+'=')==-1) and (string.find(fic,PARAMETRES[i][0]+' ')==-1))):
131 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"
132 for i in range(len(REPONSES)):
133 if((string.find(fic,REPONSES[i][0])==-1) or ((string.find(fic,REPONSES[i][0]+'=')==-1) and (string.find(fic,REPONSES[i][0]+' ')==-1))):
134 txt_alarme += "\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"
135 return txt, txt_alarme
138 # ------------------------------------------------------------------------------
140 def verif_valeurs_des_PARAMETRES(PARAMETRES):
142 On verifie que pour chaque PARAMETRES de l'optimisation
143 les valeurs entrées par l'utilisateur sont telles que :
145 val_init appartient à [borne_inf, borne_sup]
152 # verification des bornes
153 for i in range(len(PARAMETRES)):
154 if( PARAMETRES[i][2] >PARAMETRES[i][3]):
155 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])
156 # verification de l'encadrement de val_init
157 for i in range(len(PARAMETRES)):
158 if( (PARAMETRES[i][1] < PARAMETRES[i][2]) or (PARAMETRES[i][1] > PARAMETRES[i][3])):
159 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])+"]"
160 # verification que val_init !=0
161 for i in range(len(PARAMETRES)):
162 if (PARAMETRES[i][1] == 0. ):
163 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."
164 # verification que borne_sup !=0
165 for i in range(len(PARAMETRES)):
166 if (PARAMETRES[i][3] == 0. ):
167 txt=txt + "\nProblème de borne supérieure pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur strictement nulle."
168 # verification que borne_inf !=0
169 for i in range(len(PARAMETRES)):
170 if (PARAMETRES[i][2] == 0. ):
171 txt=txt + "\nProblème de borne inférieure pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur strictement nulle."
175 # ------------------------------------------------------------------------------
177 def verif_UNITE(GRAPHIQUE,UNITE_RESU):
179 On vérifie que les unités de résultat et
180 de graphique sont différentes
184 GRAPHE_UL_OUT=GRAPHIQUE['UNITE']
185 if (GRAPHE_UL_OUT==UNITE_RESU):
186 txt=txt + "\nLes unités logiques des fichiers de résultats graphiques et de résultats d'optimisation sont les memes."
190 # ------------------------------------------------------------------------------
192 def gestion(UL,PARAMETRES,REPONSES,RESU_EXP,POIDS,GRAPHIQUE,UNITE_RESU,METHODE):
194 Cette methode va utiliser les methodes de cette classe declarée ci-dessus
195 test est un boolean: test=0 -> pas d'erreur
196 test=1 -> erreur détectée
202 # On vérifie d'abord si PARAMETRES, REPONSES, RESU_EXP sont bien des listes au sens python
204 texte = texte + erreur_de_type(0,PARAMETRES)
206 texte = texte + erreur_de_type(0,REPONSES)
208 texte = texte + erreur_de_type(0,RESU_EXP)
210 # On vérifie si chaque sous liste de PARAMETRES, REPONSES, possède le type adéquat
211 # test des sous_listes de PARAMETRES
212 for i in range(len(PARAMETRES)):
213 texte = texte + erreur_de_type(0,PARAMETRES[i])
214 # test des sous_listes de REPONSES
215 for i in range(len(REPONSES)):
216 texte = texte + erreur_de_type(0,REPONSES[i])
218 # On verifie si la dimension de chaque sous-liste de : PARAMETRES, REPONSES
219 # il faut que: la dimension d'une sous-liste de PARAMETRES = 4
220 # et que la dimension d'une sous liste de REPONSES = 3
221 texte = texte + erreur_dimension(PARAMETRES,REPONSES)
223 # on verifie que l'on a autant de réponses que de résultats expérimentaux
224 texte = texte + compare__dim_rep__dim_RESU_EXP(REPONSES,RESU_EXP)
225 #on verifie que l'on a autant de poids que de résultats expérimentaux
226 texte = texte + compare__dim_poids__dim_RESU_EXP(POIDS,RESU_EXP)
228 # on verifie les types des arguments de chaque sous liste de PARAMETRES et REPONSES
229 # verification du type stringet type float des arguments de PARAMETRES
230 for i in range(len(PARAMETRES)):
231 texte = texte + erreur_de_type(1,PARAMETRES[i][0])
233 texte = texte + erreur_de_type(2,PARAMETRES[i][k])
235 # verification du type string pour les arguments de REPONSES
236 for i in range(len(REPONSES)):
237 for j in range(len(REPONSES[i])):
238 texte = texte + erreur_de_type(1,REPONSES[i][j])
240 # verification du fichier de commandes Esclave ASTER
241 if METHODE != 'EXTERNE': # pour celui-ci le fort.UL n'est pas l'esclave... voir comment faire
242 texte_fatal, texte_alarme = verif_fichier(UL,PARAMETRES,REPONSES)
245 # verification des valeurs des PARAMETRES entrées par l'utilisateur (pour fmin* les bornes ne sont pas prises en compte)
246 if METHODE == 'LEVENBERG':
247 texte = texte + verif_valeurs_des_PARAMETRES(PARAMETRES)
249 # verification des unités logiques renseignées par l'utilisateur
250 if METHODE != 'EXTERNE':
251 texte = texte + verif_UNITE(GRAPHIQUE,UNITE_RESU)
253 return texte, texte_alarme