]> SALOME platform Git repositories - tools/eficas.git/blob - Exemples/eficas/cata.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Exemples / eficas / cata.py
1 # -*- coding: utf-8 -*-
2
3 from Accas import SIMP,FACT,BLOC
4 from Accas import AsException,AsType
5 from Accas import ASSD,CO,GEOM,fonction
6 from Accas import OPER,MACRO,JDC_CATA,FORM,PROC
7 from Accas import AU_MOINS_UN,UN_PARMI,PRESENT_PRESENT,EXCLUS,ENSEMBLE,PRESENT_ABSENT
8 from Accas import EVAL
9
10 #compatibilite avec V9
11 import Noyau
12 class ASSD(ASSD,Noyau.AsBase):pass
13 class GEOM(GEOM,Noyau.AsBase):pass
14 #fin compatibilite
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 # Type geometriques
24 class no  (GEOM):pass
25 class grno(GEOM):pass
26 class ma  (GEOM):pass
27 class grma(GEOM):pass
28
29 # Autres
30
31 class cabl_precont    (ASSD):pass
32 class cara_elem       (ASSD):pass
33 class cara_pout       (ASSD):pass
34 class cham_mater      (ASSD):pass
35 class char_acou       (ASSD):pass
36 class char_cine_acou  (ASSD):pass
37 class char_cine_meca  (ASSD):pass
38 class char_cine_ther  (ASSD):pass
39 class char_meca       (ASSD):pass
40 class char_ther       (ASSD):pass
41 class courbe          (ASSD):pass
42 class fond_fiss       (ASSD):pass
43 class interf_dyna_clas(ASSD):pass
44 class interspfact     (ASSD):pass
45 class listis          (ASSD):pass
46 class listr8          (ASSD):pass
47 class macr_elem_dyna  (ASSD):pass
48 class macr_elem_stat  (ASSD):pass
49 class mater           (ASSD):pass
50 class melasflu        (ASSD):pass
51 class modele          (ASSD):pass
52 class modele_gene     (ASSD):pass
53 class nume_ddl        (ASSD):pass
54 class nume_ddl_gene   (ASSD):pass
55 class obstacle        (ASSD):pass
56 class spectre         (ASSD):pass
57 class surface         (ASSD):pass
58 class tran_gene       (ASSD):pass
59 class type_flui_stru  (ASSD):pass
60 class valeur          (ASSD):pass
61
62 # maillage :
63 #--------------------------------
64 class maillage(ASSD):pass
65 class squelette     (maillage):pass
66
67 # cham_gd (carte,cham_no,cham_elem)
68 #--------------------------------
69
70 class cham_gd(ASSD):pass
71
72 # cham_gd/carte :
73 #--------------------------------
74 class carte(cham_gd):pass
75 class carte_dbel_r   (carte):pass
76 class carte_depl_c   (carte):pass
77 class carte_depl_f   (carte):pass
78 class carte_depl_r   (carte):pass
79 class carte_durt_r   (carte):pass
80 class carte_ener_r   (carte):pass
81 class carte_epsi_r   (carte):pass
82 class carte_erreur   (carte):pass
83 class carte_flux_r   (carte):pass
84 class carte_g_depl_r (carte):pass
85 class carte_geom_r   (carte):pass
86 class carte_hydr_r   (carte):pass
87 class carte_inst_r   (carte):pass
88 class carte_inte_r   (carte):pass
89 class carte_irra_r   (carte):pass
90 class carte_meta_r   (carte):pass
91 class carte_neut_f   (carte):pass
92 class carte_neut_r   (carte):pass
93 class carte_pres_r   (carte):pass
94 class carte_sief_r   (carte):pass
95 class carte_sour_r   (carte):pass
96 class carte_temp_f   (carte):pass
97 class carte_temp_r   (carte):pass
98 class carte_var2_r   (carte):pass
99 class carte_vnor_c   (carte):pass
100
101 # cham_gd/cham_elem :
102 #--------------------------------
103 class cham_elem(cham_gd):pass
104 class cham_elem_crit_r(cham_elem):pass
105 class cham_elem_dbel_r(cham_elem):pass
106 class cham_elem_depl_c(cham_elem):pass
107 class cham_elem_depl_f(cham_elem):pass
108 class cham_elem_depl_r(cham_elem):pass
109 class cham_elem_dommag(cham_elem):pass
110 class cham_elem_durt_r(cham_elem):pass
111 class cham_elem_ener_r(cham_elem):pass
112 class cham_elem_epsi_c(cham_elem):pass
113 class cham_elem_epsi_r(cham_elem):pass
114 class cham_elem_erreur(cham_elem):pass
115 class cham_elem_flux_r(cham_elem):pass
116 class cham_elem_g_depl(cham_elem):pass
117 class cham_elem_geom_r(cham_elem):pass
118 class cham_elem_hydr_r(cham_elem):pass
119 class cham_elem_inst_r(cham_elem):pass
120 class cham_elem_inte_r(cham_elem):pass
121 class cham_elem_irra_r(cham_elem):pass
122 class cham_elem_meta_r(cham_elem):pass
123 class cham_elem_neut_f(cham_elem):pass
124 class cham_elem_neut_r(cham_elem):pass
125 class cham_elem_pres_r(cham_elem):pass
126 class cham_elem_sief_c(cham_elem):pass
127 class cham_elem_sief_r(cham_elem):pass
128 class cham_elem_sour_r(cham_elem):pass
129 class cham_elem_temp_f(cham_elem):pass
130 class cham_elem_temp_r(cham_elem):pass
131 class cham_elem_vari_r(cham_elem):pass
132 class cham_elem_vnor_c(cham_elem):pass
133
134
135 # cham_gd/cham_no :
136 #--------------------------------
137 class cham_no(cham_gd):pass
138 class cham_no_dbel_r   (cham_no):pass
139 class cham_no_depl_c   (cham_no):pass
140 class cham_no_depl_f   (cham_no):pass
141 class cham_no_depl_r   (cham_no):pass
142 class cham_no_durt_r   (cham_no):pass
143 class cham_no_ener_r   (cham_no):pass
144 class cham_no_epsi_r   (cham_no):pass
145 class cham_no_erreur   (cham_no):pass
146 class cham_no_flux_r   (cham_no):pass
147 class cham_no_g_depl_r (cham_no):pass
148 class cham_no_geom_r   (cham_no):pass
149 class cham_no_hydr_r   (cham_no):pass
150 class cham_no_inst_r   (cham_no):pass
151 class cham_no_inte_r   (cham_no):pass
152 class cham_no_irra_r   (cham_no):pass
153 class cham_no_meta_r   (cham_no):pass
154 class cham_no_neut_f   (cham_no):pass
155 class cham_no_neut_r   (cham_no):pass
156 class cham_no_pres_c   (cham_no):pass
157 class cham_no_pres_r   (cham_no):pass
158 class cham_no_sief_r   (cham_no):pass
159 class cham_no_sour_r   (cham_no):pass
160 class cham_no_temp_c   (cham_no):pass
161 class cham_no_temp_f   (cham_no):pass
162 class cham_no_temp_r   (cham_no):pass
163 class cham_no_vanl_r   (cham_no):pass
164 class cham_no_var2_r   (cham_no):pass
165 class cham_no_vnor_c   (cham_no):pass
166
167
168 class resultat(ASSD):pass
169
170 class acou_harmo    (resultat):pass
171 class base_modale     (resultat):pass
172 class comb_fourier  (resultat):pass
173 class dyna_harmo    (resultat):pass
174 class dyna_trans    (resultat):pass
175 class fourier_elas  (resultat):pass
176 class harm_gene     (resultat):pass
177 class mode_acou     (resultat):pass
178 class mode_cycl     (resultat):pass
179 class mode_flamb    (resultat):pass
180 class mode_gene     (resultat):pass
181 class mult_elas     (resultat):pass
182 class theta_geom    (resultat):pass
183
184 # resultat/evol :
185 #--------------------------------
186 class evol(resultat):pass
187 class evol_char(evol):pass
188 class evol_elas(evol):pass
189 class evol_noli(evol):pass
190 class evol_ther(evol):pass
191 class evol_varc(evol):pass
192
193 # resultat/mode_stat :
194 #--------------------------------
195 class mode_stat(resultat):pass
196 class mode_stat_depl(mode_stat):pass
197 class mode_stat_acce(mode_stat):pass
198 class mode_stat_forc(mode_stat):pass
199
200
201 # resultat/mode_meca :
202 #--------------------------------
203 class mode_meca(resultat):pass
204 class mode_meca_c(mode_meca):pass
205
206 # fonction :
207 #--------------------------------
208 class para_sensi(fonction):pass
209 class fonction_c(fonction):pass
210
211 # matr_asse :
212 #--------------------------------
213 class matr_asse(ASSD):pass
214 class matr_asse_depl_c(matr_asse):pass
215 class matr_asse_depl_r(matr_asse):pass
216 class matr_asse_gene_r(matr_asse):pass
217 class matr_asse_gene_c(matr_asse):pass
218 class matr_asse_pres_c(matr_asse):pass
219 class matr_asse_pres_r(matr_asse):pass
220 class matr_asse_temp_c(matr_asse):pass
221 class matr_asse_temp_r(matr_asse):pass
222
223 # matr_elem :
224 #--------------------------------
225 class matr_elem(ASSD):pass
226 class matr_elem_depl_c(matr_elem):pass
227 class matr_elem_depl_r(matr_elem):pass
228 class matr_elem_pres_c(matr_elem):pass
229 class matr_elem_temp_r(matr_elem):pass
230
231 # table : (tabl_fonc)
232 #--------------------------------
233
234 class table(ASSD):pass
235
236 class tabl_aire_int   (table):pass
237 class tabl_calc_g_loca(table):pass
238 class tabl_calc_g_th  (table):pass
239 class tabl_cara_geom  (table):pass
240 class tabl_char_limite(table):pass
241 class tabl_ener_elas  (table):pass
242 class tabl_ener_pot   (table):pass
243 class tabl_ener_cin   (table):pass
244 class tabl_ener_totale(table):pass
245 class tabl_indic_ener (table):pass
246 class tabl_indic_seuil(table):pass
247 class tabl_intsp      (table):pass
248 class tabl_mass_iner  (table):pass
249 class tabl_post_alea  (table):pass
250 class tabl_post_dyna  (table):pass
251 class tabl_post_f_alea(table):pass
252 class tabl_post_fatig (table):pass
253 class tabl_post_gouj2e(table):pass
254 class tabl_post_k     (table):pass
255 class tabl_post_rccm  (table):pass
256 class tabl_post_rele  (table):pass
257 class tabl_post_simpli(table):pass
258 class tabl_post_usur  (table):pass
259 class tabl_reca_weib  (table):pass
260 class tabl_rice_tracey(table):pass
261 class tabl_texture    (table):pass
262 class tabl_trc        (table):pass
263 class tabl_weibull    (table):pass
264
265 # table/tabl_fonc
266 #--------------------------------
267 class tabl_fonc       (table):pass
268 class tabl_fonc_max   (tabl_fonc):pass
269 class tabl_fonc_noci  (tabl_fonc):pass
270 class tabl_fonc_rms   (tabl_fonc):pass
271
272
273 # vect_asse :
274 #--------------------------------
275 class vect_asse(ASSD):pass
276 class vect_asse_gene(vect_asse):pass
277
278 # vect_elem :
279 #--------------------------------
280 class vect_elem(ASSD):pass
281 class vect_elem_depl_r(vect_elem):pass
282 class vect_elem_pres_c(vect_elem):pass
283 class vect_elem_pres_r(vect_elem):pass
284 class vect_elem_temp_r(vect_elem):pass
285
286
287 JdC=JDC_CATA(code="ASTER")
288
289 def DEBUT_prod(self,PAR_LOT,**args):
290   """
291      Fonction sdprod de la macro DEBUT
292   """
293   self.jdc.set_par_lot(PAR_LOT)
294
295 DEBUT=MACRO(nom="DEBUT",op=0 ,docu="U4.11.01-f1",repetable='n',
296            fr="Ouverture d une étude. Allocation des ressources mémoire et disque",
297           sd_prod=DEBUT_prod,
298
299          PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
300                            into=("OUI","NON"),defaut="OUI"),
301          BASE            =FACT(fr="définition des paramètres associés aux bases JEVEUX",
302                                statut='f',min=01,max=03,
303            FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM',
304                                  into=('GLOBALE','VOLATILE','LOCALE'),),
305            TITRE           =SIMP(statut='f',typ='TXM'),
306            CAS             =SIMP(statut='f',typ='TXM'),
307            NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
308            LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
309            LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
310          ),
311          IMPRESSION      =FACT(statut='f',min=01,max=03,
312            FICHIER         =SIMP(statut='o',typ='TXM'),
313            UNITE           =SIMP(statut='o',typ='I'),
314          ),
315          CATALOGUE       =FACT(statut='f',min=01,max=10,
316            FICHIER         =SIMP(statut='o',typ='TXM'),
317            TITRE           =SIMP(statut='f',typ='TXM'),
318            UNITE           =SIMP(statut='f',typ='I'),
319          ),
320          CODE            =FACT("définition d un nom pour l'esemble d'une étude",
321                                statut='f',min=01,max=01,
322            NOM             =SIMP(statut='o',typ='TXM'),
323            UNITE           =SIMP(statut='f',typ='I',defaut=15),
324          ),
325          DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
326                                statut='f',min=01,max=01,
327            JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
328                                  statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
329            JEVEUX          =SIMP(fr="force les déchargement sur disque",
330                                  statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
331            ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
332                                  statut='f',typ='TXM',into=('TEST',)),
333          ),
334          MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=01,max=01,
335            GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
336            TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
337            TAILLE          =SIMP(statut='f',typ='I'),
338            TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut=800.),
339            PARTITION       =SIMP(statut='f',typ='R'),
340          ),
341  );
342
343 LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage,
344                    fr="Lecture d'un fichier de maillage",
345                    ang="Readings of a mesh file",
346                    docu="U4.21.01-f",reentrant='n',
347 #
348          UNITE           =SIMP(statut='f',typ='I',defaut= 20 ),
349 #
350          FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","MED"),
351                             fr="Format du fichier : ASTER ou MED.",
352                             ang="Format of the file : ASTER or MED.",),
353 #
354          ABSC_CURV       =FACT(statut='f',min=00,max=01,
355                TOUT          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
356          ),
357 #
358          VERI_MAIL       =FACT(statut='d',min=01,max=01,
359                APLAT         =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
360          ),
361 #
362          b_format_med =BLOC( condition = " ( FORMAT == 'MED' ) " ,
363                            fr="Informations complémentaires pour la lecture MED.",
364                            ang="Further information for MED readings.",
365 #
366 # Pour une lecture dans un fichier MED, on peut préciser le nom sous lequel
367 # le maillage y a été enregistré. Par défaut, on va le chercher sous le nom du concept à créer.
368 #
369               NOM_MED    = SIMP(statut='f',typ='TXM',
370                             fr="Nom du maillage dans le fichier MED.",
371                             ang="Name of the mesh into the MED file.",),
372 #
373               INFO_MED   = SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
374 #
375                            ) ,
376 #
377          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
378 #
379 )  ;
380
381 AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-f1",
382                  fr="Affectation des éléments finis sur le maillage",reentrant='n',
383          regles=(AU_MOINS_UN('AFFE','AFFE_SOUS_STRUC'),),
384          MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
385          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
386          VERIF           =SIMP(statut='f',typ='TXM',max=2,into=("MAILLE","NOEUD") ),
387          AFFE_SOUS_STRUC =FACT(statut='f',min=01,max=01,
388            regles=(UN_PARMI('TOUT','MAILLE'),),
389            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
390            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
391            PHENOMENE       =SIMP(statut='f',typ='TXM',defaut="MECANIQUE",into=("MECANIQUE",) ),
392          ),
393          AFFE            =FACT(statut='f',min=01,max='**',
394            regles=(UN_PARMI('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD'),),
395            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
396            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
397            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
398            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
399            NOEUD           =SIMP(statut='f',typ=no,max='**'),
400            PHENOMENE       =SIMP(statut='o',typ='TXM',
401                                  into=("MECANIQUE","THERMIQUE","ACOUSTIQUE","NON_LOCAL") ),
402                 b_mecanique     =BLOC( condition = "PHENOMENE=='MECANIQUE'",
403                                         fr="modelisations mécaniques",
404                     MODELISATION    =SIMP(statut='o',typ='TXM', into=(
405                                                                       "2D_CONTACT",
406                                                                       "2D_DIS_T",
407                                                                       "2D_DIS_TR",
408                                                                       "2D_FLUI_ABSO",
409                                                                       "2D_FLUI_PESA",
410                                                                       "2D_FLUI_STRU",
411                                                                       "2D_FLUIDE",
412                                                                       "3D",
413                                                                       "3D_ABSO",
414                                                                       "3D_CONTACT",
415                                                                       "3D_FAISCEAU",
416                                                                       "3D_FLUI_ABSO",
417                                                                       "3D_FLUIDE",
418                                                                       "3D_HHM" ,
419                                                                       "3D_HM",
420                                                                       "3D_INCO",
421                                                                       "3D_JOINT_CT",
422                                                                       "3D_SI",
423                                                                       "3D_THH",
424                                                                       "3D_THHM",
425                                                                       "3D_THM",
426                                                                       "APPUI_REP",
427                                                                       "ASSE_GRIL",
428                                                                       "AXIS",
429                                                                       "AXIS_FLUI_STRU",
430                                                                       "AXIS_FLUIDE",
431                                                                       "AXIS_FOURIER",
432                                                                       "AXIS_HHM",
433                                                                       "AXIS_HM",
434                                                                       "AXIS_INCO",
435                                                                       "AXIS_SI",
436                                                                       "AXIS_THH",
437                                                                       "AXIS_THHM",
438                                                                       "AXIS_THM",
439                                                                       "BARRE",
440                                                                       "2D_BARRE",
441                                                                       "C_PLAN",
442                                                                       "C_PLAN_SI",
443                                                                       "CABLE",
444                                                                       "CABLE_POULIE",
445                                                                       "COQUE_3D",
446                                                                       "COQUE_AXIS",
447                                                                       "COQUE_C_PLAN",
448                                                                       "COQUE_D_PLAN",
449                                                                       "CONT_DVP_2D",
450                                                                       "CONT_DVP_3D",
451                                                                       "D_PLAN",
452                                                                       "D_PLAN_ABSO",
453                                                                       "D_PLAN_HHM",
454                                                                       "D_PLAN_HM",
455                                                                       "D_PLAN_SI",
456                                                                       "D_PLAN_THH",
457                                                                       "D_PLAN_THHM",
458                                                                       "D_PLAN_THM",
459                                                                       "DIS_T",
460                                                                       "DIS_TR",
461                                                                       "DKT",
462                                                                       "DST",
463                                                                       "FLUI_STRU",
464                                                                       "GRILLE",
465                                                                       "PLAN_INCO",
466                                                                       "POU_C_T",
467                                                                       "POU_D_E",
468                                                                       "POU_D_EM",
469                                                                       "POU_D_T",
470                                                                       "POU_D_T_GD",
471                                                                       "POU_D_TG",
472                                                                       "Q4G",
473                                                                       "TUYAU",
474                                                                       "TUYAU_3M",
475                                                                       "TUYAU_6M"
476                                                                      )  )  ),
477
478                 b_thermique     =BLOC( condition = "PHENOMENE=='THERMIQUE'",
479                                         fr="modelisations thermiques",
480                     MODELISATION    =SIMP(statut='o',typ='TXM',into=(
481                                                                       "3D",
482                                                                       "3D_DIAG",
483                                                                       "AXIS",
484                                                                       "AXIS_DIAG",
485                                                                       "AXIS_FOURIER",
486                                                                       "COQUE",
487                                                                       "COQUE_AXIS",
488                                                                       "COQUE_PLAN",
489                                                                       "PLAN",
490                                                                       "PLAN_DIAG",
491                                                                       ),),),
492                 b_acoustique    =BLOC( condition = "PHENOMENE=='ACOUSTIQUE'",
493                                         fr="modelisations acoustiques",
494                      MODELISATION    =SIMP(statut='o',typ='TXM',into=(
495                                                                        "3D",
496                                                                        "PLAN"
497                                                                        ), ),),
498
499                 b_non_local     =BLOC( condition = "PHENOMENE=='NON_LOCAL'",
500                                         fr="modelisations non locales",
501                      MODELISATION    =SIMP(statut='o',typ='TXM',into=(
502                                                                       "3D",
503                                                                       "AXIS",
504                                                                       "C_PLAN",
505                                                                       "D_PLAN",
506                                                                      ) ), ),
507          ),
508 ) ;
509
510 AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
511                     fr="Affectation de caractéristiques à des éléments de structure",
512                     docu="U4.42.01-f1",reentrant='n',
513          regles=(AU_MOINS_UN('POUTRE','BARRE','COQUE','CABLE','DISCRET','MASSIF',
514                              'ASSE_GRIL','GRILLE','AFFE_SECT','AFFE_FIBRE'),),
515          MODELE          =SIMP(statut='o',typ=modele ),
516          INFO            =SIMP(statut='f',typ='I', defaut= 1 ,into=(1,2) ),
517          VERIF           =SIMP(statut='f',typ='TXM',max='**',into=("MAILLE","NOEUD") ),
518
519          POUTRE          =FACT(statut='f',min=01,max='**',
520            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
521            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
522            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
523            SECTION         =SIMP(statut='o',typ='TXM' ,into=("GENERALE","RECTANGLE","CERCLE") ),
524            CARA_SECT       =SIMP(statut='f',typ=(cara_pout) ),
525            TUYAU_NCOU      =SIMP(statut='f',typ='I',min=1,max=10,defaut=3),
526            TUYAU_NSEC      =SIMP(statut='f',typ='I',min=1,max=32,defaut=16),
527            b_generale      =BLOC( condition = "SECTION=='GENERALE'",
528              CARA            =SIMP(statut='o',typ='TXM',max='**',
529                                  into=("A","IY","IZ","AY","AZ","EY","EZ","JX","RY","RZ","RT",
530                                                            "AI","JG","IYR2","IZR2","A1",
531                                        "IY1","IZ1","AY1","AZ1","EY1","EZ1","JX1","RY1",
532                                        "RZ1","RT1","AI1","JG1","IYR21","IZR21","A2",
533                                        "IY2","IZ2","AY2","AZ2","EY2","EZ2","JX2","RY2",
534                                        "RZ2","RT2","AI2","JG2","IYR22","IZR22","H",
535                                        "HZ","HY","EP","EPY","EPZ","H1","HZ1","HY1",
536                                        "EP1","EPY1","EPZ1","H2","HZ2","HY2","EP2",
537                                        "EPY2","EPZ2","R","R1","R2") ),
538              VALE            =SIMP(statut='o',typ='R',max='**'),
539              VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE",) ),
540            ),
541            b_rectangle     =BLOC( condition = "SECTION=='RECTANGLE'",
542              CARA            =SIMP(statut='o',typ='TXM',max='**',
543                                  into=("H","EP","HY","HZ","EPY","EPZ",
544                                                            "H1","HZ1","HY1","EP1","EPY1","EPZ1",
545                                                            "H2","HZ2","HY2","EP2","EPY2","EPZ2") ),
546              VALE            =SIMP(statut='o',typ='R',max='**'),
547              VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE","AFFINE"),defaut="HOMOTHETIQUE"),
548            ),
549            b_cercle        =BLOC( condition = "SECTION=='CERCLE'",
550              CARA            =SIMP(statut='o',typ='TXM',max='**',
551                                  into=("R","EP","R1","R2","EP1","EP2") ),
552              VALE            =SIMP(statut='o',typ='R',max='**'),
553              VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE",) ),
554              MODI_METRIQUE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
555            ),
556            FCX             =SIMP(statut='f',typ=(fonction) ),
557          ),
558
559          BARRE           =FACT(statut='f',min=01,max='**',
560            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
561            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
562            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
563            SECTION         =SIMP(statut='o',typ='TXM',into=("GENERALE","RECTANGLE","CERCLE") ),
564            b_generale      =BLOC( condition = "SECTION=='GENERALE'",
565              CARA            =SIMP(statut='o',typ='TXM',into=("A",) ),
566              VALE            =SIMP(statut='o',typ='R' ),
567            ),
568            b_rectangle     =BLOC( condition = "SECTION=='RECTANGLE'",
569              CARA            =SIMP(statut='o',typ='TXM',into=("H","HZ","HY","EPY","EPZ","EP"),max=6 ),
570              VALE            =SIMP(statut='o',typ='R',max=6 ),
571            ),
572            b_cercle        =BLOC( condition = "SECTION=='CERCLE'",
573              CARA            =SIMP(statut='o',typ='TXM',max=2,into=("R","EP") ),
574              VALE            =SIMP(statut='o',typ='R',max=2 ),
575            ),
576            FCX             =SIMP(statut='f',typ=(fonction) ),
577          ),
578
579          COQUE           =FACT(statut='f',min=01,max='**',
580            regles=(UN_PARMI('MAILLE','GROUP_MA' ),
581                    PRESENT_PRESENT( 'EXCENTREMENT','INER_ROTA' ),),
582            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
583            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
584            EPAIS           =SIMP(statut='o',typ='R' ),
585            ANGL_REP        =SIMP(statut='f',typ='R',min=2,max=2),
586            A_CIS           =SIMP(statut='f',typ='R',defaut= 0.8333333E0),
587            COEF_RIGI_DRZ   =SIMP(statut='f',typ='R',defaut= 1.0E-5 ),
588            COQUE_NCOU      =SIMP(statut='f',typ='I',defaut= 1 ),
589            EXCENTREMENT    =SIMP(statut='f',typ='R' ),
590            INER_ROTA       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
591            MODI_METRIQUE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
592          ),
593          CABLE           =FACT(statut='f',min=01,max='**',
594            regles=(UN_PARMI('MAILLE','GROUP_MA'),
595                    UN_PARMI('A','SECTION') ),
596            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
597            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
598            N_INIT          =SIMP(statut='f',typ='R',defaut= 5000. ),
599            A               =SIMP(statut='f',typ='R' ),
600            SECTION         =SIMP(statut='f',typ='R' ),
601            FCX             =SIMP(statut='f',typ=(fonction) ),
602          ),
603
604          DISCRET         =FACT(statut='f',min=01,max='**',
605            regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),),
606            NOEUD           =SIMP(statut='f',typ=no,max='**'),
607            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
608            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
609            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
610            REPERE          =SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
611            AMOR_HYST       =SIMP(statut='f',typ='R' ),
612            CARA            =SIMP(statut='o',typ='TXM',max='**',
613                                  into=("K_T_D_N","K_T_D_L","K_TR_D_N","K_TR_D_L",
614                                                            "K_T_N",  "K_T_L",  "K_TR_N",  "K_TR_L",
615                                                                 "M_T_D_N","M_TR_D_N","M_T_N",
616                                                            "M_T_L",  "M_TR_N",  "M_TR_L",
617                                        "A_T_D_N","A_TR_D_N","A_T_D_L","A_TR_D_L",
618                                                            "A_T_N",  "A_T_L",   "A_TR_N", "A_TR_L") ),
619            VALE            =SIMP(statut='o',typ='R',max='**'),
620          ),
621
622          ORIENTATION     =FACT(statut='f',min=01,max='**',
623            regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO' ),),
624            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
625            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
626            NOEUD           =SIMP(statut='f',typ=no,max='**'),
627            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
628            CARA            =SIMP(statut='o',typ='TXM',
629                                  into=("VECT_Y","ANGL_VRIL","VECT_X_Y","ANGL_NAUT","GENE_TUYAU") ),
630            VALE            =SIMP(statut='o',typ='R',max='**'),
631            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-4 ),
632            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
633          ),
634
635          DEFI_ARC        =FACT(statut='f',min=01,max='**',
636            regles=(UN_PARMI('MAILLE','GROUP_MA'),
637                    UN_PARMI('ORIE_ARC','CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE',
638                             'POIN_TANG','NOEUD_POIN_TANG','GROUP_NO_POIN_TG'),
639                    PRESENT_PRESENT('ORIE_ARC','RAYON'),
640                    EXCLUS('COEF_FLEX','COEF_FLEX_XY'),
641                    EXCLUS('COEF_FLEX','COEF_FLEX_XZ'),
642                    EXCLUS('INDI_SIGM','INDI_SIGM_XY'),
643                    EXCLUS('INDI_SIGM','INDI_SIGM_XZ'),
644                    PRESENT_PRESENT('COEF_FLEX_XY','COEF_FLEX_XZ'),
645                    PRESENT_PRESENT('INDI_SIGM_XY','INDI_SIGM_XZ'),),
646            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
647            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
648            ORIE_ARC        =SIMP(statut='f',typ='R'),
649            CENTRE          =SIMP(statut='f',typ='R',max='**'),
650            NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=1),
651            GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,max=1),
652            POIN_TANG       =SIMP(statut='f',typ='R',max='**'),
653            NOEUD_POIN_TANG =SIMP(statut='f',typ=no,max=1),
654            GROUP_NO_POIN_TG=SIMP(statut='f',typ=grno,max=1),
655            RAYON           =SIMP(statut='f',typ='R'),
656            COEF_FLEX       =SIMP(statut='f',typ='R'),
657            INDI_SIGM       =SIMP(statut='f',typ='R'),
658            COEF_FLEX_XY    =SIMP(statut='f',typ='R'),
659            INDI_SIGM_XY    =SIMP(statut='f',typ='R'),
660            COEF_FLEX_XZ    =SIMP(statut='f',typ='R'),
661            INDI_SIGM_XZ    =SIMP(statut='f',typ='R'),
662            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
663            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
664          ),
665
666          MASSIF          =FACT(statut='f',min=01,max='**',
667            regles=(UN_PARMI('MAILLE','GROUP_MA'),
668                    UN_PARMI('ANGL_REP','ANGL_AXE'),
669                    EXCLUS('ANGL_REP','ANGL_AXE'),
670                    EXCLUS('ANGL_REP','ORIG_AXE'),
671                    PRESENT_PRESENT('ANGL_AXE','ORIG_AXE'), ),
672            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
673            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
674            ANGL_REP        =SIMP(statut='f',typ='R',max=3),
675            ANGL_AXE        =SIMP(statut='f',typ='R',max=2),
676            ORIG_AXE        =SIMP(statut='f',typ='R',max=3),
677          ),
678          POUTRE_FLUI     =FACT(statut='f',min=01,max='**',
679            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
680            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
681            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
682            B_T             =SIMP(statut='o',typ='R'),
683            B_N             =SIMP(statut='o',typ='R'),
684            B_TN            =SIMP(statut='o',typ='R',defaut= 0.E+0 ),
685            A_FLUI          =SIMP(statut='o',typ='R'),
686            A_CELL          =SIMP(statut='o',typ='R'),
687            COEF_ECHELLE    =SIMP(statut='o',typ='R'),
688          ),
689
690          GRILLE          =FACT(statut='f',min=01,max='**',
691            regles=(UN_PARMI('MAILLE','GROUP_MA'),
692                    EXCLUS('ANGL_REP','ORIG_AXE'),
693                    EXCLUS('EXCENTREMENT','DIST_N'),
694                    ENSEMBLE('ORIG_AXE','AXE')),
695            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
696            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
697            SECTION_L       =SIMP(statut='o',typ='R'),
698            ANGL_REP        =SIMP(statut='f',typ='R',max=2),
699            ANGL_L          =SIMP(statut='f',typ='R'),
700            POUR_CENT_L     =SIMP(statut='f',typ='R'),
701            POUR_CENT_T     =SIMP(statut='f',typ='R'),
702            DIST_N          =SIMP(statut='f',typ='R'),
703            EXCENTREMENT    =SIMP(statut='f',typ='R'),
704            ORIG_AXE        =SIMP(statut='f',typ='R',max='**'),
705            AXE             =SIMP(statut='f',typ='R',max='**'),
706            COEF_RIGI_DRZ   =SIMP(statut='f',typ='R',defaut= 1.0E-10 ),
707            GRILLE_NCOU     =SIMP(statut='f',typ='I',defaut= 1,min=1,max=1 ),
708          ),
709
710          RIGI_PARASOL    =FACT(statut='f',min=01,max='**',
711            regles=(UN_PARMI('COEF_GROUP','FONC_GROUP'),
712                    UN_PARMI('COOR_CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),),
713            GROUP_MA        =SIMP(statut='o',typ=ma,max='**'),
714            FONC_GROUP      =SIMP(statut='f',typ=(fonction) ),
715            COEF_GROUP      =SIMP(statut='f',typ='R',max='**'),
716            REPERE          =SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
717            CARA            =SIMP(statut='o',typ='TXM',max='**',into=("K_TR_D_N","A_TR_D_N") ),
718            VALE            =SIMP(statut='o',typ='R',max='**'),
719            GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
720            NOEUD_CENTRE    =SIMP(statut='f',typ=no),
721            COOR_CENTRE     =SIMP(statut='f',typ='R',max='**'),
722          ),
723          ASSE_GRIL       =FACT(statut='f',min=01,max='**',
724            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
725            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
726            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
727            CARA            =SIMP(statut='o',typ='TXM',max='**',
728                                  into=("K_TR_D_N","K_TR_D_L_T","K_TR_D_L_N",) ),
729            VALE            =SIMP(statut='o',typ='R',max='**'),
730            PAS_T           =SIMP(statut='o',typ='R'),
731            PAS_N           =SIMP(statut='o',typ='R'),
732            ANGL_REP        =SIMP(statut='o',typ='R',max='**'),
733            COEF_ECHELLE    =SIMP(statut='o',typ='R'),
734          ),
735
736
737          AFFE_SECT     =FACT(statut='f',min=1,max='**',
738               regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
739                       AU_MOINS_UN('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),
740                       PRESENT_ABSENT('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),),
741
742               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
743               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
744
745               TOUT_SECT         =SIMP(statut='f',typ='TXM',into=("OUI",) ),
746               GROUP_MA_SECT     =SIMP(statut='f',typ=grma,max='**'),
747               MAILLE_SECT       =SIMP(statut='f',typ=ma,max='**'),
748
749               MAILLAGE_SECT     =SIMP(statut='o',typ=maillage),
750               COOR_AXE_POUTRE    =SIMP(statut='o',typ='R',min=2,max=2),
751          ),
752
753
754          AFFE_FIBRE     =FACT(statut='f',min=1,max='**',
755               regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
756
757               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
758               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
759
760               CARA              =SIMP(statut='f',typ='TXM',defaut='SURFACE',into=('SURFACE','DIAMETRE',)),
761               VALE              =SIMP(statut='o',typ='R',max='**'),
762               COOR_AXE_POUTRE    =SIMP(statut='o',typ='R',min=2,max=2),
763          ),
764
765
766 ) ;
767
768 AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
769                     ,fr="Affectation de charges et conditions aux limites mécaniques constantes",
770                      docu="U4.44.01-f1",reentrant='n',
771          regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','LIAISON_DDL','FORCE_NODALE',
772                              'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',
773                              'PRES_REP','FORCE_POUTRE','FORCE_COQUE','LIAISON_OBLIQUE',
774                              'FORCE_ELEC','INTE_ELEC','PESANTEUR','ROTATION','IMPE_FACE',
775                              'VITE_FACE','TEMP_CALCULEE','RELA_CINE_BP','EPSI_INIT','CONTACT',
776                              'LIAISON_UNIL_NO','LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP',
777                              'LIAISON_SOLIDE','LIAISON_ELEM','ONDE_FLUI','PRES_CALCULEE',
778                              'EPSA_CALCULEE','LIAISON_CHAMNO','VECT_ASSE','LIAISON_COQUE',
779                              'LIAISON_MAIL','FORCE_TUYAU','SECH_CALCULEE','HYDR_CALCULEE',
780                              'EFFE_FOND','EVOL_CHAR','ARLEQUIN'),
781                  EXCLUS('PRES_CALCULEE','EVOL_CHAR'),
782                  EXCLUS('LIAISON_UNIL_NO','CONTACT'),),
783
784          MODELE          =SIMP(statut='o',typ=(modele) ),
785          VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
786          VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
787 #    A TERME PRES_CALCULEE N'EXISTERA PLUS
788          EVOL_CHAR       =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
789                                typ=evol_char ),
790          PRES_CALCULEE   =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
791                                typ=evol_char ),
792          TEMP_CALCULEE   =SIMP(statut='f',fr="Champ de température issu d'un autre calcul",
793                                typ=(evol_ther,cham_no_temp_r,carte_temp_r,carte_temp_f ) ),
794          HYDR_CALCULEE   =SIMP(statut='f',fr="Champ d hydratation issu d'un autre calcul",
795                                typ=evol_ther ),
796          SECH_CALCULEE   =SIMP(statut='f',fr="Champ de séchage issu d'un autre calcul",
797                                typ=(evol_ther,cham_no_temp_r,carte_temp_r,carte_temp_f ) ),
798          EPSA_CALCULEE   =SIMP(statut='f',fr="Champ de déformation anélastique issu d'un autre calcul",
799                                typ=evol_noli ),
800          VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
801
802          ARLEQUIN        =FACT(statut='f',min=1,max='**',
803            GROUP_MA_1     =SIMP(statut='o',typ=grma,max='**'),
804            GROUP_MA_2     =SIMP(statut='o',typ=grma,max='**'),
805            GROUP_MA_COLL  =SIMP(statut='o',typ=grma,max='**'),
806            regles        =(UN_PARMI('POIDS_1','POIDS_2'),),
807            POIDS_1       =SIMP(statut='f',typ='R'),
808            POIDS_2       =SIMP(statut='f',typ='R'),
809          ),
810          CONTACT         =FACT(statut='f',fr="Imposer du contact avec ou sans frottement",min=1,max='**',
811            regles=(UN_PARMI('GROUP_MA_2','MAILLE_2'),),
812            APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
813                                  into=("NON","NODAL","NODAL_SYME","MAIT_ESCL","MAIT_ESCL_SYME")),
814            RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_VOISIN",into=("NOEUD_BOUCLE","NOEUD_VOISIN")),
815            LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
816            NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",into=("MAIT","MAIT_ESCL")),
817            METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
818                                  into=("CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE") ),
819            PROJECTION      =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE",) ),
820            GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
821            MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
822            GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
823            MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
824            b_active        =BLOC(condition = "METHODE == 'CONTRAINTE' ",
825                                  fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
826                 regles=(EXCLUS('DIST_2','COEF_IMPO'),
827                         EXCLUS('DIST_1','COEF_IMPO'),),
828                 NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP")),
829                 FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS",) ),
830                 REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
831                 SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
832                 SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
833                 COEF_IMPO       =SIMP(statut='f',typ='R'),
834                 COEF_MULT_2     =SIMP(statut='f',typ='R'),
835                 VECT_NORM_2     =SIMP(statut='f',typ='R',max=3),
836                 DIST_1          =SIMP(statut='f',typ='R'),
837                 DIST_2          =SIMP(statut='f',typ='R'),),
838            b_lagrangien    =BLOC(condition = "METHODE == 'LAGRANGIEN' ",
839                                  fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)",
840                 NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
841                 FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
842                 REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
843                 SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
844                 SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
845                 DIST_1          =SIMP(statut='f',typ='R'),
846                 DIST_2          =SIMP(statut='f',typ='R'),
847                 b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
848                      COULOMB         =SIMP(statut='o',typ='R',max=1),
849                      COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
850                      VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),),),
851            b_penalisation       =BLOC(condition = "METHODE == 'PENALISATION' ",
852                                       fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)",
853                 NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
854                 E_N             =SIMP(statut='f',typ='R'),
855                 FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
856                 REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
857                 SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
858                 SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
859                 DIST_1          =SIMP(statut='f',typ='R'),
860                 DIST_2          =SIMP(statut='f',typ='R'),
861                 b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
862                      COULOMB         =SIMP(statut='o',typ='R',max=1),
863                      E_T             =SIMP(statut='f',typ='R',
864                                            fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"),
865                      COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
866                      VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),),),
867            b_continue      =BLOC(condition = "METHODE == 'CONTINUE' ",
868                                  fr="Paramètres de la méthode continue (contact avec ou sans frottement)",
869                 NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
870                 FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
871                 INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD")),
872                 COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
873                 MODL_AXIS       =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
874                 ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=2),
875                 ITER_CONT_MAXI  =SIMP(statut='f',typ='I',defaut=30),
876                 b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
877                      COULOMB         =SIMP(statut='o',typ='R',max=1),
878                      ITER_FROT_MAXI  =SIMP(statut='f',typ='I',defaut=2),
879                      COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
880                      SEUIL_INIT      =SIMP(statut='f',typ='I',defaut=0),),),
881          ),
882
883         DDL_IMPO        =FACT(statut='f',min=1,max='**',
884              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
885                      AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
886                                  'TEMP','PRE1','PRE2','UI2','UI3','VI2','VI3','WI2','WI3','UO2',
887                                  'UO3','VO2','VO3','WO2','WO3','UI4','UI5','VI4','VI5','WI4',
888                                  'WI5','UO4','UO5','VO4','VO5','WO4','WO5','UI6','UO6','VI6',
889                                  'VO6','WI6','WO6','WO','WI1','WO1','GONF'),),
890              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
891              GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
892              NOEUD           =SIMP(statut='f',typ=no,max='**'),
893              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
894              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
895              DX              =SIMP(statut='f',typ='R' ),
896              DY              =SIMP(statut='f',typ='R' ),
897              DZ              =SIMP(statut='f',typ='R' ),
898              DRX             =SIMP(statut='f',typ='R' ),
899              DRY             =SIMP(statut='f',typ='R' ),
900              DRZ             =SIMP(statut='f',typ='R' ),
901              GRX             =SIMP(statut='f',typ='R' ),
902              PRES            =SIMP(statut='f',typ='R' ),
903              PHI             =SIMP(statut='f',typ='R' ),
904              TEMP            =SIMP(statut='f',typ='R' ),
905              PRE1            =SIMP(statut='f',typ='R' ),
906              PRE2            =SIMP(statut='f',typ='R' ),
907              UI2             =SIMP(statut='f',typ='R' ),
908              UI3             =SIMP(statut='f',typ='R' ),
909              UI4             =SIMP(statut='f',typ='R' ),
910              UI5             =SIMP(statut='f',typ='R' ),
911              UI6             =SIMP(statut='f',typ='R' ),
912              UO2             =SIMP(statut='f',typ='R' ),
913              UO3             =SIMP(statut='f',typ='R' ),
914              UO4             =SIMP(statut='f',typ='R' ),
915              UO5             =SIMP(statut='f',typ='R' ),
916              UO6             =SIMP(statut='f',typ='R' ),
917              VI2             =SIMP(statut='f',typ='R' ),
918              VI3             =SIMP(statut='f',typ='R' ),
919              VI4             =SIMP(statut='f',typ='R' ),
920              VI5             =SIMP(statut='f',typ='R' ),
921              VI6             =SIMP(statut='f',typ='R' ),
922              VO2             =SIMP(statut='f',typ='R' ),
923              VO3             =SIMP(statut='f',typ='R' ),
924              VO4             =SIMP(statut='f',typ='R' ),
925              VO5             =SIMP(statut='f',typ='R' ),
926              VO6             =SIMP(statut='f',typ='R' ),
927              WI2             =SIMP(statut='f',typ='R' ),
928              WI3             =SIMP(statut='f',typ='R' ),
929              WI4             =SIMP(statut='f',typ='R' ),
930              WI5             =SIMP(statut='f',typ='R' ),
931              WI6             =SIMP(statut='f',typ='R' ),
932              WO2             =SIMP(statut='f',typ='R' ),
933              WO3             =SIMP(statut='f',typ='R' ),
934              WO4             =SIMP(statut='f',typ='R' ),
935              WO5             =SIMP(statut='f',typ='R' ),
936              WO6             =SIMP(statut='f',typ='R' ),
937              WO              =SIMP(statut='f',typ='R' ),
938              WI1             =SIMP(statut='f',typ='R' ),
939              WO1             =SIMP(statut='f',typ='R' ),
940              GONF            =SIMP(statut='f',typ='R' ),
941            ),
942
943          EFFE_FOND       =FACT(statut='f',fr="Imposer un effet de fond",min=1,max='**',
944            regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
945            GROUP_MA_INT    =SIMP(statut='o',typ=grma,max='**'),
946            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
947            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
948            PRES            =SIMP(statut='o',typ='R' ),
949          ),
950
951          EPSI_INIT       =FACT(statut='f',fr="Appliquer un chargement de déformation initiale à un volume 3D ou 2D",
952                                  min=1,max='**',
953              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
954                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
955                      AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ','EPX',
956                                  'KY','KZ','EXX','EYY','EXY','KXX','KYY','KXY'),),
957              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
958              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
959              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
960              EPXX            =SIMP(statut='f',typ='R' ),
961              EPYY            =SIMP(statut='f',typ='R' ),
962              EPZZ            =SIMP(statut='f',typ='R' ),
963              EPXY            =SIMP(statut='f',typ='R' ),
964              EPXZ            =SIMP(statut='f',typ='R' ),
965              EPYZ            =SIMP(statut='f',typ='R' ),
966              EPX             =SIMP(statut='f',typ='R' ),
967              KY              =SIMP(statut='f',typ='R' ),
968              KZ              =SIMP(statut='f',typ='R' ),
969              EXX             =SIMP(statut='f',typ='R' ),
970              EYY             =SIMP(statut='f',typ='R' ),
971              EXY             =SIMP(statut='f',typ='R' ),
972              KXX             =SIMP(statut='f',typ='R' ),
973              KYY             =SIMP(statut='f',typ='R' ),
974              KXY             =SIMP(statut='f',typ='R' ),
975            ),
976
977            FACE_IMPO       =FACT(statut='f',min=1,max='**',
978              regles=(UN_PARMI('GROUP_MA','MAILLE',),
979                      AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
980                                  'TEMP','PRE1','PRE2','DNOR','DTAN'),
981                      EXCLUS('DNOR','DX'),
982                      EXCLUS('DNOR','DY'),
983                      EXCLUS('DNOR','DZ'),
984                      EXCLUS('DNOR','DRX'),
985                      EXCLUS('DNOR','DRY'),
986                      EXCLUS('DNOR','DRZ'),
987                      EXCLUS('DTAN','DX'),
988                      EXCLUS('DTAN','DY'),
989                      EXCLUS('DTAN','DZ'),
990                      EXCLUS('DTAN','DRX'),
991                      EXCLUS('DTAN','DRY'),
992                      EXCLUS('DTAN','DRZ'),),
993 #  rajout d'un mot clé REPERE :/ LOCAL /GLOBAL
994              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
995              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
996              DX              =SIMP(statut='f',typ='R' ),
997              DY              =SIMP(statut='f',typ='R' ),
998              DZ              =SIMP(statut='f',typ='R' ),
999              DRX             =SIMP(statut='f',typ='R' ),
1000              DRY             =SIMP(statut='f',typ='R' ),
1001              DRZ             =SIMP(statut='f',typ='R' ),
1002              DNOR            =SIMP(statut='f',typ='R' ),
1003              DTAN            =SIMP(statut='f',typ='R' ),
1004              GRX             =SIMP(statut='f',typ='R' ),
1005              PRES            =SIMP(statut='f',typ='R' ),
1006              PHI             =SIMP(statut='f',typ='R' ),
1007              TEMP            =SIMP(statut='f',typ='R' ),
1008              PRE1            =SIMP(statut='f',typ='R' ),
1009              PRE2            =SIMP(statut='f',typ='R' ),
1010            ),
1011          FLUX_THM_REP    =FACT(statut='f',min=1,max='**',
1012              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
1013                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
1014                      AU_MOINS_UN('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
1015              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
1016              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1017              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1018              FLUN            =SIMP(statut='f',typ='R' ),
1019              FLUN_HYDR1      =SIMP(statut='f',typ='R' ),
1020              FLUN_HYDR2      =SIMP(statut='f',typ='R' ),
1021            ),
1022
1023          FORCE_ARETE     =FACT(statut='f',fr="Appliquer des forces linéiques à une arete d élément volumique ou de coque",
1024                                  min=1,max='**',
1025              regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),
1026                      AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
1027              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1028              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1029              FX              =SIMP(statut='f',typ='R' ),
1030              FY              =SIMP(statut='f',typ='R' ),
1031              FZ              =SIMP(statut='f',typ='R' ),
1032              MX              =SIMP(statut='f',typ='R' ),
1033              MY              =SIMP(statut='f',typ='R' ),
1034              MZ              =SIMP(statut='f',typ='R' ),
1035            ),
1036
1037            FORCE_COQUE     =FACT(statut='f',fr="Appliquer des forces surfaciques sur des coques",min=1,max='**',
1038              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
1039                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
1040                      AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),
1041                      PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
1042                      PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
1043                      PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
1044                      PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
1045                      PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
1046                      PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
1047                      PRESENT_ABSENT('F1','FX','FY','FZ','MX','MY','MZ','PRES'),
1048                      PRESENT_ABSENT('F2','FX','FY','FZ','MX','MY','MZ','PRES'),
1049                      PRESENT_ABSENT('F3','FX','FY','FZ','MX','MY','MZ','PRES'),
1050                      PRESENT_ABSENT('MF1','FX','FY','FZ','MX','MY','MZ','PRES'),
1051                      PRESENT_ABSENT('MF2','FX','FY','FZ','MX','MY','MZ','PRES'),
1052                      PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
1053 #  rajour d'un mot clé REPERE :/ LOCAL /GLOBAL
1054              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
1055              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1056              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1057
1058                FX              =SIMP(statut='f',typ='R' ),
1059                FY              =SIMP(statut='f',typ='R' ),
1060                FZ              =SIMP(statut='f',typ='R' ),
1061                MX              =SIMP(statut='f',typ='R' ),
1062                MY              =SIMP(statut='f',typ='R' ),
1063                MZ              =SIMP(statut='f',typ='R' ),
1064
1065                F1              =SIMP(statut='f',typ='R' ),
1066                F2              =SIMP(statut='f',typ='R' ),
1067                F3              =SIMP(statut='f',typ='R' ),
1068                MF1             =SIMP(statut='f',typ='R' ),
1069                MF2             =SIMP(statut='f',typ='R' ),
1070
1071              PRES            =SIMP(statut='f',typ='R' ),
1072              PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL",) ),
1073            ),
1074
1075          FORCE_CONTOUR   =FACT(statut='f',fr="Appliquer des forces linéiques au bord d'un domaine 2D ou AXIS_FOURIER",
1076                                  min=1,max='**',
1077              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
1078                      AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
1079              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1080              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1081              FX              =SIMP(statut='f',typ='R' ),
1082              FY              =SIMP(statut='f',typ='R' ),
1083              FZ              =SIMP(statut='f',typ='R' ),
1084              MX              =SIMP(statut='f',typ='R' ),
1085              MY              =SIMP(statut='f',typ='R' ),
1086              MZ              =SIMP(statut='f',typ='R' ),
1087            ),
1088          FORCE_ELEC      =FACT(statut='f',
1089                                  fr="Force de Laplace due à la présence d'un conducteur rectiligne secondaire non maillé",
1090                                  min=1,max='**',
1091              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
1092                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
1093                      AU_MOINS_UN('FX','FY','FZ','POSITION'),
1094                      EXCLUS('FX','POSITION'),
1095                      EXCLUS('FY','POSITION'),
1096                      EXCLUS('FZ','POSITION'),),
1097 #  trop de regles : les blocs conditionnels permettent d en suprimer
1098              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
1099              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1100              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1101
1102              FX              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
1103              FY              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
1104              FZ              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
1105
1106              POSITION        =SIMP(statut='f',typ='TXM',fr="Direction prédéfinie",into=("PARA","INFI","FINI",) ),
1107              b_para     =BLOC ( condition = "POSITION == 'PARA'",
1108                regles=(UN_PARMI('TRANS','DIST'),),
1109                TRANS           =SIMP(statut='f',typ='R',max=3),
1110                DIST            =SIMP(statut='f',typ='R' ),
1111                b_point2        =BLOC ( condition = "DIST != None",
1112                  POINT2           =SIMP(statut='o',typ='R',max=3),
1113                ),
1114              ),
1115              b_fini_infi     =BLOC ( condition = "(POSITION == 'FINI') or (POSITION == 'INFI')",
1116                POINT1          =SIMP(statut='o',typ='R',max=3),
1117                POINT2          =SIMP(statut='o',typ='R',max=3),
1118              ),
1119            ),
1120
1121          FORCE_FACE      =FACT(statut='f',fr="Appliquer des forces surfaciques sur une face d'éléments volumiques",
1122                                  min=1,max='**',
1123              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
1124                      AU_MOINS_UN('FX','FY','FZ'),),
1125              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1126              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1127              FX              =SIMP(statut='f',typ='R' ),
1128              FY              =SIMP(statut='f',typ='R' ),
1129              FZ              =SIMP(statut='f',typ='R' ),
1130            ),
1131          FORCE_INTERNE   =FACT(statut='f',fr="Appliquer des forces volumiques (2D ou 3D) à un domaine volumique",
1132                                  min=1,max='**',
1133              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
1134                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
1135                      AU_MOINS_UN('FX','FY','FZ' ),),
1136              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
1137              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1138              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1139              FX              =SIMP(statut='f',typ='R' ),
1140              FY              =SIMP(statut='f',typ='R' ),
1141              FZ              =SIMP(statut='f',typ='R' ),
1142            ),
1143
1144          IMPE_FACE       =FACT(statut='f',fr="Appliquer une impédance acoustique à une face",min=1,max='**',
1145              regles=(AU_MOINS_UN('GROUP_MA','MAILLE' ),),
1146              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1147              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1148              IMPE            =SIMP(statut='o',typ='R' ),
1149            ),
1150
1151          FORCE_NODALE    =FACT(statut='f',fr="Imposer des forces nodales en des noeuds",min=1,max='**',
1152            regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
1153                    AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
1154            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
1155            NOEUD           =SIMP(statut='f',typ=no,max='**'),
1156            FX              =SIMP(statut='f',typ='R' ),
1157            FY              =SIMP(statut='f',typ='R' ),
1158            FZ              =SIMP(statut='f',typ='R' ),
1159            MX              =SIMP(statut='f',typ='R' ),
1160            MY              =SIMP(statut='f',typ='R' ),
1161            MZ              =SIMP(statut='f',typ='R' ),
1162            ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
1163          ),
1164         FORCE_POUTRE    =FACT(statut='f',fr="Appliquer des forces linéiques sur des poutres",min=1,max='**',
1165              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
1166                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
1167                      AU_MOINS_UN('FX','FY','FZ','N','VY','VZ'),
1168                      PRESENT_ABSENT('FX','N','VY','VZ'),
1169                      PRESENT_ABSENT('FY','N','VY','VZ'),
1170                      PRESENT_ABSENT('FZ','N','VY','VZ'),
1171                      PRESENT_ABSENT('N','FX','FY','FZ'),
1172                      PRESENT_ABSENT('VY','FX','FY','FZ'),
1173                      PRESENT_ABSENT('VZ','FX','FY','FZ'),),
1174              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
1175              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1176              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1177              TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE",) ),
1178 #  rajour d'un mot clé REPERE :/ LOCAL /GLOBAL
1179                FX              =SIMP(statut='f',typ='R' ),
1180                FY              =SIMP(statut='f',typ='R' ),
1181                FZ              =SIMP(statut='f',typ='R' ),
1182
1183                N               =SIMP(statut='f',typ='R' ),
1184                VY              =SIMP(statut='f',typ='R' ),
1185                VZ              =SIMP(statut='f',typ='R' ),
1186
1187            ),
1188
1189          FORCE_TUYAU     =FACT(statut='f',fr="imposer une pression dans un élément TUYAU",min=1,max='**',
1190              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
1191                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
1192              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
1193              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1194              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1195              PRES            =SIMP(statut='f',typ='R' ),
1196            ),
1197
1198         INTE_ELEC       =FACT(statut='f',fr="Force de Laplace due à la présence d'un conducteur non rectiligne secondaire",
1199                                  min=1,max='**',
1200              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
1201                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
1202                      AU_MOINS_UN('GROUP_MA_2','MAILLE_2','TRANS','SYME'),
1203                      EXCLUS('TRANS','SYME'),),
1204              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
1205              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1206              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1207              GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
1208              MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
1209              TRANS           =SIMP(statut='f',typ='R',max='**'),
1210              SYME            =SIMP(statut='f',typ='R',max='**'),
1211            ),
1212
1213          LIAISON_CHAMNO  =FACT(statut='f',fr="définir une relation linéaire entre tous les ddls d'un concept cham_nno",
1214                                  min=1,max='**',
1215 #  type de cham_no CO()
1216              CHAM_NO         =SIMP(statut='o',typ=cham_no), #CO()
1217              COEF_IMPO       =SIMP(statut='o',typ='R' ),
1218              NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
1219            ),
1220
1221            LIAISON_COQUE   =FACT(statut='f',min=1,max='**',
1222              GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
1223              MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
1224              GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
1225              NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
1226              GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
1227              MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
1228              GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
1229              NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
1230              NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
1231            ),
1232            LIAISON_DDL     =FACT(statut='f',fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",
1233                                  min=1,max='**',
1234              regles=(UN_PARMI('GROUP_NO','NOEUD'),),
1235              GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
1236              NOEUD           =SIMP(statut='f',typ=no,max='**'),
1237              DDL             =SIMP(statut='o',typ='TXM',max='**'),
1238              COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
1239              COEF_IMPO       =SIMP(statut='o',typ='R' ),
1240            ),
1241            LIAISON_ELEM    =FACT(statut='f',fr="Raccorder une poutre à une partie massive 3D ou une coque", min=1,max='**',
1242              regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
1243                      UN_PARMI('GROUP_NO_2','NOEUD_2'),),
1244              OPTION          =SIMP(statut='o',typ='TXM',into=("3D_TUYAU","3D_POU","COQ_POU","COQ_TUYAU") ),
1245              GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
1246              MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
1247              GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
1248              NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
1249              NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
1250              CARA_ELEM       =SIMP(statut='f',typ=(cara_elem) ),
1251              AXE_POUTRE      =SIMP(statut='f',typ='R',max=3),
1252              ANGL_MAX        =SIMP(statut='f',typ='R',defaut= 1. ),
1253            ),
1254
1255            LIAISON_GROUP   =FACT(statut='f',fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
1256                                  min=1,max='**',
1257              regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
1258                      UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
1259                      EXCLUS('GROUP_MA_1','GROUP_NO_2'),
1260                      EXCLUS('GROUP_MA_1','NOEUD_2'),
1261                      EXCLUS('GROUP_NO_1','GROUP_MA_2'),
1262                      EXCLUS('GROUP_NO_1','MAILLE_2'),
1263                      EXCLUS('MAILLE_1','GROUP_NO_2'),
1264                      EXCLUS('MAILLE_1','NOEUD_2'),
1265                      EXCLUS('NOEUD_1','GROUP_MA_2'),
1266                      EXCLUS('NOEUD_1','MAILLE_2'),
1267                      EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
1268
1269                GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
1270                MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
1271                GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
1272                MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
1273                GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
1274                NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
1275                GROUP_NO_2      =SIMP(statut='f',typ=no,max='**'),
1276                NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
1277
1278              SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
1279              SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
1280              DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
1281              COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
1282              DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
1283              COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
1284              COEF_IMPO       =SIMP(statut='o',typ='R' ),
1285              SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
1286              TRAN            =SIMP(statut='f',typ='R',max=3),
1287              ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
1288              CENTRE          =SIMP(statut='f',typ='R',max=3),
1289            ),
1290
1291            LIAISON_OBLIQUE =FACT(statut='f',fr="Appliquer à des noeuds une valeur de déplacement dans un repere oblique",
1292                                  min=1,max='**',
1293              regles=(UN_PARMI('GROUP_NO','NOEUD'),
1294                      UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
1295              GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
1296              NOEUD           =SIMP(statut='f',typ=no,max='**'),
1297              ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
1298              DX              =SIMP(statut='f',typ='R' ),
1299              DY              =SIMP(statut='f',typ='R' ),
1300              DZ              =SIMP(statut='f',typ='R' ),
1301              DRX             =SIMP(statut='f',typ='R' ),
1302              DRY             =SIMP(statut='f',typ='R' ),
1303              DRZ             =SIMP(statut='f',typ='R' ),
1304            ),
1305
1306            LIAISON_SOLIDE  =FACT(statut='f',fr="Modéliser une partie indéformable d'une structure",min=1,max='**',
1307              regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
1308              GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
1309              NOEUD           =SIMP(statut='f',typ=no,max='**'),
1310              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1311              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1312              NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
1313            ),
1314
1315            LIAISON_UNIF    =FACT(statut='f',fr="Imposer une meme valeur (inconnue) à des ddls d'un emsemble de noeuds",
1316                                  min=1,max='**',
1317              regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
1318              GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
1319              NOEUD           =SIMP(statut='f',typ=no,max='**'),
1320              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1321              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1322              DDL             =SIMP(statut='o',typ='TXM',max='**'),
1323            ),
1324
1325          LIAISON_UNIL_NO =FACT(statut='f',min=1,max='**',
1326            regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
1327                    UN_PARMI('GROUP_MA_2','MAILLE_2'),),
1328            GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),# CO()
1329            MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),# CO()
1330            GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),# CO()
1331            MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),# CO()
1332            SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
1333            TRAN            =SIMP(statut='f',typ='R',max=3 ),
1334            ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),
1335            CENTRE          =SIMP(statut='f',typ='R',max=3 ),
1336            ANGLE_MAX       =SIMP(statut='f',typ='R' ),
1337            VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
1338            FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",
1339                                  into=("SANS","TRESCA","COULOMB") ),
1340            METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
1341                                  into=("CONTRAINTE","LAGRANGIEN","PENALISATION") ),
1342            COULOMB         =SIMP(statut='f',typ='R' ),
1343            TRESCA          =SIMP(statut='f',typ='R' ),
1344            E_T             =SIMP(statut='f',typ='R' ),
1345            COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
1346            CONTACT         =SIMP(statut='f',typ='TXM',into=("MAINTENU",) ),
1347            JEU             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
1348          ),
1349
1350            LIAISON_MAIL    =FACT(statut='f',min=1,max='**',
1351              regles=(AU_MOINS_UN('GROUP_MA_MAIT','MAILLE_MAIT'),
1352                      AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL'),
1353                      PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),),
1354               GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,max='**'),
1355               MAILLE_MAIT     =SIMP(statut='f',typ=ma,max='**'),
1356               GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,max='**'),
1357               MAILLE_ESCL     =SIMP(statut='f',typ=ma,max='**'),
1358               GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,max='**'),
1359               NOEUD_ESCL      =SIMP(statut='f',typ=no,max='**'),
1360               TRAN            =SIMP(statut='f',typ='R',max=3 ),
1361               ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),
1362               CENTRE          =SIMP(statut='f',typ='R',max=3 ),
1363               DDL_MAIT        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
1364               DDL_ESCL        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
1365          ),
1366
1367          ONDE_FLUI       =FACT(statut='f',fr="Appliquer une amplitude de pression d onde incidente",min=1,max='**',
1368              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
1369              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1370              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1371              PRES            =SIMP(statut='o',typ='R' ),
1372            ),
1373
1374          PRES_REP        =FACT(statut='f',fr="Appliquer une pression à un domaine de milieu continu 2D ou 3D",
1375                                  min=1,max='**',
1376              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
1377                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
1378                      AU_MOINS_UN('PRES','CISA_2D' ),),
1379              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
1380              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1381              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1382              PRES            =SIMP(statut='f',typ='R' ),
1383              CISA_2D         =SIMP(statut='f',typ='R' ),
1384            ),
1385
1386          PESANTEUR       =SIMP(statut='f',typ='R',fr="Champ de pesanteur",min=4,max=4),
1387
1388          RELA_CINE_BP    =FACT(statut='f',min=1,max='**',
1389            CABLE_BP        =SIMP(statut='o',typ=cabl_precont ),
1390            SIGM_BPEL       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
1391            RELA_CINE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
1392          ),
1393         ROTATION        =SIMP(statut='f',typ='R',fr="Champ de rotation",min=4,max=4),
1394          b_rotation      =BLOC ( condition = "ROTATION != None",
1395            CENTRE          =SIMP(statut='f',typ='R',defaut=(0.,0.,0.),max=3),),
1396
1397          VITE_FACE       =FACT(statut='f',fr="Imposer des vitesses acoustiquesnormales à une face",min=1,max='**',
1398              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
1399              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
1400              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
1401              VNOR            =SIMP(statut='o',typ='R' ),
1402            ),
1403          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
1404 )  ;
1405
1406 def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
1407                         SOLVEUR,NUME_DDL,CHARGE,INST,**args):
1408   """
1409      Ecriture de la macro MACRO_MATR_ASSE
1410   """
1411   ier=0
1412   # On met le mot cle NUME_DDL dans une variable locale pour le proteger
1413   numeddl=NUME_DDL
1414   # On importe les definitions des commandes a utiliser dans la macro
1415   # Le nom de la variable doit etre obligatoirement le nom de la commande
1416   CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM')
1417   NUME_DDL      =self.get_cmd('NUME_DDL')
1418   ASSE_MATRICE  =self.get_cmd('ASSE_MATRICE')
1419   # La macro compte pour 1 dans la numerotation des commandes
1420   self.icmd=1
1421
1422   if SOLVEUR:
1423     methode=SOLVEUR['METHODE']
1424     if methode=='LDLT':
1425       if SOLVEUR['RENUM']:
1426          renum=SOLVEUR['RENUM']
1427       else:
1428          renum='RCMK'
1429       if renum not in ('SANS','RCMK'):
1430         ier=ier+1
1431         self.cr.fatal("Avec methode LDLT, RENUM doit etre SANS ou RCMK.")
1432         return ier
1433     elif methode=='MULT_FRONT':
1434       if SOLVEUR['RENUM']:
1435          renum=SOLVEUR['RENUM']
1436       else:
1437          renum='MDA'
1438       if renum not in ('MDA','MD','METIS'):
1439         ier=ier+1
1440         self.cr.fatal("Avec methode MULT_FRONT, RENUM doit etre MDA, MD ou RCMK.")
1441         return ier
1442     elif methode=='GCPC':
1443       if SOLVEUR['RENUM']:
1444          renum=SOLVEUR['RENUM']
1445       else:
1446          renum='SANS'
1447       if renum not in ('SANS','RCMK'):
1448         ier=ier+1
1449         self.cr.fatal("Avec methode GCPC, RENUM doit etre SANS ou RCMK.")
1450         return ier
1451   else:
1452     methode='MULT_FRONT'
1453     renum  ='MDA'
1454
1455   if numeddl in self.sdprods:
1456     # Si le concept numeddl est dans self.sdprods
1457     # il doit etre  produit par la macro
1458     # il faudra donc appeler la commande NUME_DDL
1459     lnume = 1
1460   else:
1461     lnume = 0
1462   lrigel = 0
1463   lmasel = 0
1464
1465   iocc=0
1466   for m in MATR_ASSE:
1467     iocc=iocc+1
1468     option=m['OPTION']
1469     if iocc == 1 and lnume == 1 and option not in ('RIGI_MECA','RIGI_MECA_LAGR',
1470                                                    'RIGI_THER','RIGI_ACOU')      :
1471       ier=ier+1
1472       self.cr.fatal("LA PREMIERE OPTION DOIT ETRE RIGI_MECA OU RIGI_THER OU RIGI_ACOU OU RIGI_MECA_LAGR")
1473       return ier
1474
1475     if m['SIEF_ELGA']!=None and option!='RIGI_GEOM':
1476       ier=ier+1
1477       self.cr.fatal("SIEF_ELGA N EST ADMIS QU AVEC L OPTION RIGI_GEOM")
1478       return ier
1479
1480     if m['MODE_FOURIER']!=None and option not in ('RIGI_MECA','RIGI_FLUI_STRU','RIGI_THER'):
1481       ier=ier+1
1482       self.cr.fatal("MODE_FOURIER N EST ADMIS QU AVEC UNE DES OPTIONS RIGI_MECA RIGI_FLUI_STRU RIGI_THER")
1483       return ier
1484
1485     if (m['THETA']!=None or m['PROPAGATION']!=None) and option!='RIGI_MECA_LAGR':
1486       ier=ier+1
1487       self.cr.fatal("PROPAGATION ET,OU THETA NE SONT ADMIS QU AVEC L OPTION RIGI_MECA_LAGR")
1488       return ier
1489
1490     motscles={'OPTION':option}
1491     if option == 'AMOR_MECA':
1492        if (not lrigel or not lmasel):
1493           ier=ier+1
1494           self.cr.fatal("""POUR CALCULER AMOR_MECA, IL FAUT AVOIR CALCULE
1495                            RIGI_MECA ET MASS_MECA AUPARAVANT (DANS LE MEME APPEL)""")
1496           return ier
1497        if CHAM_MATER != None:
1498           motscles['RIGI_MECA']   =rigel
1499           motscles['MASS_MECA']   =masel
1500     if CHARGE     != None:
1501        if option[0:9] not in ('MASS_THER','RIGI_GEOM','MASS_ID_M'):
1502                            motscles['CHARGE']      =CHARGE
1503     if CHAM_MATER != None: motscles['CHAM_MATER']  =CHAM_MATER
1504     if CARA_ELEM  != None: motscles['CARA_ELEM']   =CARA_ELEM
1505     if INST       != None: motscles['INST']        =INST
1506     if m['SIEF_ELGA']   :  motscles['SIEF_ELGA']   =m['SIEF_ELGA']
1507     if m['MODE_FOURIER']:  motscles['MODE_FOURIER']=m['MODE_FOURIER']
1508     if m['THETA']       :  motscles['THETA']       =m['THETA']
1509     if m['PROPAGATION'] :  motscles['PROPAGATION'] =m['PROPAGATION']
1510
1511     __a=CALC_MATR_ELEM(MODELE=MODELE,**motscles)
1512
1513     if option == 'RIGI_MECA':
1514       rigel  = __a
1515       lrigel = 1
1516     if option == 'MASS_MECA':
1517       masel  = __a
1518       lmasel = 1
1519
1520     if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'):
1521       self.DeclareOut('num',numeddl)
1522       # On peut passer des mots cles egaux a None. Ils sont ignores
1523       num=NUME_DDL(MATR_RIGI=__a,METHODE=methode,RENUM=renum)
1524     else:
1525       num=numeddl
1526
1527     self.DeclareOut('mm',m['MATRICE'])
1528     mm=ASSE_MATRICE(MATR_ELEM=__a,NUME_DDL=num)
1529   return ier
1530
1531 def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args):
1532   if not MATR_ASSE:  raise AsException("Impossible de typer les concepts resultats")
1533   if not NUME_DDL:  raise AsException("Impossible de typer les concepts resultats")
1534   self.type_sdprod(NUME_DDL,nume_ddl)
1535   for m in MATR_ASSE:
1536     opti=m['OPTION']
1537
1538     if opti in ( "RIGI_MECA","RIGI_FLUI_STRU","RIGI_MECA_LAGR" ,
1539        "MASS_MECA" , "MASS_FLUI_STRU" ,"RIGI_GEOM" ,"RIGI_ROTA",
1540        "AMOR_MECA","IMPE_MECA","MASS_ID_MDEP_R","MASS_ID_MDNS_R",
1541        "ONDE_FLUI","MASS_MECA_DIAG" ) : t=matr_asse_depl_r
1542
1543     if opti in ( "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",) : t=matr_asse_pres_c
1544
1545     if opti in ( "RIGI_THER","MASS_THER","RIGI_THER_CONV" ,
1546        "RIGI_THER_CONV_D","MASS_ID_MTEM_R","MASS_ID_MTNS_R",) : t=matr_asse_temp_r
1547
1548     if opti == "RIGI_MECA_HYST"   : t= matr_asse_depl_c
1549
1550     self.type_sdprod(m['MATRICE'],t)
1551   return None
1552 MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,docu="U4.61.21-c",
1553                       sd_prod=macro_matr_asse_prod,
1554                       fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ",
1555          MODELE          =SIMP(statut='o',typ=modele),
1556          CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
1557          CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
1558          CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou)),
1559          INST            =SIMP(statut='f',typ='R'),
1560          NUME_DDL        =SIMP(statut='o',typ=(nume_ddl,CO)),
1561          SOLVEUR         =FACT(statut='d',min=01,max=01,
1562            METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",
1563                                  into=("LDLT","MULT_FRONT","GCPC")),
1564            RENUM           =SIMP(statut='f',typ='TXM',into=("SANS","RCMK","MD","MDA","METIS")),
1565          ),
1566          MATR_ASSE       =FACT(statut='o',min=01,max='**',
1567            MATRICE         =SIMP(statut='o',typ=(matr_asse,CO)),
1568            OPTION          =SIMP(statut='o',typ='TXM',
1569                                  into=("RIGI_MECA","MASS_MECA","MASS_MECA_DIAG",
1570                                        "AMOR_MECA","RIGI_MECA_HYST","IMPE_MECA",
1571                                        "ONDE_FLUI","RIGI_FLUI_STRU","MASS_FLUI_STRU",
1572                                        "RIGI_ROTA","RIGI_GEOM","RIGI_MECA_LAGR",
1573                                        "RIGI_THER","MASS_THER",
1574                                        "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",
1575                                        "MASS_ID_MTEM_R","MASS_ID_MTNS_R","MASS_ID_MDEP_R","MASS_ID_MDNS_R",)
1576                                  ),
1577            SIEF_ELGA       =SIMP(statut='f',typ=cham_elem_sief_r),
1578            MODE_FOURIER    =SIMP(statut='f',typ='I'),
1579            THETA           =SIMP(statut='f',typ=theta_geom),
1580            PROPAGATION     =SIMP(statut='f',typ='R'),
1581          ),
1582          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
1583          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
1584 )  ;
1585
1586 def mode_iter_simult_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
1587   if TYPE_RESU == "MODE_FLAMB" : return mode_flamb
1588   if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c
1589   if AsType(MATR_A) == matr_asse_depl_r : return mode_meca
1590   if AsType(MATR_A) == matr_asse_pres_r : return mode_acou
1591   if AsType(MATR_A) == matr_asse_gene_r : return mode_gene
1592   raise AsException("type de concept resultat non prevu")
1593
1594 MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_prod,
1595                       fr="Modes propres par itérations simultanées ; valeurs propres et modes propres réels ou complexes",
1596                       docu="U4.52.03-e",reentrant='n',
1597          MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
1598          MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
1599          MATR_C          =SIMP(statut='f',position='global',typ=matr_asse_depl_r ),
1600          METHODE         =SIMP(statut='f',position='global',typ='TXM',defaut="SORENSEN",
1601                                into=("TRI_DIAG","JACOBI","SORENSEN") ),
1602          TYPE_RESU       =SIMP(statut='f',position='global',typ='TXM',defaut="DYNAMIQUE",
1603                                into=("MODE_FLAMB","DYNAMIQUE"),
1604                                fr="Type d analyse" ),
1605          OPTION          =SIMP(statut='f',typ='TXM',defaut="SANS",into=("MODE_RIGIDE","SANS"),
1606                                fr="Calcul des modes de corps rigide, uniquement pour la méthode TRI_DIAG" ),
1607
1608          b_flamb         =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
1609            CALC_FREQ       =FACT(statut='d',min=0,max=1,
1610              OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
1611                                    fr="Choix de l option et par conséquent du shift du problème modal" ),
1612              b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
1613                NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
1614              ),
1615              b_centre      =BLOC(condition = "OPTION == 'CENTRE'",
1616                                  fr="Recherche des valeurs propres les plus proches d une valeur donnée",
1617                CHAR_CRIT       =SIMP(statut='o',typ='R',min=1,max=1,
1618                                      fr="Charge critique autour de laquelle on cherche les charges critiques propres"),
1619              ),
1620              b_bande       =BLOC(condition = "(OPTION == 'BANDE')",
1621                                  fr="Recherche des valeurs propres dans une bande donnée",
1622                CHAR_CRIT       =SIMP(statut='o',typ='R',min=2,max=2,
1623                                      fr="Valeur des deux charges critiques délimitant la bande de recherche"),
1624              ),
1625              APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG"),
1626                                    fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),
1627              regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
1628              DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
1629              COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
1630              b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
1631                PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
1632                NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
1633                PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
1634                NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ),
1635              ),
1636              b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
1637                PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
1638                NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
1639                PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
1640                NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
1641              ),
1642              b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
1643                PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),
1644                NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),
1645                PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
1646              ),
1647              NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
1648              NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
1649              PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
1650              SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
1651            ),
1652          ),
1653
1654          b_dynam        =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
1655            CALC_FREQ       =FACT(statut='d',min=0,max=1,
1656              OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
1657                                    fr="Choix de l option et par conséquent du shift du problème modal" ),
1658              b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
1659                NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
1660              ),
1661              b_centre       =BLOC(condition = "OPTION == 'CENTRE'",
1662                                   fr="Recherche des valeurs propres les plus proches d une valeur donnée",
1663                FREQ            =SIMP(statut='o',typ='R',min=1,max=1,
1664                                      fr="Fréquence autour de laquelle on cherche les fréquences propres"),
1665                AMOR_REDUIT     =SIMP(statut='f',typ='R',max=1,),
1666                NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
1667              ),
1668              b_bande         =BLOC(condition = "(OPTION == 'BANDE')",
1669                                    fr="Recherche des valeurs propres dans une bande donnée",
1670                FREQ            =SIMP(statut='o',typ='R',min=2,max=2,
1671                                      fr="Valeur des deux fréquences délimitant la bande de recherche"),
1672              ),
1673              APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG"),
1674                                    fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),
1675              regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
1676              DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
1677              COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
1678              b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
1679                PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
1680                NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
1681                PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
1682                NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ),
1683              ),
1684              b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
1685                PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
1686                NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
1687                PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
1688                NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
1689              ),
1690              b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
1691                PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),
1692                NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),
1693                PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
1694              ),
1695              NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
1696              NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
1697              PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
1698              SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
1699            ),
1700          ),
1701
1702          VERI_MODE       =FACT(statut='d',min=0,max=1,
1703            STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
1704            PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-3,val_min=0.E+0 ),
1705            SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0,
1706                                  fr="Valeur limite admise pour l ereur a posteriori des modes" ),
1707            STURM           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
1708          ),
1709          STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
1710          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
1711          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
1712 )  ;
1713
1714 def norm_mode_prod(MODE,**args ):
1715   if AsType(MODE) == mode_meca   : return mode_meca
1716   if AsType(MODE) == mode_meca_c : return mode_meca_c
1717   if AsType(MODE) == mode_flamb  : return mode_flamb
1718   raise AsException("type de concept resultat non prevu")
1719
1720 NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
1721                fr="Normalisation de modes propres",
1722                docu="U4.52.11-e",reentrant='f',
1723          regles=(UN_PARMI('NORME','NOEUD','AVEC_CMP','SANS_CMP'),),
1724          MODE       =SIMP(statut='o',typ=(mode_meca,mode_flamb) ),
1725          NORME      =SIMP(statut='f',typ='TXM',fr="Norme prédéfinie : masse généralisée, euclidienne,...",
1726                           into=("MASS_GENE","RIGI_GENE","EUCL","EUCL_TRAN","TRAN","TRAN_ROTA") ),
1727          NOEUD      =SIMP(statut='f',typ=no, fr="Composante donnée d un noeud spécifié égale à 1"),
1728          b_noeud    =BLOC(condition = "NOEUD != None",
1729            NOM_CMP    =SIMP(statut='o',typ='TXM' ),
1730          ),
1731          AVEC_CMP   =SIMP(statut='f',typ='TXM',max='**'),
1732          SANS_CMP   =SIMP(statut='f',typ='TXM',max='**'),
1733          MASS_INER  =SIMP(statut='f',typ=tabl_mass_iner ),
1734          MODE_SIGNE =FACT(statut='f',min=00,max=01,fr="Imposer un signe sur une des composantes des modes",
1735            NOEUD      =SIMP(statut='o',typ=no,fr="Noeud ou sera imposé le signe"),
1736            NOM_CMP    =SIMP(statut='o',typ='TXM',fr="Composante du noeud ou sera imposé le signe" ),
1737            SIGNE      =SIMP(statut='f',typ='TXM',defaut="POSITIF",into=("NEGATIF","POSITIF"),
1738                             fr="Choix du signe" ),
1739          ),
1740          TITRE      =SIMP(statut='f',typ='TXM',max='**'),
1741          INFO       =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
1742 )  ;
1743
1744 def mode_stat_prod(MODE_STAT,FORCE_NODALE,PSEUDO_MODE,**args):
1745  if (MODE_STAT != None)          : return mode_stat_depl
1746  if (PSEUDO_MODE !=None)         : return mode_stat_acce
1747  if (FORCE_NODALE != None)       : return mode_stat_forc
1748  raise AsException("type de concept resultat non prevu")
1749 MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_stat_prod,
1750                    fr="Calcul de modes statiques",
1751                    docu="U4.52.14-e",reentrant='n',
1752          MATR_RIGI       =SIMP(statut='o',typ=matr_asse_depl_r ),
1753          MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
1754                regles=(UN_PARMI('MODE_STAT','FORCE_NODALE','PSEUDO_MODE'),),
1755          MODE_STAT       =FACT(statut='f',min=01,max='**',
1756            regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
1757                    UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
1758            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ,),
1759            NOEUD           =SIMP(statut='f',typ=no,max='**'),
1760            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
1761            TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ,),
1762            AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
1763            SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
1764          ),
1765          FORCE_NODALE    =FACT(statut='f',min=01,max='**',
1766            regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
1767                    UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
1768            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",), ),
1769            NOEUD           =SIMP(statut='f',typ=no,max='**'),
1770            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
1771            TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",), ),
1772            AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
1773            SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
1774          ),
1775          PSEUDO_MODE       =FACT(statut='f',min=01,max='**',
1776            regles=(UN_PARMI('AXE','DIRECTION','TOUT','NOEUD','GROUP_NO' ),),
1777            AXE             =SIMP(statut='f',typ='TXM',into=("X","Y","Z"),max=3),
1778            DIRECTION       =SIMP(statut='f',typ='R',min=3,max=3),
1779            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
1780            NOEUD           =SIMP(statut='f',typ=no,max='**'),
1781            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
1782            b_dir           =BLOC(condition = "DIRECTION != None",
1783              NOM_DIR         =SIMP(statut='f',typ='TXM' ),),
1784            b_cmp          =BLOC(condition="TOUT!= None or NOEUD!=None or GROUP_NO!=None",
1785              regles=(UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
1786              TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
1787              AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
1788              SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
1789         ),
1790          ),
1791          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
1792          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
1793 )  ;
1794
1795 DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8,
1796                     fr="Définition d une suite croissante de réels",
1797                     docu="U4.34.01-f",reentrant='n',
1798          regles=(UN_PARMI('VALE','DEBUT',),
1799                  EXCLUS('VALE','INTERVALLE'),
1800                  ENSEMBLE('DEBUT','INTERVALLE')),
1801          VALE            =SIMP(statut='f',typ='R',max='**'),
1802          DEBUT           =SIMP(statut='f',typ='R'),
1803          INTERVALLE      =FACT(statut='f',min=01,max='**',
1804            regles=(UN_PARMI('NOMBRE','PAS'),),
1805            JUSQU_A         =SIMP(statut='o',typ='R'),
1806            NOMBRE          =SIMP(statut='f',typ='I'),
1807            PAS             =SIMP(statut='f',typ='R'),
1808          ),
1809          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
1810          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
1811 )  ;
1812
1813 def defi_valeur_prod(self,IS=None,R8=None,TX=None,C8=None,LS=None):
1814   if IS != None  : return entier
1815   if R8 != None  : return reel
1816   if TX != None  : return chaine
1817   if C8 != None  : return complexe
1818   if LS != None  : return liste
1819   raise AsException("type de concept resultat non prevu")
1820
1821 DEFI_VALEUR=MACRO(nom="DEFI_VALEUR",op=-4,sd_prod=defi_valeur_prod,
1822                  fr="Affectation d une valeur à une variable Superviseur",
1823                  docu="U4.31.04-e1",reentrant='f',
1824          regles=(UN_PARMI('IS','R8','TX','C8','LS'),),
1825          IS              =SIMP(statut='f',typ='I',max='**'),
1826          R8              =SIMP(statut='f',typ='R',max='**'),
1827          TX              =SIMP(statut='f',typ='TXM',max='**'),
1828          C8              =SIMP(statut='f',typ='C',max='**'),
1829          LS              =SIMP(statut='f',typ='L',max='**'),
1830 )  ;
1831
1832 FORMULE = FORM( nom='FORMULE',op=-5,sd_prod=fonction,
1833                 fr="Définition d une fonction",reentrant = 'n',
1834                 regles=(UN_PARMI('REEL','ENTIER','COMPLEXE'),),
1835                 REEL = SIMP(typ = 'shell',max=1),
1836                 ENTIER = SIMP(typ = 'shell',max=1),
1837                 COMPLEXE = SIMP(typ = 'shell',max=1),
1838 ) ;
1839
1840 CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=fonction,
1841                       docu="U4.32.01-d1",reentrant='f',
1842          regles=(UN_PARMI('VALE_R','LIST_PARA'),),
1843          FONCTION        =SIMP(statut='o',typ=fonction ),
1844          NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
1845          VALE_R          =SIMP(statut='f',typ='R',max='**'),
1846          LIST_PARA       =SIMP(statut='f',typ=listr8 ),
1847          INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG","INT") ),
1848          PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("EXCLU","CONSTANT","LINEAIRE","INTERPRE") ),
1849          PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("EXCLU","CONSTANT","LINEAIRE","INTERPRE") ),
1850          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
1851          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
1852 )  ;
1853
1854 def INCLUDE_prod(self,UNITE,**args):
1855   """ Fonction sd_prod pour la macro include
1856   """
1857   # Si unite a change on reevalue le fichier associe
1858   if not hasattr(self,'unite') or self.unite != UNITE:
1859     f,text=self.get_file(unite=UNITE)
1860     self.unite=UNITE
1861     self.fichier_init = f
1862     # on execute le texte fourni dans le contexte forme par
1863     # le contexte de l etape pere (global au sens Python)
1864     # et le contexte de l etape (local au sens Python)
1865     code=compile(text,f,'exec')
1866     if self.jdc and self.jdc.par_lot == 'NON':
1867       # On est en mode commande par commande
1868       # On teste la validite de la commande avec interruption eventuelle
1869       cr=self.report()
1870       self.parent.cr.add(cr)
1871       if not cr.estvide():
1872         raise EOFError
1873     d={}
1874     self.g_context = d
1875     self.contexte_fichier_init = d
1876     exec code in self.parent.g_context,d
1877
1878 def INCLUDE_context(self,d):
1879   """ Fonction op_init pour macro INCLUDE
1880   """
1881   for k,v in self.g_context.items():
1882     d[k]=v
1883
1884 INCLUDE=MACRO(nom="INCLUDE",op=-1,docu="U4.13.01-e",
1885              fr="Débranchement vers un fichier de commandes secondaires",
1886              #fichier_ini=1,
1887              sd_prod=INCLUDE_prod,
1888              op_init=INCLUDE_context,
1889          UNITE = SIMP(statut='o',typ='I'),
1890          INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
1891 );
1892
1893 def calc_char_seisme_prod(MATR_MASS,**args ):
1894   if AsType(MATR_MASS) == matr_asse_depl_r : return cham_no_depl_r
1895   raise AsException("type de concept resultat non prevu")
1896
1897 CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op=  92,sd_prod=calc_char_seisme_prod,
1898                       docu="U4.63.01-e",reentrant='n',
1899          regles=(UN_PARMI('MONO_APPUI','MODE_STAT' ),),
1900          MATR_MASS       =SIMP(statut='o',typ=matr_asse_depl_r,fr="Matrice de masse" ),
1901          DIRECTION       =SIMP(statut='o',typ='R',max=06,fr="Directions du séisme imposé"),
1902          MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
1903          MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,) ),
1904          b_mode_stat     =BLOC ( condition = "MODE_STAT != None",
1905            regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
1906            NOEUD           =SIMP(statut='f',typ=no,max='**'),
1907            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
1908          ),
1909          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
1910 )  ;
1911
1912 def macro_proj_base_ops(self,BASE,NB_VECT,MATR_ASSE_GENE,VECT_ASSE_GENE,**args):
1913   """
1914      Ecriture de la macro MACRO_PROJ_BASE
1915   """
1916   ier=0
1917   # On importe les definitions des commandes a utiliser dans la macro
1918   NUME_DDL_GENE  =self.get_cmd('NUME_DDL_GENE')
1919   PROJ_MATR_BASE =self.get_cmd('PROJ_MATR_BASE')
1920   PROJ_VECT_BASE =self.get_cmd('PROJ_VECT_BASE')
1921   # La macro compte pour 1 dans la numerotation des commandes
1922   self.icmd=1
1923
1924   nompro=None
1925   iocc=0
1926   if MATR_ASSE_GENE:
1927     for m in MATR_ASSE_GENE:
1928       iocc=iocc+1
1929       if (iocc==1 or (m['PROFIL']!=nompro)):
1930          __num=NUME_DDL_GENE(BASE=BASE,NB_VECT=NB_VECT,STOCKAGE=m['PROFIL'])
1931       nompro=m['PROFIL']
1932       motscles={}
1933       if   m['MATR_ASSE']     :  motscles['MATR_ASSE']     =m['MATR_ASSE']
1934       elif m['MATR_ASSE_GENE']:  motscles['MATR_ASSE_GENE']=m['MATR_ASSE_GENE']
1935       else:
1936           ier=ier+1
1937           self.cr.fatal("MATR_ASSE et MATR_ASSE_GENE absents")
1938           return ier
1939       self.DeclareOut('mm',m['MATRICE'])
1940       mm=PROJ_MATR_BASE(BASE=BASE,NUME_DDL_GENE=__num,NB_VECT=NB_VECT,**motscles)
1941
1942   iocc=0
1943   if VECT_ASSE_GENE:
1944     for v in VECT_ASSE_GENE:
1945       iocc=iocc+1
1946       if (iocc==1 and not MATR_ASSE_GENE):
1947          __num=NUME_DDL_GENE(BASE=BASE,NB_VECT=NB_VECT,STOCKAGE='DIAG')
1948       motscles={}
1949       if   v['VECT_ASSE']     :  motscles['VECT_ASSE']     =v['VECT_ASSE']
1950       elif v['VECT_ASSE_GENE']:  motscles['VECT_ASSE_GENE']=v['VECT_ASSE_GENE']
1951       else:
1952           ier=ier+1
1953           self.cr.fatal("MATR_ASSE et MATR_ASSE_GENE absents")
1954           return ier
1955       motscles['TYPE_VECT']=v['TYPE_VECT']
1956       self.DeclareOut('vv',v['VECTEUR'])
1957       vv=PROJ_VECT_BASE(BASE=BASE,NUME_DDL_GENE=__num,NB_VECT=NB_VECT,**motscles)
1958
1959   return ier
1960
1961
1962 def macro_proj_base_prod(self,MATR_ASSE_GENE,VECT_ASSE_GENE,**args ):
1963   if MATR_ASSE_GENE != None:
1964     for m in MATR_ASSE_GENE:
1965       self.type_sdprod(m['MATRICE'],matr_asse_gene_r)
1966       self.type_sdprod(m['MATR_ASSE'],matr_asse_depl_r)
1967   if VECT_ASSE_GENE != None:
1968     for v in VECT_ASSE_GENE:
1969       self.type_sdprod(v['VECTEUR'],vect_asse_gene)
1970   return None
1971
1972 MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,docu="U4.63.11-c",
1973                       sd_prod=macro_proj_base_prod,
1974                       fr="Projection des matrices et/ou vecteurs assemblés sur une base de vecteurs",
1975          BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene) ),
1976          NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999),
1977          MATR_ASSE_GENE  =FACT(statut='f',min=01,max='**',
1978            MATRICE         =SIMP(statut='o',typ=(CO,matr_asse)),
1979            MATR_ASSE       =SIMP(statut='f',typ=matr_asse_depl_r),
1980            MATR_ASSE_GENE  =SIMP(statut='f',typ=matr_asse_gene_r),
1981            PROFIL          =SIMP(statut='f',typ='TXM',defaut="DIAG",into=("PLEIN","DIAG") ),
1982          ),
1983          VECT_ASSE_GENE  =FACT(statut='f',min=01,max='**',
1984            VECTEUR         =SIMP(statut='o',typ=(CO,vect_asse)),
1985            TYPE_VECT       =SIMP(statut='f',typ='TXM',defaut="FORC"),
1986            VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r),
1987            VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene),
1988          ),
1989          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
1990 )  ;
1991
1992 RETOUR=PROC(nom="RETOUR",op= -2,docu="U4.13.02-e",
1993             fr="Retour au fichier de commandes appelant",
1994 ) ;
1995
1996 DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op=  73,sd_prod=obstacle
1997                     ,fr="Définition d un obstacle plan perpendiculaire à une structure filaire",
1998                      docu="U4.44.21-e",reentrant='n',
1999          TYPE            =SIMP(statut='o',typ='TXM',defaut="CERCLE",
2000                              into=("CERCLE","PLAN_Y","PLAN_Z","DISCRET",
2001                              "BI_CERCLE","BI_PLAN_Y","BI_PLAN_Z","BI_CERC_INT",
2002                              "CRAYON_900","CRAYON_1300","GUID_A_CARTE_900",
2003                              "GUID_B_CARTE_900","GUID_C_CARTE_900",
2004                              "GUID_D_CARTE_900","GUID_E_CARTE_900",
2005                              "GUID_F_CARTE_900","GUID_A_CARTE_1300",
2006                              "GUID_B_CARTE_1300","GUID_C_CARTE_1300",
2007                              "GUID_D_CARTE_1300","GUID_E_CARTE_1300",
2008                              "GUID_F_CARTE_1300","GUID_A_CARSP_900",
2009                              "GUID_B_CARSP_900","GUID_C_CARSP_900",
2010                              "GUID_D_CARSP_900","GUID_E_CARSP_900",
2011                              "GUID_F_CARSP_900","GUID_A_CARSP_1300",
2012                              "GUID_B_CARSP_1300","GUID_C_CARSP_1300",
2013                              "GUID_D_CARSP_1300","GUID_E_CARSP_1300",
2014                              "GUID_F_CARSP_1300","GUID_A_GCONT_900",
2015                              "GUID_B_GCONT_900","GUID_C_GCONT_900",
2016                              "GUID_D_GCONT_900","GUID_E_GCONT_900",
2017                              "GUID_F_GCONT_900","GUID_A_GCONT_1300",
2018                              "GUID_B_GCONT_1300","GUID_C_GCONT_1300",
2019                              "GUID_D_GCONT_1300","GUID_E_GCONT_1300",
2020                              "GUID_F_GCONT_1300","GUID_A_GCOMB_900",
2021                              "GUID_B_GCOMB_900","GUID_C_GCOMB_900",
2022                              "GUID_D_GCOMB_900","GUID_E_GCOMB_900",
2023                              "GUID_F_GCOMB_900","GUID_A_GCOMB_1300",
2024                              "GUID_B_GCOMB_1300","GUID_C_GCOMB_1300",
2025                              "GUID_D_GCOMB_1300","GUID_E_GCOMB_1300",
2026                              "GUID_F_GCOMB_1300",) ),
2027          VALE            =SIMP(statut='f',typ='R',max='**'),
2028          VERIF           =SIMP(statut='f',typ='TXM',defaut="FERME"),
2029 )  ;
2030
2031 DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
2032                      fr="Réponse dynamique transitoire en coordonnées généralisées par recombinaison modale",
2033                      docu="U4.53.21-e",reentrant='f',
2034       regles=(EXCLUS('AMOR_REDUIT','AMOR_GENE','LIST_AMOR'),
2035               PRESENT_ABSENT('MODE_STAT','MODE_CORR'),),
2036          METHODE         =SIMP(statut='f',typ='TXM',defaut="EULER",
2037                                into=("EULER","NEWMARK","DEVOGE","ADAPT","ITMI") ),
2038          MASS_GENE       =SIMP(statut='o',typ=matr_asse_gene_r ),
2039          RIGI_GENE       =SIMP(statut='o',typ=matr_asse_gene_r ),
2040          AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r ),
2041          AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
2042          LIST_AMOR       =SIMP(statut='f',typ=listr8 ),
2043          MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc) ),
2044          MODE_CORR       =SIMP(statut='f',typ=(mult_elas,mode_stat_acce) ,),
2045
2046          ETAT_INIT       =FACT(statut='f',min=01,max=01,
2047            regles=(EXCLUS('RESU_GENE','DEPL_INIT_GENE'),
2048                    EXCLUS('RESU_GENE','VITE_INIT_GENE'),),
2049            RESU_GENE       =SIMP(statut='f',typ=tran_gene ),
2050            b_resu_gene     =BLOC(condition = "RESU_GENE != None",
2051              INST_INIT       =SIMP(statut='f',typ='R' ),
2052              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
2053              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
2054            ),
2055            DEPL_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
2056            VITE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
2057          ),
2058          INCREMENT       =FACT(statut='o',min=01,max='**',
2059            INST_INIT       =SIMP(statut='f',typ='R' ),
2060            INST_FIN        =SIMP(statut='o',typ='R' ),
2061            PAS             =SIMP(statut='f',typ='R' ),
2062            VERI_PAS        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
2063            VITE_MIN        =SIMP(statut='f',typ='TXM',defaut="NORM",into=("MAXI","NORM") ),
2064            COEF_MULT_PAS   =SIMP(statut='f',typ='R',defaut= 1.1 ),
2065            COEF_DIVI_PAS   =SIMP(statut='f',typ='R',defaut= 1.3333334 ),
2066            PAS_LIMI_RELA   =SIMP(statut='f',typ='R',defaut= 1.0E-6 ),
2067            NB_POIN_PERIODE =SIMP(statut='f',typ='I',defaut= 50 ),
2068            NMAX_ITER_PAS   =SIMP(statut='f',typ='I',defaut= 16 ),
2069          ),
2070          ARCHIVAGE       =FACT(statut='f',min=01,max=01,
2071            regles=(UN_PARMI('LIST_ARCH','PAS_ARCH'),),
2072            LIST_ARCH       =SIMP(statut='f',typ=listis ),
2073            PAS_ARCH        =SIMP(statut='f',typ='I' ),
2074          ),
2075          NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 20 ),
2076          RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
2077          LAMBDA          =SIMP(statut='f',typ='R',defaut= 10. ),
2078
2079          EXCIT           =FACT(statut='f',min=01,max='**',
2080            regles=(UN_PARMI('FONC_MULT','COEF_MULT','ACCE'),
2081                    PRESENT_PRESENT('ACCE','VITE','DEPL'),
2082                    PRESENT_PRESENT('D_FONC_DT','D_FONC_DT2'),
2083                    PRESENT_ABSENT('NUME_MODE','VECT_GENE','COEF_MULT'),
2084                    PRESENT_ABSENT('MULT_APPUI','CORR_STAT'),
2085                    PRESENT_ABSENT('MULT_APPUI','COEF_MULT'),
2086                    PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
2087            VECT_GENE       =SIMP(statut='f',typ=vect_asse_gene ),
2088            NUME_MODE       =SIMP(statut='f',typ='I' ),
2089            FONC_MULT       =SIMP(statut='f',typ=fonction ),
2090            COEF_MULT       =SIMP(statut='f',typ='R' ),
2091            ACCE            =SIMP(statut='f',typ=fonction ),
2092            VITE            =SIMP(statut='f',typ=fonction ),
2093            DEPL            =SIMP(statut='f',typ=fonction ),
2094            MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
2095            DIRECTION       =SIMP(statut='f',typ='R',max='**'),
2096            b_loca          =BLOC(condition= "DIRECTION != None",
2097              regles=(EXCLUS('NOEUD','GROUP_NO'),),
2098              NOEUD           =SIMP(statut='f',typ=no,max='**'),
2099              GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
2100            ),
2101            CORR_STAT       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
2102            D_FONC_DT       =SIMP(statut='f',typ=fonction ),
2103            D_FONC_DT2      =SIMP(statut='f',typ=fonction ),
2104          ),
2105          CHOC            =FACT(statut='f',min=01,max='**',
2106            regles=(UN_PARMI('NOEUD_1','GROUP_NO_1' ),
2107                    PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
2108                    PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
2109            INTITULE        =SIMP(statut='f',typ='TXM' ),
2110            NOEUD_1         =SIMP(statut='f',typ=no),
2111            NOEUD_2         =SIMP(statut='f',typ=no),
2112            GROUP_NO_1      =SIMP(statut='f',typ=grno),
2113            GROUP_NO_2      =SIMP(statut='f',typ=grno),
2114            OBSTACLE        =SIMP(statut='o',typ=obstacle ),
2115            ORIG_OBST       =SIMP(statut='f',typ='R',min=3,max=3),
2116            NORM_OBST       =SIMP(statut='o',typ='R',min=3,max=3),
2117            ANGL_VRIL       =SIMP(statut='f',typ='R' ),
2118            JEU             =SIMP(statut='f',typ='R',defaut= 1. ),
2119            DIST_1          =SIMP(statut='f',typ='R',val_min=0.E+0 ),
2120            DIST_2          =SIMP(statut='f',typ='R',val_min=0.E+0 ),
2121            SOUS_STRUC_1    =SIMP(statut='f',typ='TXM' ),
2122            SOUS_STRUC_2    =SIMP(statut='f',typ='TXM' ),
2123            REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL"),
2124            RIGI_NOR        =SIMP(statut='f',typ='R' ),
2125            AMOR_NOR        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
2126            RIGI_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
2127            AMOR_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
2128            COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
2129
2130            LAME_FLUIDE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
2131            b_lame          =BLOC(condition="LAME_FLUIDE=='OUI'",
2132                ALPHA           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
2133                BETA            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
2134                CHI             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
2135                DELTA           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
2136            ),
2137          ),
2138          VERI_CHOC       =FACT(statut='f',min=01,max='**',
2139            STOP_CRITERE    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
2140            SEUIL           =SIMP(statut='f',typ='R',defaut= 0.5 ),
2141          ),
2142          FLAMBAGE        =FACT(statut='f',min=01,max='**',
2143            regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
2144                    PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
2145                    PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
2146            NOEUD_1         =SIMP(statut='f',typ=no),
2147            NOEUD_2         =SIMP(statut='f',typ=no),
2148            GROUP_NO_1      =SIMP(statut='f',typ=grno),
2149            GROUP_NO_2      =SIMP(statut='f',typ=grno),
2150            OBSTACLE        =SIMP(statut='o',typ=obstacle ),
2151            ORIG_OBST       =SIMP(statut='f',typ='R',max='**'),
2152            NORM_OBST       =SIMP(statut='o',typ='R',max='**'),
2153            ANGL_VRIL       =SIMP(statut='f',typ='R' ),
2154            JEU             =SIMP(statut='f',typ='R',defaut= 1. ),
2155            DIST_1          =SIMP(statut='f',typ='R' ),
2156            DIST_2          =SIMP(statut='f',typ='R' ),
2157            REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL"),
2158            RIGI_NOR        =SIMP(statut='f',typ='R' ),
2159            FNOR_CRIT       =SIMP(statut='f',typ='R' ),
2160            FNOR_POST_FL    =SIMP(statut='f',typ='R' ),
2161            RIGI_NOR_POST_FL=SIMP(statut='f',typ='R' ),
2162          ),
2163          ANTI_SISM       =FACT(statut='f',min=01,max='**',
2164            regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
2165                    UN_PARMI('NOEUD_2','GROUP_NO_2'),
2166                    PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
2167                    PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
2168            NOEUD_1         =SIMP(statut='f',typ=no),
2169            NOEUD_2         =SIMP(statut='f',typ=no),
2170            GROUP_NO_1      =SIMP(statut='f',typ=grno),
2171            GROUP_NO_2      =SIMP(statut='f',typ=grno),
2172            RIGI_K1         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
2173            RIGI_K2         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
2174            SEUIL_FX        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
2175            C               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
2176            PUIS_ALPHA      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
2177            DX_MAX          =SIMP(statut='f',typ='R',defaut= 1. ),
2178          ),
2179          RELA_EFFO_DEPL  =FACT(statut='f',min=01,max='**',
2180            NOEUD           =SIMP(statut='o',typ=no),
2181            SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
2182            NOM_CMP         =SIMP(statut='f',typ='TXM' ),
2183            RELATION        =SIMP(statut='o',typ=fonction ),
2184          ),
2185          RELA_TRANSIS    =FACT(statut='f',min=01,max='**',
2186            NOEUD           =SIMP(statut='o',typ=no),
2187            SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
2188            NOM_CMP         =SIMP(statut='f',typ='TXM' ),
2189            RELATION        =SIMP(statut='o',typ=fonction ),
2190          ),
2191          RELA_EFFO_VITE  =FACT(statut='f',min=01,max='**',
2192            NOEUD           =SIMP(statut='o',typ=no),
2193            SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
2194            NOM_CMP         =SIMP(statut='f',typ='TXM' ),
2195            RELATION        =SIMP(statut='o',typ=fonction ),
2196          ),
2197          b_itmi          =BLOC(condition = "METHODE=='ITMI'",
2198                 regles=(ENSEMBLE('BASE_ELAS_FLUI','NUME_VITE_FLUI'),),
2199                 BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu ),
2200                 NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
2201                 ETAT_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
2202                 PREC_DUREE      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
2203                 CHOC_FLUI       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
2204                 NB_MODE         =SIMP(statut='f',typ='I' ),
2205                 NB_MODE_FLUI    =SIMP(statut='f',typ='I' ),
2206                 NB_MODE_DIAG    =SIMP(statut='f',typ='I' ),
2207                 TS_REG_ETAB     =SIMP(statut='f',typ='R' ),
2208          ),
2209          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
2210          IMPRESSION      =FACT(statut='f',min=01,max='**',
2211            regles=(EXCLUS('TOUT','NIVEAU'),),
2212            TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
2213            NIVEAU          =SIMP(statut='f',typ='TXM',into=("DEPL_LOC","VITE_LOC","FORC_LOC","TAUX_CHOC") ),
2214            INST_INIT       =SIMP(statut='f',typ='R' ),
2215            INST_FIN        =SIMP(statut='f',typ='R' ),
2216          ),
2217          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
2218  )  ;
2219
2220 FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude",
2221          docu="U4.11.02-f",
2222          RETASSAGE       =SIMP(fr="provoque le retassage de la base GLOBALE",
2223                                statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
2224          PERFORMANCE     =SIMP(fr="provoque l'impression d'un résumé des mesures de temps ",
2225                                statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
2226          INFO_RESU       =SIMP(fr="provoque l'impression des informations sur les structures de données",
2227                                statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
2228          FICHIER         =SIMP(statut='f',typ='TXM',defaut="MESSAGE"),
2229 )  ;
2230
2231
2232
2233