]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA73/Macro/reca_message.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA73 / Macro / reca_message.py
1 #@ MODIF reca_message Macro  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
9 # (AT YOUR OPTION) ANY LATER VERSION.                                                  
10 #                                                                       
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
15 #                                                                       
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
18 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
19 # ======================================================================
20
21 import os,Numeric
22
23 #===========================================================================================
24
25
26 # AFFICHAGE DES MESSAGES
27
28 class Message :
29    """classe gérant l'affichage des messages concernant le déroulement de l'optmisation """
30    #Constructeur de la classe
31    def __init__(self,para,val_init,resu_exp,ul_out):
32       self.nom_para = para
33       self.res_exp = resu_exp
34       res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
35       res.write(' <INFO>  MACR_RECAL V1.1 \n\n\n')
36       res.close()
37       
38    
39    def affiche_result_iter(self,iter,J,val,residu,Act,ul_out):
40       res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
41       res.write('\n=======================================================\n')
42       res.write('Iteration '+str(iter)+' :\n')
43       res.write('\n=> Fonctionnelle = '+str(J))
44       res.write('\n=> Résidu        = '+str(residu))
45       res.write('\n=> Paramètres    = ')
46       for i in range(len(val)):
47          res.write('\n         '+ self.nom_para[i]+' = '+str(val[i]) )
48       if (len(Act)!=0):
49          if (len(Act)==1):
50             res.write('\n\n Le paramètre ')
51          else:
52             res.write('\n\n Les paramètres ')
53          for i in Act:
54             res.write(self.nom_para[i]+' ')
55          if (len(Act)==1):
56             res.write('\n est en butée sur un bord de leur domaine admissible.')
57          else:
58             res.write('\n sont en butée sur un bord de leur domaine admissible.')
59       res.write('\n=======================================================\n\n')
60       res.close()
61    
62    def affiche_etat_final_convergence(self,iter,max_iter,prec,residu,Act,ul_out):
63       res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
64       if ((iter < max_iter) or (residu < prec)):
65         res.write('\n=======================================================\n') 
66         res.write('                   CONVERGENCE ATTEINTE                ')
67         if (len(Act)!=0):
68            res.write("\n\n         ATTENTION : L'OPTIMUM EST ATTEINT AVEC      ")
69            res.write("\n           DES PARAMETRES EN BUTEE SUR LE BORD     ")
70            res.write("\n               DU DOMAINE ADMISSIBLE                 ")
71         res.write('\n=======================================================\n') 
72         res.close()
73       else:
74         res.write("\n=======================================================\n")
75         res.write('               CONVERGENCE  NON ATTEINTE              ')
76         res.write("\n  Le nombre maximal  d'itération ("+str(max_iter)+") a été dépassé")                    
77         res.write('\n=======================================================\n')
78         res.close()
79
80    def affiche_calcul_etat_final(self,para,Hessien,valeurs_propres,vecteurs_propres,sensible,insensible,ul_out):
81         res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
82         res.write('\n\nValeurs propres du Hessien:\n')
83         res.write(str( valeurs_propres))
84         res.write('\n\nVecteurs propres associés:\n')
85         res.write(str( vecteurs_propres))
86         res.write('\n\n              --------')
87         res.write('\n\nOn peut en déduire que :')
88         # Paramètres sensibles
89         if (len(sensible)!=0):
90            res.write('\n\nLes combinaisons suivantes de paramètres sont prépondérantes pour votre calcul :\n')
91            k=0
92            for i in sensible:
93               k=k+1
94               colonne=vecteurs_propres[:,i]
95               numero=Numeric.nonzero(Numeric.greater(abs(colonne/max(abs(colonne))),1.E-1))
96               res.write('\n   '+str(k)+') ')
97               for j in numero:
98                  res.write('%+3.1E ' %colonne[j]+'* '+para[j]+' ')
99               res.write('\n      associée à la valeur propre %3.1E \n' %valeurs_propres[i])
100         # Paramètres insensibles
101         if (len(insensible)!=0):
102            res.write('\n\nLes combinaisons suivantes de paramètres sont insensibles pour votre calcul :\n')
103            k=0
104            for i in insensible:
105               k=k+1
106               colonne=vecteurs_propres[:,i]
107               numero=Numeric.nonzero(Numeric.greater(abs(colonne/max(abs(colonne))),1.E-1))
108               res.write('\n   '+str(k)+') ')
109               for j in numero:
110                  res.write('%+3.1E ' %colonne[j]+'* '+para[j]+' ')
111               res.write('\n      associée à la valeur propre %3.1E \n' %valeurs_propres[i])
112         res.close()
113       
114    
115