Salome HOME
CCAR: merge de la version de developpement V1_12a2 dans la branche principale
[tools/eficas.git] / Homard / homard_cata_V6n.py
1 # -*- coding: utf-8 -*-
2 # --------------------------------------------------
3 # debut entete
4 # --------------------------------------------------
5
6 import Accas
7 from Accas import *
8
9 #CONTEXT.debug=1
10
11 JdC = JDC_CATA(code='HOMARD',
12                execmodul=None,
13                regles = (AU_MOINS_UN('DONNEES_HOMARD'),),
14                         )
15
16 # Type le plus general
17 class entier  (ASSD):pass
18 class reel    (ASSD):pass
19 class complexe(ASSD):pass
20 class liste   (ASSD):pass
21 class chaine  (ASSD):pass
22
23 # Types geometriques
24 class no  (GEOM):pass
25 class grno(GEOM):pass
26 class ma  (GEOM):pass
27 class grma(GEOM):pass
28
29 # --------------------------------------------------
30 # fin entete
31 # --------------------------------------------------
32
33 def bloc_adaptation():
34     return BLOC(condition = "( RAFFINEMENT != None ) or ( DERAFFINEMENT != None ) ",
35                 fr="Nom MED du maillage en sortie, numero d'iteration",
36                 ang="MED name of the out-mesh, iteration rank",
37                 NITER =SIMP(statut='o',typ='I',
38                            fr="Numéro d'itération avant l'adaptation.",
39                            ang="Iteration number before adaptation." ),
40                 NOM_MED_MAILLAGE_NP1 =SIMP(statut='o',typ='TXM',
41                            fr="Nom MED du maillage en sortie",
42                            ang="MED name of the out-mesh" ),
43                 FICHIER_MED_MAILLAGE_NP1 =SIMP(statut='o',typ='TXM',
44                            fr="Nom du fichier MED du maillage en sortie",
45                            ang="MED file name of the out-mesh" ),
46            )
47
48 #
49 def critere_de_raffinement() :
50   return BLOC(condition = "( RAFFINEMENT != 'NON' ) ",
51                fr="Critère de raffinement.",
52                ang="Refinement threshold.",
53                regles=(UN_PARMI ( 'CRIT_RAFF_ABS', 'CRIT_RAFF_REL', 'CRIT_RAFF_PE' ),),
54                CRIT_RAFF_ABS   =SIMP (statut='f',typ='R',
55                                       fr="Critère absolu",
56                                       ang="Absolute threshold"  ),
57                CRIT_RAFF_REL   =SIMP (statut='f',typ='R',
58                                       fr="Critère relatif",
59                                       ang="Relative threshold" ),
60                CRIT_RAFF_PE    =SIMP (statut='f',typ='R',
61                                       fr="Pourcentage d'éléments",
62                                       ang="Percentage of elements" ),
63                )
64 #
65 def critere_de_deraffinement():
66    return BLOC(condition = "( DERAFFINEMENT != 'NON' ) ",
67                fr="Critère de déraffinement.",
68                ang="Unrefinement threshold.",
69                regles=(UN_PARMI ( 'CRIT_DERA_ABS', 'CRIT_DERA_REL', 'CRIT_DERA_PE' ),),
70                CRIT_DERA_ABS =SIMP(statut='f',typ='R' ,
71                                    fr="Critère absolu",
72                                    ang="Absolute threshold" ),
73                CRIT_DERA_REL   =SIMP(statut='f',typ='R',
74                                      fr="Critère relatif",
75                                      ang="Relative threshold" ),
76                CRIT_DERA_PE    =SIMP(statut='f',typ='R',
77                                      fr="Pourcentage d'éléments",
78                                      ang="Percentage of elements" ),
79           )
80
81 def indicateur_d_erreur():
82    return  BLOC(condition = "( RAFFINEMENT == 'LIBRE' ) or ( RAFFINEMENT == 'NON-CONFORME' ) or \
83                           ( RAFFINEMENT == 'NON-CONFORME-INDICATEUR') or (DERAFFINEMENT == 'LIBRE')",
84              fr="Indicateur d'erreur",
85              ang="Error indicator",
86              NOM_MED  =    SIMP (statut='o',typ='TXM',
87                              fr="Nom MED de l'indicateur d'erreur.",
88                              ang="MED name of error indicator.",),
89              COMPOSANTE  = SIMP(statut='o',typ='TXM',
90                              fr="Nom de la composante de l'indicateur d'erreur retenue.",
91                              ang="Name of the selected component of the error indicator.",),
92              NUME_ORDRE  = SIMP(statut='f',typ='I',
93                              fr="Numero d'ordre de l'indicateur.",
94                              ang="Rank number of the error indicator.",),
95              NUME_PAS_TEMPS  = SIMP(statut='f',typ='I',
96                              fr="Numero de pas de temps de l'indicateur.",
97                              ang="Time step number of the error indicator.",),
98                            ) 
99
100 def niveau_maximum():
101    return BLOC ( condition = " ( RAFFINEMENT == 'LIBRE' ) or ( RAFFINEMENT == 'NON-CONFORME' ) or \
102                                 ( RAFFINEMENT == 'NON-CONFORME-INDICATEUR' ) or \
103                                 ( RAFFINEMENT == 'UNIFORME' ) ",
104                  NIVE_MAX      = SIMP(statut='f',typ='I',
105                                  fr="Niveau maximum de profondeur de raffinement",
106                                  ang="Maximum level for refinement"),
107                            )
108 #
109 def niveau_minimum():
110    return BLOC ( condition = " ( DERAFFINEMENT == 'LIBRE' ) or ( DERAFFINEMENT == 'UNIFORME' ) ",
111                  NIVE_MIN  = SIMP(statut='f',typ='I',
112                              fr="Niveau minimum de déraffinement",
113                              ang="Minimum level for unrefinement" ),
114                            ) 
115
116
117 DONNEES_HOMARD=PROC(nom="DONNEES_HOMARD",op= 189, docu="U7.04.01-b",
118             UIinfo={"groupes":("Fonction",)},
119                     fr="Imprime le fichier de configuration de HOMARD.",
120                     ang="Writes the configuration file for HOMARD.",
121 #
122 # 1. Langue des messages issus de HOMARD
123 #
124          LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
125                                into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
126                            fr="Langue des messages issus de HOMARD.",
127                            ang="Language for HOMARD messages." ),
128 #
129 # 2. Les fichiers en entree/sortie
130 #
131          MESSAGES =  SIMP(statut='o' ,typ='TXM',
132                          fr="Nom du fichier contenant les messages de sortie",
133                          ang="Log File"),
134 #
135 # 3. Le type de traitement :
136 #
137           TRAITEMENT      =FACT(statut='o',
138            regles=( UN_PARMI('TYPE_RAFFINEMENT_LIBRE','TYPE_DERAFFINEMENT_UNIFORME','TYPE_RAFFINEMENT_UNIFORME','INFORMATION'),
139 ###                    EXCLUS('TYPE_RAFFINEMENT_LIBRE','INFORMATION'),
140 ###                    EXCLUS('TYPE_RAFFINEMENT_UNIFORME','INFORMATION'),
141                     ),
142 #
143           TYPE_RAFFINEMENT_LIBRE = FACT(statut='f',
144                            RAFFINEMENT   = SIMP (statut='o',typ='TXM',
145                                            fr="Choix du mode de raffinement.",
146                                            ang="Choice of refinement mode.",
147                                            into=("NON","LIBRE","NON-CONFORME","NON-CONFORME-INDICATEUR"),),
148
149                            DERAFFINEMENT = SIMP(statut='o',typ='TXM',
150                                            fr="Choix du mode de deraffinement.",
151                                            ang="Choice of unrefinement mode.",
152                                            into=("NON","LIBRE",),),
153
154                            b_adaptation               = bloc_adaptation(),
155                               b_indicateur_d_erreur      = indicateur_d_erreur(),
156                               b_critere_de_raffinement   = critere_de_raffinement(),
157                               b_critere_de_deraffinement = critere_de_deraffinement(),
158                            b_niveau_minimum               = niveau_minimum(),
159                            b_niveau_maximum               = niveau_maximum(),
160
161                                    ),
162
163 #
164            TYPE_RAFFINEMENT_UNIFORME = FACT( statut='f',
165                            RAFFINEMENT   = SIMP (statut='o',typ='TXM',
166                                            fr="Choix du mode de raffinement.",
167                                            ang="Choice of refinement mode.",
168                                            defaut="UNIFORME",
169                                            into=("UNIFORME",),),
170
171                            DERAFFINEMENT = SIMP(statut='o',typ='TXM',
172                                            fr="Choix du mode de deraffinement.",
173                                            ang="Choice of unrefinement mode.",
174                                            defaut="NON",
175                                            into=("NON",),),
176
177                            b_adaptation               = bloc_adaptation(),
178                            b_niveau_minimum               = niveau_minimum(),
179                            b_niveau_maximum               = niveau_maximum(),
180
181                                        ),
182
183 #
184            TYPE_DERAFFINEMENT_UNIFORME = FACT( statut='f',
185                            RAFFINEMENT   = SIMP (statut='o',typ='TXM',
186                                            fr="Choix du mode de raffinement.",
187                                            ang="Choice of refinement mode.",
188                                            defaut="NON",
189                                            into=("NON",),),
190
191                            DERAFFINEMENT = SIMP(statut='o',typ='TXM',
192                                            fr="Choix du mode de deraffinement.",
193                                            ang="Choice of unrefinement mode.",
194                                            defaut="UNIFORME",
195                                            into=("UNIFORME",),),
196
197                            b_adaptation               = bloc_adaptation(),
198                            b_niveau_minimum               = niveau_minimum(),
199                            b_niveau_maximum               = niveau_maximum(),
200                                        ),
201 #
202            INFORMATION     =SIMP(statut='f',typ='TXM',
203                                  fr="Information sur un maillage",
204                                  ang="Information on a mesh",
205                                  into=("OUI",) ),
206        ),
207 #
208 # 3.2. LES CONTRAINTES :
209 #
210 # 3.2.1. POUR DE L'ADAPTATION LIBRE, IL FAUT :
211 #      A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
212 #      B. LE NOM MED DU MAILLAGE D'ENTREE
213 #      C. LE NOM MED DE L'INDICATEUR D'ERREUR
214 #      D. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
215 #      E. LA MISE A JOUR DE SOLUTION
216 #      F. LE NOM MED DU MAILLAGE DE SORTIE
217 #      REMARQUE : IL FAUT DES CRITERES, MAIS ON NE SAIT PAS LESQUELS
218 #
219 # 3.2.2. POUR DE L'ADAPTATION UNIFORME
220 #          IL FAUT :
221 #      A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
222 #      B. LE NOM MED DU MAILLAGE DE SORTIE
223 #          IL NE FAUT PAS :
224 #      A. LE NOM MED DE L'INDICATEUR D'ERREUR
225 #      B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR
226 #      C. LES CRITERES
227 #      REMARQUE : A L'ITERATION 0, OU AUX ITERATIONS SUIVANTES SI MAJ DE SOLUTION,
228 #                 IL FAUT LE NOM MED DU MAILLAGE D'ENTREE
229 #
230 # 3.2.3. POUR DE L'INFORMATION :
231 #          IL FAUT :
232 #      A. LE NOM MED DU MAILLAGE D'ENTREE
233 #          IL NE FAUT PAS :
234 #      A. LE NOM MED DE L'INDICATEUR D'ERREUR
235 #      B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR
236 #      C. LES CRITERES
237 #      D. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
238 #      E. LA MISE A JOUR DE SOLUTION
239 #
240            NOM_MED_MAILLAGE_N    = SIMP(statut='o',typ='TXM',     
241                                  fr="Nom MED du maillage en entrée",
242                                  ang="MED name of the in-mesh",),
243            FICHIER_MED_MAILLAGE_N  = SIMP(statut='o',typ='TXM',     
244                                  fr="Nom du fichier MED du maillage en entrée",
245                                  ang="MED file name of the in-mesh",),
246 #
247 #
248 #
249 #
250 # 3.3. Le suivi de frontiere eventuel :
251 #
252          NOM_MED_MAILLAGE_FRONTIERE =SIMP(statut='f',typ='TXM',
253                            fr="Nom MED du maillage de la frontiere à suivre",
254                            ang="MED name of the boundary mesh" ),
255 #
256          b_frontiere_1 =BLOC ( condition = "NOM_MED_MAILLAGE_FRONTIERE != None" ,
257                            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
258                                                  fr="Groupes définissant la frontière",
259                                                  ang="Groups which define the boundary" ),
260                                ) ,
261          fichier_frontiere=BLOC ( condition = "NOM_MED_MAILLAGE_FRONTIERE != None" ,
262                           FIC_FRON = SIMP(statut='f',typ='TXM',
263                                          fr="Nom du fichier MED contenant le maillage frontiere",
264                                          ang="MED File including the boundary mesh" ),
265                                ), 
266 #
267 #
268 # 4. L'ANALYSE DU MAILLAGE
269 #
270          ANALYSE         =FACT(statut='f',
271                                fr="Analyse du maillage.",
272                                ang="Mesh analysis.",
273 #
274 #    5 CHOIX NON EXCLUSIFS, AVEC DEUX VARIANTES (OUI/NON) :
275 #    A. NOMBRE DES ELEMENTS
276 #    B. QUALITE DES ELEMENTS
277 #    C. INTERPENETRATION DES ELEMENTS
278 #    D. CONNEXITE DU MAILLAGE
279 #    E. TAILLE DES DIFFERENTS SOUS-DOMAINES
280 #
281            regles=(AU_MOINS_UN('NOMBRE','QUALITE','INTERPENETRATION','CONNEXITE','TAILLE'),),
282 #
283          NOMBRE          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
284                           fr="Nombre de noeuds et éléments du maillage",
285                           ang="Number of nodes and elements in the mesh" ),
286 #
287          QUALITE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
288                           fr="Qualité du maillage",
289                           ang="Mesh quality" ),
290 #
291          INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
292                           fr="Controle de la non interpénétration des éléments.",
293                           ang="Overlapping checking." ),
294 #
295          CONNEXITE       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
296                           fr="Connexité du maillage.",
297                           ang="Mesh connexity." ),
298 #
299          TAILLE          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
300                           fr="Tailles des sous-domaines du maillage.",
301                           ang="Sizes of mesh sub-domains." ),
302 #
303          ),
304 #
305 #
306 # 5. Les fichiers en entree/sortie
307 #
308 #
309 )  ;