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