1 # -*- coding: utf-8 -*-
2 # --------------------------------------------------
4 # --------------------------------------------------
11 JdC = JDC_CATA(code='HOMARD',
13 regles = (AU_MOINS_UN('DONNEES_HOMARD'),),
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
29 # --------------------------------------------------
31 # --------------------------------------------------
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" ),
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',
56 ang="Absolute threshold" ),
57 CRIT_RAFF_REL =SIMP (statut='f',typ='R',
59 ang="Relative threshold" ),
60 CRIT_RAFF_PE =SIMP (statut='f',typ='R',
61 fr="Pourcentage d'éléments",
62 ang="Percentage of elements" ),
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' ,
72 ang="Absolute threshold" ),
73 CRIT_DERA_REL =SIMP(statut='f',typ='R',
75 ang="Relative threshold" ),
76 CRIT_DERA_PE =SIMP(statut='f',typ='R',
77 fr="Pourcentage d'éléments",
78 ang="Percentage of elements" ),
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='o',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.",),
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"),
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" ),
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.",
122 # 1. Langue des messages issus de HOMARD
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." ),
129 # 2. Les fichiers en entree/sortie
131 MESSAGES = SIMP(statut='o' ,typ='TXM',
132 fr="Nom du fichier contenant les messages de sortie",
135 # 3. Le type de traitement :
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'),
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"),),
149 DERAFFINEMENT = SIMP(statut='o',typ='TXM',
150 fr="Choix du mode de deraffinement.",
151 ang="Choice of unrefinement mode.",
152 into=("NON","LIBRE",),),
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(),
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.",
169 into=("UNIFORME",),),
171 DERAFFINEMENT = SIMP(statut='o',typ='TXM',
172 fr="Choix du mode de deraffinement.",
173 ang="Choice of unrefinement mode.",
177 b_adaptation = bloc_adaptation(),
178 b_niveau_minimum = niveau_minimum(),
179 b_niveau_maximum = niveau_maximum(),
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.",
191 DERAFFINEMENT = SIMP(statut='o',typ='TXM',
192 fr="Choix du mode de deraffinement.",
193 ang="Choice of unrefinement mode.",
195 into=("UNIFORME",),),
197 b_adaptation = bloc_adaptation(),
198 b_niveau_minimum = niveau_minimum(),
199 b_niveau_maximum = niveau_maximum(),
202 INFORMATION =SIMP(statut='f',typ='TXM',
203 fr="Information sur un maillage",
204 ang="Information on a mesh",
208 # 3.2. LES CONTRAINTES :
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
219 # 3.2.2. POUR DE L'ADAPTATION UNIFORME
221 # A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
222 # B. LE NOM MED DU MAILLAGE DE SORTIE
224 # A. LE NOM MED DE L'INDICATEUR D'ERREUR
225 # B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR
227 # REMARQUE : A L'ITERATION 0, OU AUX ITERATIONS SUIVANTES SI MAJ DE SOLUTION,
228 # IL FAUT LE NOM MED DU MAILLAGE D'ENTREE
230 # 3.2.3. POUR DE L'INFORMATION :
232 # A. LE NOM MED DU MAILLAGE D'ENTREE
234 # A. LE NOM MED DE L'INDICATEUR D'ERREUR
235 # B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR
237 # D. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
238 # E. LA MISE A JOUR DE SOLUTION
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",),
250 # 3.3. Le suivi de frontiere eventuel :
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" ),
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" ),
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" ),
268 # 4. L'ANALYSE DU MAILLAGE
270 ANALYSE =FACT(statut='f',
271 fr="Analyse du maillage.",
272 ang="Mesh analysis.",
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
281 regles=(AU_MOINS_UN('NOMBRE','QUALITE','INTERPENETRATION','CONNEXITE','TAILLE'),),
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" ),
287 QUALITE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
288 fr="Qualité du maillage",
289 ang="Mesh quality" ),
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." ),
295 CONNEXITE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
296 fr="Connexité du maillage.",
297 ang="Mesh connexity." ),
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." ),
306 # 5. Les fichiers en entree/sortie