]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
Version initiale de EFICAS 1.2 START
authoreficas <>
Tue, 26 Mar 2002 09:08:47 +0000 (09:08 +0000)
committereficas <>
Tue, 26 Mar 2002 09:08:47 +0000 (09:08 +0000)
350 files changed:
Accas/A_AU_MOINS_UN.py [new file with mode: 0644]
Accas/A_A_CLASSER.py [new file with mode: 0644]
Accas/A_BLOC.py [new file with mode: 0644]
Accas/A_ENSEMBLE.py [new file with mode: 0644]
Accas/A_ETAPE.py [new file with mode: 0644]
Accas/A_EVAL.py [new file with mode: 0644]
Accas/A_EXCLUS.py [new file with mode: 0644]
Accas/A_FACT.py [new file with mode: 0644]
Accas/A_FORM.py [new file with mode: 0644]
Accas/A_FORM_ETAPE.py [new file with mode: 0644]
Accas/A_JDC.py [new file with mode: 0644]
Accas/A_JDC_CATA.py [new file with mode: 0644]
Accas/A_MACRO.py [new file with mode: 0644]
Accas/A_MACRO_ETAPE.py [new file with mode: 0644]
Accas/A_MCBLOC.py [new file with mode: 0644]
Accas/A_MCFACT.py [new file with mode: 0644]
Accas/A_MCLIST.py [new file with mode: 0644]
Accas/A_MCNUPLET.py [new file with mode: 0644]
Accas/A_MCSIMP.py [new file with mode: 0644]
Accas/A_NUPLET.py [new file with mode: 0644]
Accas/A_OPER.py [new file with mode: 0644]
Accas/A_PRESENT_ABSENT.py [new file with mode: 0644]
Accas/A_PRESENT_PRESENT.py [new file with mode: 0644]
Accas/A_PROC.py [new file with mode: 0644]
Accas/A_PROC_ETAPE.py [new file with mode: 0644]
Accas/A_SIMP.py [new file with mode: 0644]
Accas/A_UN_PARMI.py [new file with mode: 0644]
Accas/__init__.py [new file with mode: 0644]
Aster/Cata/__init__.py [new file with mode: 0644]
Aster/Cata/asterexec.py [new file with mode: 0644]
Aster/Cata/cata.py [new file with mode: 0755]
Aster/Cata/cata_STA5.py [new file with mode: 0644]
Aster/Cata/cata_STA6.py [new file with mode: 0755]
Aster/Cata/ops.py [new file with mode: 0644]
Aster/__init__.py [new file with mode: 0644]
Aster/ahlv100a.comm [new file with mode: 0755]
Aster/editeur.ini [new file with mode: 0644]
Aster/eficas_aster.py [new file with mode: 0755]
Aster/prefs.py [new file with mode: 0644]
Aster/totalmod.comm [new file with mode: 0755]
Editeur/Interp.py [new file with mode: 0644]
Editeur/Objecttreeitem.py [new file with mode: 0644]
Editeur/__init__.py [new file with mode: 0644]
Editeur/analyse_catalogue.py [new file with mode: 0644]
Editeur/appli.py [new file with mode: 0644]
Editeur/browser.py [new file with mode: 0644]
Editeur/bureau.py [new file with mode: 0644]
Editeur/catabrowser.py [new file with mode: 0644]
Editeur/cataediteur.py [new file with mode: 0644]
Editeur/centerwindow.py [new file with mode: 0644]
Editeur/compobloc.py [new file with mode: 0644]
Editeur/compocomm.py [new file with mode: 0644]
Editeur/compocommandecomm.py [new file with mode: 0644]
Editeur/compofact.py [new file with mode: 0644]
Editeur/compoformule.py [new file with mode: 0644]
Editeur/compojdc.py [new file with mode: 0644]
Editeur/compomacro.py [new file with mode: 0644]
Editeur/compomclist.py [new file with mode: 0644]
Editeur/componiveau.py [new file with mode: 0644]
Editeur/componuplet.py [new file with mode: 0644]
Editeur/compooper.py [new file with mode: 0644]
Editeur/compoparam.py [new file with mode: 0644]
Editeur/compoparameval.py [new file with mode: 0644]
Editeur/compoproc.py [new file with mode: 0644]
Editeur/composimp.py [new file with mode: 0644]
Editeur/configuration.py [new file with mode: 0644]
Editeur/definition_cata.py [new file with mode: 0644]
Editeur/eficas.py [new file with mode: 0644]
Editeur/eficas_go.py [new file with mode: 0644]
Editeur/faq.py [new file with mode: 0644]
Editeur/faqs.txt [new file with mode: 0755]
Editeur/fenetre_mc_inconnus.py [new file with mode: 0644]
Editeur/fontes.py [new file with mode: 0644]
Editeur/icons/About24.gif [new file with mode: 0755]
Editeur/icons/Copy24.gif [new file with mode: 0755]
Editeur/icons/Cut24.gif [new file with mode: 0755]
Editeur/icons/Delete24.gif [new file with mode: 0755]
Editeur/icons/Help24.gif [new file with mode: 0755]
Editeur/icons/New24.gif [new file with mode: 0755]
Editeur/icons/Open24.gif [new file with mode: 0755]
Editeur/icons/Paste24.gif [new file with mode: 0755]
Editeur/icons/Save24.gif [new file with mode: 0755]
Editeur/icons/Zoom24.gif [new file with mode: 0755]
Editeur/icons/arrow_left.gif [new file with mode: 0755]
Editeur/icons/arrow_right.gif [new file with mode: 0755]
Editeur/icons/ast-green-ball.gif [new file with mode: 0755]
Editeur/icons/ast-green-los.gif [new file with mode: 0755]
Editeur/icons/ast-green-percent.gif [new file with mode: 0755]
Editeur/icons/ast-green-square.gif [new file with mode: 0755]
Editeur/icons/ast-green-text.gif [new file with mode: 0755]
Editeur/icons/ast-red-ball.gif [new file with mode: 0755]
Editeur/icons/ast-red-los.gif [new file with mode: 0755]
Editeur/icons/ast-red-percent.gif [new file with mode: 0755]
Editeur/icons/ast-red-square.gif [new file with mode: 0755]
Editeur/icons/ast-red-text.gif [new file with mode: 0755]
Editeur/icons/ast-white-percent.gif [new file with mode: 0755]
Editeur/icons/ast-white-square.gif [new file with mode: 0755]
Editeur/icons/ast-white-text.gif [new file with mode: 0755]
Editeur/icons/ast-yel-ball.gif [new file with mode: 0755]
Editeur/icons/ast-yel-los.gif [new file with mode: 0755]
Editeur/icons/ast-yel-percent.gif [new file with mode: 0755]
Editeur/icons/ast-yel-square.gif [new file with mode: 0755]
Editeur/icons/ast-yellow-text.gif [new file with mode: 0755]
Editeur/icons/code_aster.gif [new file with mode: 0755]
Editeur/icons/code_descartes.gif [new file with mode: 0755]
Editeur/icons/code_saturne.gif [new file with mode: 0755]
Editeur/icons/logo_edf.gif [new file with mode: 0755]
Editeur/icons/minusnode.gif [new file with mode: 0755]
Editeur/icons/plusnode.gif [new file with mode: 0755]
Editeur/images.py [new file with mode: 0644]
Editeur/import_code.py [new file with mode: 0644]
Editeur/jdcdisplay.py [new file with mode: 0644]
Editeur/menubar.py [new file with mode: 0644]
Editeur/options.py [new file with mode: 0644]
Editeur/panels.py [new file with mode: 0644]
Editeur/readercata.py [new file with mode: 0644]
Editeur/splash.py [new file with mode: 0644]
Editeur/statusbar.py [new file with mode: 0644]
Editeur/toolbar.py [new file with mode: 0644]
Editeur/tooltip.py [new file with mode: 0644]
Editeur/treeitemincanvas.py [new file with mode: 0644]
Editeur/treewidget.py [new file with mode: 0644]
Editeur/utils.py [new file with mode: 0644]
Editeur/widgets.py [new file with mode: 0644]
Exemples/README [new file with mode: 0644]
Exemples/__init__.py [new file with mode: 0644]
Exemples/cyclops/__init__.py [new file with mode: 0644]
Exemples/cyclops/main.py [new file with mode: 0644]
Exemples/cyclops2/__init__.py [new file with mode: 0644]
Exemples/cyclops2/main.py [new file with mode: 0644]
Exemples/cyclops3/__init__.py [new file with mode: 0644]
Exemples/cyclops3/cata.py [new file with mode: 0644]
Exemples/cyclops3/main.py [new file with mode: 0644]
Exemples/eficas/__init__.py [new file with mode: 0644]
Exemples/eficas/cas.py [new file with mode: 0755]
Exemples/eficas/cata.py [new file with mode: 0644]
Exemples/eficas/fort.11 [new file with mode: 0755]
Exemples/eficas/main.py [new file with mode: 0644]
Exemples/ex1/__init__.py [new file with mode: 0644]
Exemples/ex1/main.py [new file with mode: 0644]
Exemples/ex10/__init__.py [new file with mode: 0644]
Exemples/ex10/main.py [new file with mode: 0644]
Exemples/ex11/__init__.py [new file with mode: 0644]
Exemples/ex11/main.py [new file with mode: 0644]
Exemples/ex12/__init__.py [new file with mode: 0644]
Exemples/ex12/cata.py [new file with mode: 0644]
Exemples/ex12/main.py [new file with mode: 0644]
Exemples/ex13/__init__.py [new file with mode: 0644]
Exemples/ex13/cata.py [new file with mode: 0644]
Exemples/ex13/main.py [new file with mode: 0644]
Exemples/ex14/__init__.py [new file with mode: 0644]
Exemples/ex14/cata.py [new file with mode: 0644]
Exemples/ex14/main.py [new file with mode: 0644]
Exemples/ex15/__init__.py [new file with mode: 0644]
Exemples/ex15/cata.py [new file with mode: 0644]
Exemples/ex15/cata1.py [new file with mode: 0644]
Exemples/ex15/main.py [new file with mode: 0644]
Exemples/ex18/__init__.py [new file with mode: 0644]
Exemples/ex18/main.py [new file with mode: 0644]
Exemples/ex18/totalmod.comm [new file with mode: 0755]
Exemples/ex19/__init__.py [new file with mode: 0644]
Exemples/ex19/ahlv100a.comm [new file with mode: 0755]
Exemples/ex19/main.py [new file with mode: 0644]
Exemples/ex19/titi.comm [new file with mode: 0644]
Exemples/ex2/__init__.py [new file with mode: 0644]
Exemples/ex2/main.py [new file with mode: 0644]
Exemples/ex20/__init__.py [new file with mode: 0644]
Exemples/ex20/ahlv100a.comm [new file with mode: 0755]
Exemples/ex20/main.py [new file with mode: 0644]
Exemples/ex20/prefs.py [new file with mode: 0644]
Exemples/ex21/Appli.py [new file with mode: 0644]
Exemples/ex21/__init__.py [new file with mode: 0644]
Exemples/ex21/ahlv100a.comm [new file with mode: 0755]
Exemples/ex21/check.py [new file with mode: 0644]
Exemples/ex21/main.py [new file with mode: 0644]
Exemples/ex21/prefs.py [new file with mode: 0644]
Exemples/ex22/README [new file with mode: 0644]
Exemples/ex22/__init__.py [new file with mode: 0644]
Exemples/ex22/main.py [new file with mode: 0644]
Exemples/ex22/main2.py [new file with mode: 0644]
Exemples/ex22/main3.py [new file with mode: 0644]
Exemples/ex22/titi.comm [new file with mode: 0644]
Exemples/ex22/totalmod.comm [new file with mode: 0755]
Exemples/ex22/toto.comm [new file with mode: 0644]
Exemples/ex22/tutu.comm [new file with mode: 0644]
Exemples/ex22/tyty.comm [new file with mode: 0644]
Exemples/ex23/__init__.py [new file with mode: 0644]
Exemples/ex23/ahlv100a.comm [new file with mode: 0755]
Exemples/ex23/main.py [new file with mode: 0644]
Exemples/ex23/main2.py [new file with mode: 0644]
Exemples/ex23/titi.comm [new file with mode: 0644]
Exemples/ex23/toto.comm [new file with mode: 0644]
Exemples/ex24/__init__.py [new file with mode: 0644]
Exemples/ex24/essai_saturne.py [new file with mode: 0755]
Exemples/ex24/essai_saturne2.py [new file with mode: 0755]
Exemples/ex24/essai_saturne4.py [new file with mode: 0755]
Exemples/ex24/include.py [new file with mode: 0644]
Exemples/ex24/kk.py [new file with mode: 0644]
Exemples/ex24/main.py [new file with mode: 0644]
Exemples/ex24/titi.comm [new file with mode: 0644]
Exemples/ex3/__init__.py [new file with mode: 0644]
Exemples/ex3/main.py [new file with mode: 0644]
Exemples/ex3/parse.py [new file with mode: 0644]
Exemples/ex3/toto.ini [new file with mode: 0644]
Exemples/ex4/__init__.py [new file with mode: 0644]
Exemples/ex4/main.py [new file with mode: 0644]
Exemples/ex4/toto.ini [new file with mode: 0644]
Exemples/ex4/toto.pyth [new file with mode: 0644]
Exemples/ex5/__init__.py [new file with mode: 0644]
Exemples/ex5/main.py [new file with mode: 0644]
Exemples/ex5/titi.ini [new file with mode: 0644]
Exemples/ex5/titi.pyth [new file with mode: 0644]
Exemples/ex5/toto.ini [new file with mode: 0644]
Exemples/ex5/toto.pyth [new file with mode: 0644]
Exemples/ex6/__init__.py [new file with mode: 0644]
Exemples/ex6/main.py [new file with mode: 0644]
Exemples/ex7/__init__.py [new file with mode: 0644]
Exemples/ex7/main.py [new file with mode: 0644]
Exemples/ex8/__init__.py [new file with mode: 0644]
Exemples/ex8/main.py [new file with mode: 0644]
Exemples/ex9/__init__.py [new file with mode: 0644]
Exemples/ex9/main.py [new file with mode: 0644]
Exemples/profile/__init__.py [new file with mode: 0644]
Exemples/profile/main.py [new file with mode: 0644]
Exemples/profile/resul [new file with mode: 0644]
Extensions/__init__.py [new file with mode: 0644]
Extensions/commande_comm.py [new file with mode: 0644]
Extensions/commentaire.py [new file with mode: 0644]
Extensions/etape_niveau.py [new file with mode: 0644]
Extensions/interpreteur_formule.py [new file with mode: 0644]
Extensions/jdc.py [new file with mode: 0644]
Extensions/mcnuplet.py [new file with mode: 0644]
Extensions/niveau.py [new file with mode: 0644]
Extensions/nuplet.py [new file with mode: 0644]
Extensions/parametre.py [new file with mode: 0644]
Extensions/parametre_eval.py [new file with mode: 0644]
Extensions/pluginloader.py [new file with mode: 0644]
Ihm/I_A_CLASSER.py [new file with mode: 0644]
Ihm/I_ENTITE.py [new file with mode: 0644]
Ihm/I_ETAPE.py [new file with mode: 0644]
Ihm/I_EXCLUS.py [new file with mode: 0644]
Ihm/I_FORM_ETAPE.py [new file with mode: 0644]
Ihm/I_JDC.py [new file with mode: 0644]
Ihm/I_JDC_CATA.py [new file with mode: 0644]
Ihm/I_MACRO_ETAPE.py [new file with mode: 0644]
Ihm/I_MCBLOC.py [new file with mode: 0644]
Ihm/I_MCCOMPO.py [new file with mode: 0644]
Ihm/I_MCFACT.py [new file with mode: 0644]
Ihm/I_MCLIST.py [new file with mode: 0644]
Ihm/I_MCSIMP.py [new file with mode: 0644]
Ihm/I_OBJECT.py [new file with mode: 0644]
Ihm/I_PRESENT_ABSENT.py [new file with mode: 0644]
Ihm/I_PRESENT_PRESENT.py [new file with mode: 0644]
Ihm/I_PROC_ETAPE.py [new file with mode: 0644]
Ihm/I_REGLE.py [new file with mode: 0644]
Ihm/I_UN_PARMI.py [new file with mode: 0644]
Ihm/__init__.py [new file with mode: 0644]
Minicode/cata_saturne.py [new file with mode: 0755]
Minicode/cata_saturne2.py [new file with mode: 0755]
Minicode/editeur.ini [new file with mode: 0644]
Minicode/eficas_mini.py [new file with mode: 0755]
Minicode/ops.py [new file with mode: 0644]
Minicode/prefs.py [new file with mode: 0644]
Misc/Cyclops.py [new file with mode: 0644]
Misc/Trace.py [new file with mode: 0644]
Misc/__init__.py [new file with mode: 0644]
Misc/timing.py [new file with mode: 0644]
Noyau/N_ASSD.py [new file with mode: 0644]
Noyau/N_BLOC.py [new file with mode: 0644]
Noyau/N_CO.py [new file with mode: 0644]
Noyau/N_CR.py [new file with mode: 0644]
Noyau/N_ENTITE.py [new file with mode: 0644]
Noyau/N_ETAPE.py [new file with mode: 0644]
Noyau/N_EVAL.py [new file with mode: 0644]
Noyau/N_Exception.py [new file with mode: 0644]
Noyau/N_FACT.py [new file with mode: 0644]
Noyau/N_FONCTION.py [new file with mode: 0644]
Noyau/N_FORM.py [new file with mode: 0644]
Noyau/N_FORM_ETAPE.py [new file with mode: 0644]
Noyau/N_GEOM.py [new file with mode: 0644]
Noyau/N_JDC.py [new file with mode: 0644]
Noyau/N_JDC_CATA.py [new file with mode: 0644]
Noyau/N_MACRO.py [new file with mode: 0644]
Noyau/N_MACRO_ETAPE.py [new file with mode: 0644]
Noyau/N_MCBLOC.py [new file with mode: 0644]
Noyau/N_MCCOMPO.py [new file with mode: 0644]
Noyau/N_MCFACT.py [new file with mode: 0644]
Noyau/N_MCLIST.py [new file with mode: 0644]
Noyau/N_MCSIMP.py [new file with mode: 0644]
Noyau/N_OBJECT.py [new file with mode: 0644]
Noyau/N_OPER.py [new file with mode: 0644]
Noyau/N_PROC.py [new file with mode: 0644]
Noyau/N_PROC_ETAPE.py [new file with mode: 0644]
Noyau/N_REGLE.py [new file with mode: 0644]
Noyau/N_SIMP.py [new file with mode: 0644]
Noyau/N__F.py [new file with mode: 0644]
Noyau/N_utils.py [new file with mode: 0644]
Noyau/__init__.py [new file with mode: 0644]
Noyau/context.py [new file with mode: 0644]
Noyau/nommage.py [new file with mode: 0644]
Noyau/properties.py [new file with mode: 0644]
README [new file with mode: 0644]
Saturne/cata_saturne.py [new file with mode: 0755]
Saturne/editeur.ini [new file with mode: 0644]
Saturne/eficas_saturne.py [new file with mode: 0755]
Saturne/essai_saturne.py [new file with mode: 0755]
Saturne/essai_saturne2.py [new file with mode: 0755]
Saturne/essai_saturne4.py [new file with mode: 0755]
Saturne/prefs.py [new file with mode: 0644]
Tools/__init__.py [new file with mode: 0644]
Tools/foztools/__init__.py [new file with mode: 0755]
Tools/foztools/foztools.py [new file with mode: 0755]
Tools/foztools/slider.py [new file with mode: 0755]
Validation/V_AU_MOINS_UN.py [new file with mode: 0644]
Validation/V_A_CLASSER.py [new file with mode: 0644]
Validation/V_ENSEMBLE.py [new file with mode: 0644]
Validation/V_ETAPE.py [new file with mode: 0644]
Validation/V_EXCLUS.py [new file with mode: 0644]
Validation/V_JDC.py [new file with mode: 0644]
Validation/V_MACRO_ETAPE.py [new file with mode: 0644]
Validation/V_MCBLOC.py [new file with mode: 0644]
Validation/V_MCCOMPO.py [new file with mode: 0644]
Validation/V_MCFACT.py [new file with mode: 0644]
Validation/V_MCLIST.py [new file with mode: 0644]
Validation/V_MCSIMP.py [new file with mode: 0644]
Validation/V_PRESENT_ABSENT.py [new file with mode: 0644]
Validation/V_PRESENT_PRESENT.py [new file with mode: 0644]
Validation/V_PROC_ETAPE.py [new file with mode: 0644]
Validation/V_UN_PARMI.py [new file with mode: 0644]
Validation/__init__.py [new file with mode: 0644]
convert/Parserv5/Makefile [new file with mode: 0644]
convert/Parserv5/README [new file with mode: 0644]
convert/Parserv5/Translate.py [new file with mode: 0644]
convert/Parserv5/__init__.py [new file with mode: 0644]
convert/Parserv5/conv.py [new file with mode: 0644]
convert/Parserv5/tables.py [new file with mode: 0644]
convert/Parserv5/tables.tag [new file with mode: 0755]
convert/__init__.py [new file with mode: 0644]
convert/convert_asterv5.py [new file with mode: 0644]
convert/convert_ini.py [new file with mode: 0644]
convert/convert_pyth.py [new file with mode: 0644]
convert/convert_python.py [new file with mode: 0644]
convert/parseur_python.py [new file with mode: 0644]
generator/Formatage.py [new file with mode: 0644]
generator/__init__.py [new file with mode: 0644]
generator/generator_aplat.py [new file with mode: 0644]
generator/generator_asterv5.py [new file with mode: 0644]
generator/generator_ini.py [new file with mode: 0644]
generator/generator_pyth.py [new file with mode: 0644]
generator/generator_python.py [new file with mode: 0644]

diff --git a/Accas/A_AU_MOINS_UN.py b/Accas/A_AU_MOINS_UN.py
new file mode 100644 (file)
index 0000000..d7c525b
--- /dev/null
@@ -0,0 +1,10 @@
+from Noyau import N_REGLE
+from Validation import V_AU_MOINS_UN
+from Ihm import I_REGLE
+
+class AU_MOINS_UN(V_AU_MOINS_UN.AU_MOINS_UN,I_REGLE.REGLE,N_REGLE.REGLE):
+   """
+       La classe utilise l'initialiseur de REGLE. Il n'est pas 
+       nécessaire d'expliciter son initialiseur car 
+       V_AU_MOINS_UN.AU_MOINS_UN n'en a pas 
+   """
diff --git a/Accas/A_A_CLASSER.py b/Accas/A_A_CLASSER.py
new file mode 100644 (file)
index 0000000..c3b32de
--- /dev/null
@@ -0,0 +1,9 @@
+from Noyau import N_REGLE
+from Validation import V_A_CLASSER
+from Ihm import I_A_CLASSER
+
+class A_CLASSER(V_A_CLASSER.A_CLASSER,N_REGLE.REGLE,I_A_CLASSER.A_CLASSER):
+   """
+       La classe utilise l'initialiseur  du module V_. 
+       Il faut absolument que V_A_CLASSER soit en premier dans l'héritage
+   """
diff --git a/Accas/A_BLOC.py b/Accas/A_BLOC.py
new file mode 100644 (file)
index 0000000..5b341d6
--- /dev/null
@@ -0,0 +1,6 @@
+from Noyau import N_BLOC
+from Ihm import I_ENTITE
+import A_MCBLOC
+
+class BLOC(N_BLOC.BLOC,I_ENTITE.ENTITE):
+   class_instance=A_MCBLOC.MCBLOC
diff --git a/Accas/A_ENSEMBLE.py b/Accas/A_ENSEMBLE.py
new file mode 100644 (file)
index 0000000..6675920
--- /dev/null
@@ -0,0 +1,10 @@
+from Noyau import N_REGLE
+from Validation import V_ENSEMBLE
+from Ihm import I_REGLE
+
+class ENSEMBLE(I_REGLE.REGLE,V_ENSEMBLE.ENSEMBLE,N_REGLE.REGLE):
+   """
+       La classe utilise l'initialiseur de REGLE. Il n'est pas 
+       nécessaire d'expliciter son initialiseur car 
+       V_ENSEMBLE.ENSEMBLE n'en a pas 
+   """
diff --git a/Accas/A_ETAPE.py b/Accas/A_ETAPE.py
new file mode 100644 (file)
index 0000000..cfd20bd
--- /dev/null
@@ -0,0 +1,11 @@
+from Noyau import N_ETAPE
+from Validation import V_ETAPE
+from Ihm import I_ETAPE
+
+class ETAPE(I_ETAPE.ETAPE,V_ETAPE.ETAPE,
+            N_ETAPE.ETAPE):
+   def __init__(self,oper=None,reuse=None,args={}):
+      # Pas de constructeur pour B_ETAPE.ETAPE
+      N_ETAPE.ETAPE.__init__(self,oper,reuse,args)
+      V_ETAPE.ETAPE.__init__(self)
+      I_ETAPE.ETAPE.__init__(self)
diff --git a/Accas/A_EVAL.py b/Accas/A_EVAL.py
new file mode 100644 (file)
index 0000000..dff258a
--- /dev/null
@@ -0,0 +1,5 @@
+from Noyau import N_EVAL 
+
+class EVAL(N_EVAL.EVAL):
+   def __init__(self,str):
+      N_EVAL.EVAL.__init__(self,str)
diff --git a/Accas/A_EXCLUS.py b/Accas/A_EXCLUS.py
new file mode 100644 (file)
index 0000000..5473d01
--- /dev/null
@@ -0,0 +1,10 @@
+from Noyau import N_REGLE
+from Validation import V_EXCLUS
+from Ihm import I_EXCLUS
+
+class EXCLUS(I_EXCLUS.EXCLUS,V_EXCLUS.EXCLUS,N_REGLE.REGLE):
+   """
+       La classe utilise l'initialiseur de REGLE. Il n'est pas 
+       nécessaire d'expliciter son initialiseur car 
+       V_EXCLUS.EXCLUS n'en a pas 
+   """
diff --git a/Accas/A_FACT.py b/Accas/A_FACT.py
new file mode 100644 (file)
index 0000000..d40a9c5
--- /dev/null
@@ -0,0 +1,8 @@
+from Noyau import N_FACT
+from Ihm import I_ENTITE
+import A_MCFACT
+import A_MCLIST
+
+class FACT(N_FACT.FACT,I_ENTITE.ENTITE):
+   class_instance=A_MCFACT.MCFACT
+   list_instance=A_MCLIST.MCList
diff --git a/Accas/A_FORM.py b/Accas/A_FORM.py
new file mode 100644 (file)
index 0000000..132a24b
--- /dev/null
@@ -0,0 +1,6 @@
+from Noyau import N_FORM
+from Ihm import I_ENTITE
+import A_FORM_ETAPE 
+
+class FORM(N_FORM.FORM,I_ENTITE.ENTITE):
+   class_instance=A_FORM_ETAPE.FORM_ETAPE
diff --git a/Accas/A_FORM_ETAPE.py b/Accas/A_FORM_ETAPE.py
new file mode 100644 (file)
index 0000000..9c6483b
--- /dev/null
@@ -0,0 +1,10 @@
+from Noyau import N_FORM_ETAPE
+from Validation import V_MACRO_ETAPE
+from Ihm import I_FORM_ETAPE
+
+class FORM_ETAPE(I_FORM_ETAPE.FORM_ETAPE,V_MACRO_ETAPE.MACRO_ETAPE,N_FORM_ETAPE.FORM_ETAPE):
+   def __init__(self,oper=None,reuse=None,args={}):
+      N_FORM_ETAPE.FORM_ETAPE.__init__(self,oper,reuse,args)
+      V_MACRO_ETAPE.MACRO_ETAPE.__init__(self)
+      I_FORM_ETAPE.FORM_ETAPE.__init__(self)
+
diff --git a/Accas/A_JDC.py b/Accas/A_JDC.py
new file mode 100644 (file)
index 0000000..b709e01
--- /dev/null
@@ -0,0 +1,11 @@
+from Noyau import N_JDC
+from Validation import V_JDC
+from Extensions import jdc
+from Ihm import I_JDC
+
+class JDC(jdc.JDC,I_JDC.JDC,V_JDC.JDC,N_JDC.JDC):
+   def __init__(self,*pos,**args):
+      N_JDC.JDC.__init__(self,*pos,**args)
+      V_JDC.JDC.__init__(self)
+      I_JDC.JDC.__init__(self)
+      jdc.JDC.__init__(self)
diff --git a/Accas/A_JDC_CATA.py b/Accas/A_JDC_CATA.py
new file mode 100644 (file)
index 0000000..0a810dc
--- /dev/null
@@ -0,0 +1,9 @@
+from Noyau import N_JDC_CATA
+import A_JDC
+from Ihm import I_JDC_CATA
+
+class JDC_CATA(I_JDC_CATA.JDC_CATA,N_JDC_CATA.JDC_CATA):
+   class_instance=A_JDC.JDC
+   def __init__(self,*pos,**kw):
+      N_JDC_CATA.JDC_CATA.__init__(self,*pos,**kw)
+      I_JDC_CATA.JDC_CATA.__init__(self)
diff --git a/Accas/A_MACRO.py b/Accas/A_MACRO.py
new file mode 100644 (file)
index 0000000..311769f
--- /dev/null
@@ -0,0 +1,6 @@
+from Noyau import N_MACRO
+from Ihm import I_ENTITE
+import A_MACRO_ETAPE 
+
+class MACRO(N_MACRO.MACRO,I_ENTITE.ENTITE):
+   class_instance=A_MACRO_ETAPE.MACRO_ETAPE
diff --git a/Accas/A_MACRO_ETAPE.py b/Accas/A_MACRO_ETAPE.py
new file mode 100644 (file)
index 0000000..29463bd
--- /dev/null
@@ -0,0 +1,11 @@
+from Noyau import N_MACRO_ETAPE
+from Validation import V_MACRO_ETAPE
+from Ihm import I_MACRO_ETAPE
+
+class MACRO_ETAPE(I_MACRO_ETAPE.MACRO_ETAPE,
+                  V_MACRO_ETAPE.MACRO_ETAPE,
+                  N_MACRO_ETAPE.MACRO_ETAPE):
+   def __init__(self,oper=None,reuse=None,args={}):
+      N_MACRO_ETAPE.MACRO_ETAPE.__init__(self,oper,reuse,args)
+      V_MACRO_ETAPE.MACRO_ETAPE.__init__(self)
+      I_MACRO_ETAPE.MACRO_ETAPE.__init__(self)
diff --git a/Accas/A_MCBLOC.py b/Accas/A_MCBLOC.py
new file mode 100644 (file)
index 0000000..3f93184
--- /dev/null
@@ -0,0 +1,8 @@
+from Noyau import N_MCBLOC
+from Validation import V_MCBLOC
+from Ihm import I_MCBLOC
+
+class MCBLOC(I_MCBLOC.MCBLOC,N_MCBLOC.MCBLOC,V_MCBLOC.MCBLOC):
+   def __init__(self,val,definition,nom,parent):
+      N_MCBLOC.MCBLOC.__init__(self,val,definition,nom,parent)
+      V_MCBLOC.MCBLOC.__init__(self)
diff --git a/Accas/A_MCFACT.py b/Accas/A_MCFACT.py
new file mode 100644 (file)
index 0000000..96d172a
--- /dev/null
@@ -0,0 +1,8 @@
+from Noyau import N_MCFACT
+from Validation import V_MCFACT
+from Ihm import I_MCFACT
+
+class MCFACT(I_MCFACT.MCFACT,N_MCFACT.MCFACT,V_MCFACT.MCFACT):
+   def __init__(self,val,definition,nom,parent):
+      N_MCFACT.MCFACT.__init__(self,val,definition,nom,parent)
+      V_MCFACT.MCFACT.__init__(self)
diff --git a/Accas/A_MCLIST.py b/Accas/A_MCLIST.py
new file mode 100644 (file)
index 0000000..e3fba40
--- /dev/null
@@ -0,0 +1,7 @@
+from Noyau import N_MCLIST
+from Validation import V_MCLIST
+from Ihm import I_MCLIST
+
+class MCList(I_MCLIST.MCList,N_MCLIST.MCList,V_MCLIST.MCList):
+   def __init__(self):
+      N_MCLIST.MCList.__init__(self)
diff --git a/Accas/A_MCNUPLET.py b/Accas/A_MCNUPLET.py
new file mode 100644 (file)
index 0000000..49bfa75
--- /dev/null
@@ -0,0 +1,6 @@
+from Extensions import mcnuplet
+from Ihm import I_MCCOMPO
+
+class MCNUPLET(mcnuplet.MCNUPLET,I_MCCOMPO.MCCOMPO):
+   def __init__(self,*pos,**args):
+      mcnuplet.MCNUPLET.__init__(self,*pos,**args)
diff --git a/Accas/A_MCSIMP.py b/Accas/A_MCSIMP.py
new file mode 100644 (file)
index 0000000..3585488
--- /dev/null
@@ -0,0 +1,8 @@
+from Noyau import N_MCSIMP
+from Validation import V_MCSIMP
+from Ihm import I_MCSIMP
+
+class MCSIMP(I_MCSIMP.MCSIMP,N_MCSIMP.MCSIMP,V_MCSIMP.MCSIMP):
+   def __init__(self,val,definition,nom,parent):
+      N_MCSIMP.MCSIMP.__init__(self,val,definition,nom,parent)
+      V_MCSIMP.MCSIMP.__init__(self)
diff --git a/Accas/A_NUPLET.py b/Accas/A_NUPLET.py
new file mode 100644 (file)
index 0000000..1d19c2c
--- /dev/null
@@ -0,0 +1,8 @@
+
+from Extensions import nuplet
+import A_MCLIST
+import A_MCNUPLET
+
+class NUPL(nuplet.NUPL):
+   class_instance=A_MCNUPLET.MCNUPLET
+   list_instance=A_MCLIST.MCList
diff --git a/Accas/A_OPER.py b/Accas/A_OPER.py
new file mode 100644 (file)
index 0000000..f7c6107
--- /dev/null
@@ -0,0 +1,6 @@
+from Noyau import N_OPER
+from Ihm import I_ENTITE
+import A_ETAPE 
+
+class OPER(N_OPER.OPER,I_ENTITE.ENTITE):
+   class_instance=A_ETAPE.ETAPE
diff --git a/Accas/A_PRESENT_ABSENT.py b/Accas/A_PRESENT_ABSENT.py
new file mode 100644 (file)
index 0000000..ac2b0b3
--- /dev/null
@@ -0,0 +1,11 @@
+from Noyau import N_REGLE
+from Validation import V_PRESENT_ABSENT
+from Ihm import I_PRESENT_ABSENT
+
+class PRESENT_ABSENT(I_PRESENT_ABSENT.PRESENT_ABSENT,V_PRESENT_ABSENT.PRESENT_ABSENT,
+                     N_REGLE.REGLE):
+   """
+       La classe utilise l'initialiseur de REGLE. Il n'est pas 
+       nécessaire d'expliciter son initialiseur car 
+       V_PRESENT_ABSENT.PRESENT_ABSENT n'en a pas 
+   """
diff --git a/Accas/A_PRESENT_PRESENT.py b/Accas/A_PRESENT_PRESENT.py
new file mode 100644 (file)
index 0000000..96f52fd
--- /dev/null
@@ -0,0 +1,12 @@
+from Noyau import N_REGLE
+from Validation import V_PRESENT_PRESENT
+from Ihm import I_PRESENT_PRESENT
+
+class PRESENT_PRESENT(I_PRESENT_PRESENT.PRESENT_PRESENT,
+                      V_PRESENT_PRESENT.PRESENT_PRESENT,
+                      N_REGLE.REGLE):
+   """
+       La classe utilise l'initialiseur de REGLE. Il n'est pas 
+       nécessaire d'expliciter son initialiseur car 
+       V_PRESENT_PRESENT.PRESENT_PRESENT n'en a pas 
+   """
diff --git a/Accas/A_PROC.py b/Accas/A_PROC.py
new file mode 100644 (file)
index 0000000..d0b56b0
--- /dev/null
@@ -0,0 +1,6 @@
+from Noyau import N_PROC
+from Ihm import I_ENTITE
+import A_PROC_ETAPE 
+
+class PROC(N_PROC.PROC,I_ENTITE.ENTITE):
+   class_instance=A_PROC_ETAPE.PROC_ETAPE
diff --git a/Accas/A_PROC_ETAPE.py b/Accas/A_PROC_ETAPE.py
new file mode 100644 (file)
index 0000000..9d7c0f8
--- /dev/null
@@ -0,0 +1,11 @@
+from Noyau import N_PROC_ETAPE
+from Validation import V_PROC_ETAPE
+from Ihm import I_PROC_ETAPE
+
+class PROC_ETAPE(I_PROC_ETAPE.PROC_ETAPE,
+                 V_PROC_ETAPE.PROC_ETAPE,
+                 N_PROC_ETAPE.PROC_ETAPE):
+   def __init__(self,oper=None,args={}):
+      N_PROC_ETAPE.PROC_ETAPE.__init__(self,oper=oper,args=args)
+      V_PROC_ETAPE.PROC_ETAPE.__init__(self)
+      I_PROC_ETAPE.PROC_ETAPE.__init__(self)
diff --git a/Accas/A_SIMP.py b/Accas/A_SIMP.py
new file mode 100644 (file)
index 0000000..3cafb49
--- /dev/null
@@ -0,0 +1,6 @@
+from Noyau import N_SIMP
+from Ihm import I_ENTITE
+import A_MCSIMP
+
+class SIMP(N_SIMP.SIMP,I_ENTITE.ENTITE):
+   class_instance=A_MCSIMP.MCSIMP
diff --git a/Accas/A_UN_PARMI.py b/Accas/A_UN_PARMI.py
new file mode 100644 (file)
index 0000000..ee7a505
--- /dev/null
@@ -0,0 +1,10 @@
+from Noyau import N_REGLE
+from Validation import V_UN_PARMI
+from Ihm import I_UN_PARMI
+
+class UN_PARMI(I_UN_PARMI.UN_PARMI,V_UN_PARMI.UN_PARMI,N_REGLE.REGLE):
+   """
+       La classe utilise l'initialiseur de REGLE. Il n'est pas 
+       nécessaire d'expliciter son initialiseur car 
+       V_UN_PARMI.UN_PARMI n'en a pas 
+   """
diff --git a/Accas/__init__.py b/Accas/__init__.py
new file mode 100644 (file)
index 0000000..b61776b
--- /dev/null
@@ -0,0 +1,58 @@
+"""
+   Ce package contient les classes qui seront effectivement utilisées dans les applications. 
+   C'est dans ce package que sont réalisées les combinaisons de classes de base
+   avec les classes MIXIN qui implémentent les fonctionnalités qui ont été séparées
+   du noyau pour des raisons de modularité afin de faciliter la maintenance et
+   l'extensibilité.
+
+   De plus toutes les classes utilisables par les applications sont remontées au
+   niveau du package afin de rendre le plus indépendant possible l'utilisation des
+   classes et leur implémentation.
+"""
+from A_JDC_CATA import JDC_CATA
+from A_OPER import OPER
+from A_PROC import PROC
+from A_MACRO import MACRO
+from A_FORM import FORM
+from A_BLOC import BLOC
+from A_FACT import FACT
+from A_SIMP import SIMP
+from A_EVAL import EVAL
+from A_NUPLET import NUPL
+
+from A_JDC import JDC
+from A_ETAPE import ETAPE
+from A_PROC_ETAPE import PROC_ETAPE
+from A_MACRO_ETAPE import MACRO_ETAPE
+from A_FORM_ETAPE import FORM_ETAPE
+from A_MCFACT import MCFACT
+from A_MCLIST import MCList
+from A_MCBLOC import MCBLOC
+from A_MCSIMP import MCSIMP
+
+# Les règles
+from A_AU_MOINS_UN import AU_MOINS_UN
+from A_UN_PARMI import UN_PARMI
+from A_PRESENT_PRESENT import PRESENT_PRESENT
+from A_PRESENT_ABSENT import PRESENT_ABSENT
+from A_EXCLUS import EXCLUS
+from A_ENSEMBLE import ENSEMBLE
+from A_A_CLASSER import A_CLASSER
+
+from Noyau.N_ASSD import ASSD,assd
+from Noyau.N_GEOM import GEOM,geom
+from Noyau.N_FONCTION import FONCTION
+from Noyau.N_FONCTION import fonction
+from Noyau.N_CO import CO
+from Noyau.N__F import _F
+
+from Noyau.N_Exception import AsException
+from Noyau.N_utils import AsType
+from Extensions.niveau import NIVEAU
+from Extensions.etape_niveau import ETAPE_NIVEAU
+from Extensions.commentaire import COMMENTAIRE
+from Extensions.parametre import PARAMETRE  
+from Extensions.parametre_eval import PARAMETRE_EVAL
+from Extensions.commande_comm import COMMANDE_COMM 
+from Extensions.mcnuplet import MCNUPLET
+
diff --git a/Aster/Cata/__init__.py b/Aster/Cata/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Aster/Cata/asterexec.py b/Aster/Cata/asterexec.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Aster/Cata/cata.py b/Aster/Cata/cata.py
new file mode 100755 (executable)
index 0000000..73cfb00
--- /dev/null
@@ -0,0 +1,14217 @@
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR VABHHTS J.TESELET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+import Accas
+from Accas import *
+from Accas import _F
+
+import ops
+
+try:
+  import aster
+except:
+  pass
+
+#
+__version__="$Name:  $"
+__Id__="$Id: cata_aster_v6.py,v 1.12 2001/01/16 15:55:05 iliade Exp $"
+#
+JdC = JDC_CATA(code='ASTER',
+               execmodul=None,
+               regles = (AU_MOINS_UN('DEBUT','POURSUITE'),
+                         AU_MOINS_UN('FIN'),
+                         A_CLASSER(('DEBUT','POURSUITE'),'FIN')))
+# Type le plus general
+class entier  (ASSD):pass
+class reel    (ASSD):pass
+class complexe(ASSD):pass
+class liste   (ASSD):pass
+class chaine  (ASSD):pass
+
+# Type geometriques
+class no  (GEOM):pass
+class grno(GEOM):pass
+class ma  (GEOM):pass
+class grma(GEOM):pass
+
+
+
+# Autres
+
+class cabl_precont    (ASSD):pass
+class cara_elem       (ASSD):pass
+class cara_pout       (ASSD):pass
+class cham_mater      (ASSD):pass
+class char_acou       (ASSD):pass
+class char_cine_acou  (ASSD):pass
+class char_cine_meca  (ASSD):pass
+class char_cine_ther  (ASSD):pass
+class char_meca       (ASSD):pass
+class char_ther       (ASSD):pass
+class courbe          (ASSD):pass
+class fond_fiss       (ASSD):pass
+class interf_dyna_clas(ASSD):pass
+class interspfact     (ASSD):pass
+class listis          (ASSD):pass
+class listr8          (ASSD):pass
+class macr_elem_dyna  (ASSD):pass
+class macr_elem_stat  (ASSD):pass
+class mater           (ASSD):pass
+class melasflu        (ASSD):pass
+class modele          (ASSD):pass
+class modele_gene     (ASSD):pass
+class nume_ddl        (ASSD):pass
+class nume_ddl_gene   (ASSD):pass
+class obstacle        (ASSD):pass
+class spectre         (ASSD):pass
+class surface         (ASSD):pass
+class tran_gene       (ASSD):pass
+class type_flui_stru  (ASSD):pass
+class valeur          (ASSD):pass
+
+# maillage :
+#--------------------------------
+class maillage(ASSD):pass
+class squelette     (maillage):pass
+
+
+# cham_gd (carte,cham_no,cham_elem)
+#--------------------------------
+
+class cham_gd(ASSD):pass
+
+# cham_gd/carte :
+#--------------------------------
+class carte(cham_gd):pass
+class carte_dbel_r   (carte):pass
+class carte_depl_c   (carte):pass
+class carte_depl_f   (carte):pass
+class carte_depl_r   (carte):pass
+class carte_durt_r   (carte):pass
+class carte_ener_r   (carte):pass
+class carte_epsi_r   (carte):pass
+class carte_erreur   (carte):pass
+class carte_flux_r   (carte):pass
+class carte_g_depl_r (carte):pass
+class carte_geom_r   (carte):pass
+class carte_hydr_r   (carte):pass
+class carte_inst_r   (carte):pass
+class carte_inte_r   (carte):pass
+class carte_irra_r   (carte):pass
+class carte_meta_r   (carte):pass
+class carte_neut_f   (carte):pass
+class carte_neut_r   (carte):pass
+class carte_pres_r   (carte):pass
+class carte_sief_r   (carte):pass
+class carte_sour_r   (carte):pass
+class carte_temp_f   (carte):pass
+class carte_temp_r   (carte):pass
+class carte_var2_r   (carte):pass
+class carte_vnor_c   (carte):pass
+
+
+# cham_gd/cham_elem :
+#--------------------------------
+class cham_elem(cham_gd):pass
+class cham_elem_crit_r(cham_elem):pass
+class cham_elem_dbel_r(cham_elem):pass
+class cham_elem_depl_c(cham_elem):pass
+class cham_elem_depl_f(cham_elem):pass
+class cham_elem_depl_r(cham_elem):pass
+class cham_elem_dommag(cham_elem):pass
+class cham_elem_durt_r(cham_elem):pass
+class cham_elem_ener_r(cham_elem):pass
+class cham_elem_epsi_c(cham_elem):pass
+class cham_elem_epsi_r(cham_elem):pass
+class cham_elem_erreur(cham_elem):pass
+class cham_elem_flux_r(cham_elem):pass
+class cham_elem_g_depl(cham_elem):pass
+class cham_elem_geom_r(cham_elem):pass
+class cham_elem_hydr_r(cham_elem):pass
+class cham_elem_inst_r(cham_elem):pass
+class cham_elem_inte_r(cham_elem):pass
+class cham_elem_irra_r(cham_elem):pass
+class cham_elem_meta_r(cham_elem):pass
+class cham_elem_neut_f(cham_elem):pass
+class cham_elem_neut_r(cham_elem):pass
+class cham_elem_pres_r(cham_elem):pass
+class cham_elem_sief_c(cham_elem):pass
+class cham_elem_sief_r(cham_elem):pass
+class cham_elem_sour_r(cham_elem):pass
+class cham_elem_temp_f(cham_elem):pass
+class cham_elem_temp_r(cham_elem):pass
+class cham_elem_vari_r(cham_elem):pass
+class cham_elem_vnor_c(cham_elem):pass
+
+
+# cham_gd/cham_no :
+#--------------------------------
+class cham_no(cham_gd):pass
+class cham_no_dbel_r   (cham_no):pass
+class cham_no_depl_c   (cham_no):pass
+class cham_no_depl_f   (cham_no):pass
+class cham_no_depl_r   (cham_no):pass
+class cham_no_durt_r   (cham_no):pass
+class cham_no_ener_r   (cham_no):pass
+class cham_no_epsi_r   (cham_no):pass
+class cham_no_erreur   (cham_no):pass
+class cham_no_flux_r   (cham_no):pass
+class cham_no_g_depl_r (cham_no):pass
+class cham_no_geom_r   (cham_no):pass
+class cham_no_hydr_r   (cham_no):pass
+class cham_no_inst_r   (cham_no):pass
+class cham_no_inte_r   (cham_no):pass
+class cham_no_irra_r   (cham_no):pass
+class cham_no_meta_r   (cham_no):pass
+class cham_no_neut_f   (cham_no):pass
+class cham_no_neut_r   (cham_no):pass
+class cham_no_pres_c   (cham_no):pass
+class cham_no_pres_r   (cham_no):pass
+class cham_no_sief_r   (cham_no):pass
+class cham_no_sour_r   (cham_no):pass
+class cham_no_temp_c   (cham_no):pass
+class cham_no_temp_f   (cham_no):pass
+class cham_no_temp_r   (cham_no):pass
+class cham_no_vanl_r   (cham_no):pass
+class cham_no_var2_r   (cham_no):pass
+class cham_no_vnor_c   (cham_no):pass
+
+
+# resultat : (evol,mode_stat,mode_meca)
+#--------------------------------
+
+class resultat(ASSD):
+  def __getitem__(self,key):
+    return aster.getpara(self.get_name(),"RESULTAT",key[0],key[1])
+
+class acou_harmo    (resultat):pass
+class base_modale     (resultat):pass
+class comb_fourier  (resultat):pass
+class dyna_harmo    (resultat):pass
+class dyna_trans    (resultat):pass
+class fourier_elas  (resultat):pass
+class harm_gene     (resultat):pass
+class mode_acou     (resultat):pass
+class mode_cycl     (resultat):pass
+class mode_flamb    (resultat):pass
+class mode_gene     (resultat):pass
+class mult_elas     (resultat):pass
+class theta_geom    (resultat):pass
+
+# resultat/evol :
+#--------------------------------
+class evol(resultat):pass
+class evol_char(evol):pass
+class evol_elas(evol):pass
+class evol_noli(evol):pass
+class evol_ther(evol):pass
+class evol_varc(evol):pass
+
+# resultat/mode_stat :
+#--------------------------------
+class mode_stat(resultat):pass
+class mode_stat_depl(mode_stat):pass
+class mode_stat_acce(mode_stat):pass
+class mode_stat_forc(mode_stat):pass
+
+
+# resultat/mode_meca :
+#--------------------------------
+class mode_meca(resultat):pass
+class mode_meca_c(mode_meca):pass
+
+
+# fonction :
+#--------------------------------
+class para_sensi(fonction):pass
+class fonction_c(fonction):pass
+
+
+# matr_asse :
+#--------------------------------
+class matr_asse(ASSD):pass
+class matr_asse_depl_c(matr_asse):pass
+class matr_asse_depl_r(matr_asse):pass
+class matr_asse_gene_r(matr_asse):pass
+class matr_asse_gene_c(matr_asse):pass
+class matr_asse_pres_c(matr_asse):pass
+class matr_asse_pres_r(matr_asse):pass
+class matr_asse_temp_c(matr_asse):pass
+class matr_asse_temp_r(matr_asse):pass
+
+# matr_elem :
+#--------------------------------
+class matr_elem(ASSD):pass
+class matr_elem_depl_c(matr_elem):pass
+class matr_elem_depl_r(matr_elem):pass
+class matr_elem_pres_c(matr_elem):pass
+class matr_elem_temp_r(matr_elem):pass
+
+
+
+
+# table : (tabl_fonc)
+#--------------------------------
+
+class table(ASSD):
+  def __getitem__(self,key):
+    return aster.getpara(self.get_name(),"TABLE",key[0],key[1])
+
+class tabl_aire_int   (table):pass
+class tabl_calc_g_loca(table):pass
+class tabl_calc_g_th  (table):pass
+class tabl_cara_geom  (table):pass
+class tabl_char_limite(table):pass
+class tabl_ener_elas  (table):pass
+class tabl_ener_pot   (table):pass
+class tabl_ener_cin   (table):pass
+class tabl_ener_ext   (table):pass
+class tabl_ener_totale(table):pass
+class tabl_indic_ener (table):pass
+class tabl_indic_seuil(table):pass
+class tabl_intsp      (table):pass
+class tabl_mass_iner  (table):pass
+class tabl_post_alea  (table):pass
+class tabl_post_dyna  (table):pass
+class tabl_post_f_alea(table):pass
+class tabl_post_fatig (table):pass
+class tabl_post_gouj2e(table):pass
+class tabl_post_k     (table):pass
+class tabl_post_rccm  (table):pass
+class tabl_post_rele  (table):pass
+class tabl_post_simpli(table):pass
+class tabl_post_usur  (table):pass
+class tabl_reca_weib  (table):pass
+class tabl_rice_tracey(table):pass
+class tabl_texture    (table):pass
+class tabl_trc        (table):pass
+class tabl_weibull    (table):pass
+
+# table/tabl_fonc
+#--------------------------------
+class tabl_fonc       (table):pass
+class tabl_fonc_max   (tabl_fonc):pass
+class tabl_fonc_noci  (tabl_fonc):pass
+class tabl_fonc_rms   (tabl_fonc):pass
+
+
+# vect_asse :
+#--------------------------------
+class vect_asse(ASSD):pass
+class vect_asse_gene(vect_asse):pass
+
+
+# vect_elem :
+#--------------------------------
+class vect_elem(ASSD):pass
+class vect_elem_depl_r(vect_elem):pass
+class vect_elem_pres_c(vect_elem):pass
+class vect_elem_pres_r(vect_elem):pass
+class vect_elem_temp_r(vect_elem):pass
+
+#& MODIF COMMANDE  DATE 22/11/2001   AUTEUR VABHHTS J.PELLET 
+AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
+                    fr="Affectation de caractéristiques à des éléments de structure",
+                    docu="U4.42.01-f1",reentrant='n',
+         regles=(AU_MOINS_UN('POUTRE','BARRE','COQUE','CABLE','DISCRET','MASSIF',
+                             'ASSE_GRIL','GRILLE','AFFE_SECT','AFFE_FIBRE'),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         INFO            =SIMP(statut='f',typ='I', defaut= 1 ,into=(1,2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',max='**',into=("MAILLE","NOEUD") ),
+
+         POUTRE          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           SECTION         =SIMP(statut='o',typ='TXM' ,into=("GENERALE","RECTANGLE","CERCLE") ),
+           CARA_SECT       =SIMP(statut='f',typ=(cara_pout) ),
+           TUYAU_NCOU      =SIMP(statut='f',typ='I',min=1,max=10,defaut=3),
+           TUYAU_NSEC      =SIMP(statut='f',typ='I',min=1,max=32,defaut=16),
+           b_generale      =BLOC( condition = "SECTION=='GENERALE'",
+             CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("A","IY","IZ","AY","AZ","EY","EZ","JX","RY","RZ","RT",
+                                                           "AI","JG","IYR2","IZR2","A1",
+                                       "IY1","IZ1","AY1","AZ1","EY1","EZ1","JX1","RY1",
+                                       "RZ1","RT1","AI1","JG1","IYR21","IZR21","A2",
+                                       "IY2","IZ2","AY2","AZ2","EY2","EZ2","JX2","RY2",
+                                       "RZ2","RT2","AI2","JG2","IYR22","IZR22","H",
+                                       "HZ","HY","EP","EPY","EPZ","H1","HZ1","HY1",
+                                       "EP1","EPY1","EPZ1","H2","HZ2","HY2","EP2",
+                                       "EPY2","EPZ2","R","R1","R2") ),
+             VALE            =SIMP(statut='o',typ='R',max='**'),
+             VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE",) ),
+           ),
+           b_rectangle     =BLOC( condition = "SECTION=='RECTANGLE'",
+             CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("H","EP","HY","HZ","EPY","EPZ",
+                                                           "H1","HZ1","HY1","EP1","EPY1","EPZ1",
+                                                           "H2","HZ2","HY2","EP2","EPY2","EPZ2") ),
+             VALE            =SIMP(statut='o',typ='R',max='**'),
+             VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE","AFFINE"),defaut="HOMOTHETIQUE"),
+           ),
+           b_cercle        =BLOC( condition = "SECTION=='CERCLE'",
+             CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("R","EP","R1","R2","EP1","EP2") ),
+             VALE            =SIMP(statut='o',typ='R',max='**'),
+             VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE",) ),
+             MODI_METRIQUE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           ),
+           FCX             =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         BARRE           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           SECTION         =SIMP(statut='o',typ='TXM',into=("GENERALE","RECTANGLE","CERCLE") ),
+           b_generale      =BLOC( condition = "SECTION=='GENERALE'",
+             CARA            =SIMP(statut='o',typ='TXM',into=("A",) ),
+             VALE            =SIMP(statut='o',typ='R' ),
+           ),
+           b_rectangle     =BLOC( condition = "SECTION=='RECTANGLE'",
+             CARA            =SIMP(statut='o',typ='TXM',into=("H","HZ","HY","EPY","EPZ","EP"),max=6 ),
+             VALE            =SIMP(statut='o',typ='R',max=6 ),
+           ),
+           b_cercle        =BLOC( condition = "SECTION=='CERCLE'",
+             CARA            =SIMP(statut='o',typ='TXM',max=2,into=("R","EP") ),
+             VALE            =SIMP(statut='o',typ='R',max=2 ),
+           ),
+           FCX             =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         COQUE           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA' ),
+                   PRESENT_PRESENT( 'EXCENTREMENT','INER_ROTA' ),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           EPAIS           =SIMP(statut='o',typ='R' ),
+           ANGL_REP        =SIMP(statut='f',typ='R',min=2,max=2),
+           A_CIS           =SIMP(statut='f',typ='R',defaut= 0.8333333E0),
+           COEF_RIGI_DRZ   =SIMP(statut='f',typ='R',defaut= 1.0E-5 ),
+           COQUE_NCOU      =SIMP(statut='f',typ='I',defaut= 1 ),
+           EXCENTREMENT    =SIMP(statut='f',typ='R' ),
+           INER_ROTA       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MODI_METRIQUE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+
+         CABLE           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('A','SECTION') ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           N_INIT          =SIMP(statut='f',typ='R',defaut= 5000. ),
+           A               =SIMP(statut='f',typ='R' ),
+           SECTION         =SIMP(statut='f',typ='R' ),
+           FCX             =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         DISCRET         =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           REPERE          =SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+           AMOR_HYST       =SIMP(statut='f',typ='R' ),
+           CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("K_T_D_N","K_T_D_L","K_TR_D_N","K_TR_D_L",
+                                                           "K_T_N",  "K_T_L",  "K_TR_N",  "K_TR_L",
+                                                                "M_T_D_N","M_TR_D_N","M_T_N",
+                                                           "M_T_L",  "M_TR_N",  "M_TR_L",
+                                       "A_T_D_N","A_TR_D_N","A_T_D_L","A_TR_D_L",
+                                                           "A_T_N",  "A_T_L",   "A_TR_N", "A_TR_L") ),
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+         ),
+
+         ORIENTATION     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO' ),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           CARA            =SIMP(statut='o',typ='TXM',
+                                 into=("VECT_Y","ANGL_VRIL","VECT_X_Y","ANGL_NAUT","GENE_TUYAU") ),
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-4 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+
+         DEFI_ARC        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('ORIE_ARC','CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE',
+                            'POIN_TANG','NOEUD_POIN_TANG','GROUP_NO_POIN_TG'),
+                   PRESENT_PRESENT('ORIE_ARC','RAYON'),
+                   EXCLUS('COEF_FLEX','COEF_FLEX_XY'),
+                   EXCLUS('COEF_FLEX','COEF_FLEX_XZ'),
+                   EXCLUS('INDI_SIGM','INDI_SIGM_XY'),
+                   EXCLUS('INDI_SIGM','INDI_SIGM_XZ'),
+                   PRESENT_PRESENT('COEF_FLEX_XY','COEF_FLEX_XZ'),
+                   PRESENT_PRESENT('INDI_SIGM_XY','INDI_SIGM_XZ'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ORIE_ARC        =SIMP(statut='f',typ='R'),
+           CENTRE          =SIMP(statut='f',typ='R',max='**'),
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,max=1),
+           POIN_TANG       =SIMP(statut='f',typ='R',max='**'),
+           NOEUD_POIN_TANG =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_POIN_TG=SIMP(statut='f',typ=grno,max=1),
+           RAYON           =SIMP(statut='f',typ='R'),
+           COEF_FLEX       =SIMP(statut='f',typ='R'),
+           INDI_SIGM       =SIMP(statut='f',typ='R'),
+           COEF_FLEX_XY    =SIMP(statut='f',typ='R'),
+           INDI_SIGM_XY    =SIMP(statut='f',typ='R'),
+           COEF_FLEX_XZ    =SIMP(statut='f',typ='R'),
+           INDI_SIGM_XZ    =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+
+         MASSIF          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('ANGL_REP','ANGL_AXE'),
+                   EXCLUS('ANGL_REP','ANGL_AXE'),
+                   EXCLUS('ANGL_REP','ORIG_AXE'),
+                   PRESENT_PRESENT('ANGL_AXE','ORIG_AXE'), ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ANGL_REP        =SIMP(statut='f',typ='R',max=3),
+           ANGL_AXE        =SIMP(statut='f',typ='R',max=2),
+           ORIG_AXE        =SIMP(statut='f',typ='R',max=3),
+         ),
+
+         POUTRE_FLUI     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           B_T             =SIMP(statut='o',typ='R'),
+           B_N             =SIMP(statut='o',typ='R'),
+           B_TN            =SIMP(statut='o',typ='R',defaut= 0.E+0 ),
+           A_FLUI          =SIMP(statut='o',typ='R'),
+           A_CELL          =SIMP(statut='o',typ='R'),
+           COEF_ECHELLE    =SIMP(statut='o',typ='R'),
+         ),
+
+         GRILLE          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   EXCLUS('ANGL_REP','ORIG_AXE'),
+                   EXCLUS('EXCENTREMENT','DIST_N'),
+                   ENSEMBLE('ORIG_AXE','AXE')),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           SECTION_L       =SIMP(statut='o',typ='R'),
+           ANGL_REP        =SIMP(statut='f',typ='R',max=2),
+           ANGL_L          =SIMP(statut='f',typ='R'),
+           POUR_CENT_L     =SIMP(statut='f',typ='R'),
+           POUR_CENT_T     =SIMP(statut='f',typ='R'),
+           DIST_N          =SIMP(statut='f',typ='R'),
+           EXCENTREMENT    =SIMP(statut='f',typ='R'),
+           ORIG_AXE        =SIMP(statut='f',typ='R',max='**'),
+           AXE             =SIMP(statut='f',typ='R',max='**'),
+           COEF_RIGI_DRZ   =SIMP(statut='f',typ='R',defaut= 1.0E-10 ),
+           GRILLE_NCOU     =SIMP(statut='f',typ='I',defaut= 1,min=1,max=1 ),
+         ),
+
+         RIGI_PARASOL    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('COEF_GROUP','FONC_GROUP'),
+                   UN_PARMI('COOR_CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),),
+           GROUP_MA        =SIMP(statut='o',typ=ma,max='**'),
+           FONC_GROUP      =SIMP(statut='f',typ=(fonction) ),
+           COEF_GROUP      =SIMP(statut='f',typ='R',max='**'),
+           REPERE          =SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+           CARA            =SIMP(statut='o',typ='TXM',max='**',into=("K_TR_D_N","A_TR_D_N") ),
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+           COOR_CENTRE     =SIMP(statut='f',typ='R',max='**'),
+         ),
+
+         ASSE_GRIL       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("K_TR_D_N","K_TR_D_L_T","K_TR_D_L_N",) ),
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           PAS_T           =SIMP(statut='o',typ='R'),
+           PAS_N           =SIMP(statut='o',typ='R'),
+           ANGL_REP        =SIMP(statut='o',typ='R',max='**'),
+           COEF_ECHELLE    =SIMP(statut='o',typ='R'),
+         ),
+
+
+         AFFE_SECT     =FACT(statut='f',min=1,max='**',
+              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                      AU_MOINS_UN('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),
+                      PRESENT_ABSENT('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),),
+
+              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+              TOUT_SECT         =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+              GROUP_MA_SECT     =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_SECT       =SIMP(statut='f',typ=ma,max='**'),
+
+              MAILLAGE_SECT     =SIMP(statut='o',typ=maillage),
+              COOR_AXE_POUTRE    =SIMP(statut='o',typ='R',min=2,max=2),
+         ),
+
+
+         AFFE_FIBRE     =FACT(statut='f',min=1,max='**',
+              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+
+              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+              CARA              =SIMP(statut='f',typ='TXM',defaut='SURFACE',into=('SURFACE','DIAMETRE',)),
+              VALE              =SIMP(statut='o',typ='R',max='**'),
+              COOR_AXE_POUTRE    =SIMP(statut='o',typ='R',min=2,max=2),
+         ),
+
+
+) ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
+                    fr="Affectation de charges et conditions aux limites acoustiques constantes",
+                    docu="U4.44.04-e",reentrant='n',
+         regles=(AU_MOINS_UN('PRES_IMPO','VITE_FACE','IMPE_FACE','LIAISON_UNIF' ),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         PRES_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           PRES            =SIMP(statut='o',typ='C' ),
+         ),
+         VITE_FACE       =FACT(statut='f',min=01,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           VNOR            =SIMP(statut='o',typ='C' ),
+         ),
+         IMPE_FACE       =FACT(statut='f',min=01,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           IMPE            =SIMP(statut='o',typ='C' ),
+         ),
+         LIAISON_UNIF    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE' ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/06/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def affe_char_cine_prod(MECA_IMPO,THER_IMPO,ACOU_IMPO,**args):
+  if MECA_IMPO != None  : return char_cine_meca
+  if THER_IMPO != None  : return char_cine_ther
+  if ACOU_IMPO != None  : return char_cine_acou
+  raise AsException("type de concept resultat non prevu")
+
+AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
+                    ,fr="Affectation de conditions aux limites cinématiques pour traitement sans dualisation",
+                     docu="U4.44.03-e",reentrant='n',
+         regles=(AU_MOINS_UN('MECA_IMPO','THER_IMPO','ACOU_IMPO'),
+                 EXCLUS('MECA_IMPO','THER_IMPO'),
+                 EXCLUS('MECA_IMPO','ACOU_IMPO'),
+                 EXCLUS('THER_IMPO','ACOU_IMPO'),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         MECA_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','TEMP','PHI'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DX              =SIMP(statut='f',typ='R' ),
+           DY              =SIMP(statut='f',typ='R' ),
+           DZ              =SIMP(statut='f',typ='R' ),
+           DRX             =SIMP(statut='f',typ='R' ),
+           DRY             =SIMP(statut='f',typ='R' ),
+           DRZ             =SIMP(statut='f',typ='R' ),
+           GRX             =SIMP(statut='f',typ='R' ),
+           PRES            =SIMP(statut='f',typ='R' ),
+           TEMP            =SIMP(statut='f',typ='R' ),
+           PHI             =SIMP(statut='f',typ='R' ),
+         ),
+         THER_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           TEMP_SUP        =SIMP(statut='f',typ='R' ),
+           TEMP            =SIMP(statut='f',typ='R' ),
+           TEMP_INF        =SIMP(statut='f',typ='R' ),
+         ),
+         ACOU_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           PRES            =SIMP(statut='o',typ='C' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def affe_char_cine_f_prod(MECA_IMPO,THER_IMPO,**args):
+  if MECA_IMPO != None  : return char_cine_meca
+  if THER_IMPO != None  : return char_cine_ther
+  raise AsException("type de concept resultat non prevu")
+
+AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_prod
+                    ,fr="Affectation de conditions aux limites cinématiques pour traitement sans dualisation",
+                     docu="U4.44.03-e",reentrant='n',
+         regles=(AU_MOINS_UN('MECA_IMPO','THER_IMPO'),
+                 EXCLUS('MECA_IMPO','THER_IMPO'),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         MECA_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','TEMP','PHI'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DX              =SIMP(statut='f',typ=fonction ),
+           DY              =SIMP(statut='f',typ=fonction ),
+           DZ              =SIMP(statut='f',typ=fonction ),
+           DRX             =SIMP(statut='f',typ=fonction ),
+           DRY             =SIMP(statut='f',typ=fonction ),
+           DRZ             =SIMP(statut='f',typ=fonction ),
+           GRX             =SIMP(statut='f',typ=fonction ),
+           PRES            =SIMP(statut='f',typ=fonction ),
+           TEMP            =SIMP(statut='f',typ=fonction ),
+           PHI             =SIMP(statut='f',typ=fonction ),
+         ),
+         THER_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           TEMP_SUP        =SIMP(statut='f',typ=fonction ),
+           TEMP            =SIMP(statut='f',typ=fonction ),
+           TEMP_INF        =SIMP(statut='f',typ=fonction ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 24/01/2002   AUTEUR SMICHEL S.MICHEL-PONNELLE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
+                    ,fr="Affectation de charges et conditions aux limites mécaniques constantes",
+                     docu="U4.44.01-f1",reentrant='n',
+         regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','LIAISON_DDL','FORCE_NODALE',  
+                             'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',       
+                             'PRES_REP','FORCE_POUTRE','FORCE_COQUE','LIAISON_OBLIQUE',        
+                             'FORCE_ELEC','INTE_ELEC','PESANTEUR','ROTATION','IMPE_FACE',      
+                             'VITE_FACE','TEMP_CALCULEE','RELA_CINE_BP','EPSI_INIT','CONTACT', 
+                             'LIAISON_UNIL_NO','LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP',  
+                             'LIAISON_SOLIDE','LIAISON_ELEM','ONDE_FLUI','PRES_CALCULEE',      
+                             'EPSA_CALCULEE','LIAISON_CHAMNO','VECT_ASSE','LIAISON_COQUE',     
+                             'LIAISON_MAIL','FORCE_TUYAU','SECH_CALCULEE','HYDR_CALCULEE',     
+                             'EFFE_FOND','EVOL_CHAR','ARLEQUIN'),
+                 EXCLUS('PRES_CALCULEE','EVOL_CHAR'),
+                 EXCLUS('LIAISON_UNIL_NO','CONTACT'),),            
+         
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+#    A TERME PRES_CALCULEE N'EXISTERA PLUS
+         EVOL_CHAR       =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
+                               typ=evol_char ),
+         PRES_CALCULEE   =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
+                               typ=evol_char ),
+         TEMP_CALCULEE   =SIMP(statut='f',fr="Champ de température issu d'un autre calcul",
+                               typ=(evol_ther,cham_no_temp_r,carte_temp_r,carte_temp_f ) ),
+         HYDR_CALCULEE   =SIMP(statut='f',fr="Champ d hydratation issu d'un autre calcul",
+                               typ=evol_ther ),
+         SECH_CALCULEE   =SIMP(statut='f',fr="Champ de séchage issu d'un autre calcul",
+                               typ=(evol_ther,cham_no_temp_r,carte_temp_r,carte_temp_f ) ),
+         EPSA_CALCULEE   =SIMP(statut='f',fr="Champ de déformation anélastique issu d'un autre calcul",
+                               typ=evol_noli ),
+         VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+         
+         ARLEQUIN        =FACT(statut='f',min=1,max='**',
+           GROUP_MA_1     =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA_2     =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA_COLL  =SIMP(statut='o',typ=grma,max='**'),
+           regles        =(UN_PARMI('POIDS_1','POIDS_2'),),
+           POIDS_1       =SIMP(statut='f',typ='R'),
+           POIDS_2       =SIMP(statut='f',typ='R'),
+         ),
+
+         CONTACT         =FACT(statut='f',fr="Imposer du contact avec ou sans frottement",min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                 into=("NON","NODAL","NODAL_SYME","MAIT_ESCL","MAIT_ESCL_SYME")),
+           RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_VOISIN",into=("NOEUD_BOUCLE","NOEUD_VOISIN")),
+           LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),                 
+           NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",into=("MAIT","MAIT_ESCL")),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",    
+                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE") ),           
+           PROJECTION      =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE",) ),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           b_active        =BLOC(condition = "METHODE == 'CONTRAINTE' ",
+                                 fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
+                regles=(EXCLUS('DIST_2','COEF_IMPO'),
+                        EXCLUS('DIST_1','COEF_IMPO'),),
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP")),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS",) ), 
+                REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                COEF_IMPO       =SIMP(statut='f',typ='R'),
+                COEF_MULT_2     =SIMP(statut='f',typ='R'),
+                VECT_NORM_2     =SIMP(statut='f',typ='R',max=3),
+                DIST_1          =SIMP(statut='f',typ='R'),
+                DIST_2          =SIMP(statut='f',typ='R'),),
+           b_lagrangien    =BLOC(condition = "METHODE == 'LAGRANGIEN' ",
+                                 fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                DIST_1          =SIMP(statut='f',typ='R'),
+                DIST_2          =SIMP(statut='f',typ='R'),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),  
+                     VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),),),
+           b_penalisation       =BLOC(condition = "METHODE == 'PENALISATION' ",
+                                      fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                E_N             =SIMP(statut='f',typ='R'), 
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                DIST_1          =SIMP(statut='f',typ='R'),
+                DIST_2          =SIMP(statut='f',typ='R'),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     E_T             =SIMP(statut='f',typ='R',
+                                           fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"),
+                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),  
+                     VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),),),
+           b_continue      =BLOC(condition = "METHODE == 'CONTINUE' ",
+                                 fr="Paramètres de la méthode continue (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD")),
+                COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                MODL_AXIS       =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
+                ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=2),
+                ITER_CONT_MAXI  =SIMP(statut='f',typ='I',defaut=30),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     ITER_FROT_MAXI  =SIMP(statut='f',typ='I',defaut=2),
+                     COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                     SEUIL_INIT      =SIMP(statut='f',typ='I',defaut=0),),),
+         ),
+
+        DDL_IMPO        =FACT(statut='f',min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                     AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                                 'TEMP','PRE1','PRE2','UI2','UI3','VI2','VI3','WI2','WI3','UO2',
+                                 'UO3','VO2','VO3','WO2','WO3','UI4','UI5','VI4','VI5','WI4',
+                                 'WI5','UO4','UO5','VO4','VO5','WO4','WO5','UI6','UO6','VI6',
+                                 'VO6','WI6','WO6','WO','WI1','WO1','GONF'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+             GRX             =SIMP(statut='f',typ='R' ),
+             PRES            =SIMP(statut='f',typ='R' ),
+             PHI             =SIMP(statut='f',typ='R' ),
+             TEMP            =SIMP(statut='f',typ='R' ),
+             PRE1            =SIMP(statut='f',typ='R' ),
+             PRE2            =SIMP(statut='f',typ='R' ),
+             UI2             =SIMP(statut='f',typ='R' ),
+             UI3             =SIMP(statut='f',typ='R' ),
+             UI4             =SIMP(statut='f',typ='R' ),
+             UI5             =SIMP(statut='f',typ='R' ),
+             UI6             =SIMP(statut='f',typ='R' ),
+             UO2             =SIMP(statut='f',typ='R' ),
+             UO3             =SIMP(statut='f',typ='R' ),
+             UO4             =SIMP(statut='f',typ='R' ),
+             UO5             =SIMP(statut='f',typ='R' ),
+             UO6             =SIMP(statut='f',typ='R' ),
+             VI2             =SIMP(statut='f',typ='R' ),
+             VI3             =SIMP(statut='f',typ='R' ),
+             VI4             =SIMP(statut='f',typ='R' ),
+             VI5             =SIMP(statut='f',typ='R' ),
+             VI6             =SIMP(statut='f',typ='R' ),
+             VO2             =SIMP(statut='f',typ='R' ),
+             VO3             =SIMP(statut='f',typ='R' ),
+             VO4             =SIMP(statut='f',typ='R' ),
+             VO5             =SIMP(statut='f',typ='R' ),
+             VO6             =SIMP(statut='f',typ='R' ),
+             WI2             =SIMP(statut='f',typ='R' ),
+             WI3             =SIMP(statut='f',typ='R' ),
+             WI4             =SIMP(statut='f',typ='R' ),
+             WI5             =SIMP(statut='f',typ='R' ),
+             WI6             =SIMP(statut='f',typ='R' ),
+             WO2             =SIMP(statut='f',typ='R' ),
+             WO3             =SIMP(statut='f',typ='R' ),
+             WO4             =SIMP(statut='f',typ='R' ),
+             WO5             =SIMP(statut='f',typ='R' ),
+             WO6             =SIMP(statut='f',typ='R' ),
+             WO              =SIMP(statut='f',typ='R' ),
+             WI1             =SIMP(statut='f',typ='R' ),
+             WO1             =SIMP(statut='f',typ='R' ),
+             GONF            =SIMP(statut='f',typ='R' ),
+           ),
+
+         EFFE_FOND       =FACT(statut='f',fr="Imposer un effet de fond",min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+           GROUP_MA_INT    =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PRES            =SIMP(statut='o',typ='R' ),
+         ),
+         
+         EPSI_INIT       =FACT(statut='f',fr="Appliquer un chargement de déformation initiale à un volume 3D ou 2D",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ','EPX',
+                                 'KY','KZ','EXX','EYY','EXY','KXX','KYY','KXY'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             EPXX            =SIMP(statut='f',typ='R' ),
+             EPYY            =SIMP(statut='f',typ='R' ),
+             EPZZ            =SIMP(statut='f',typ='R' ),
+             EPXY            =SIMP(statut='f',typ='R' ),
+             EPXZ            =SIMP(statut='f',typ='R' ),
+             EPYZ            =SIMP(statut='f',typ='R' ),
+             EPX             =SIMP(statut='f',typ='R' ),
+             KY              =SIMP(statut='f',typ='R' ),
+             KZ              =SIMP(statut='f',typ='R' ),
+             EXX             =SIMP(statut='f',typ='R' ),
+             EYY             =SIMP(statut='f',typ='R' ),
+             EXY             =SIMP(statut='f',typ='R' ),
+             KXX             =SIMP(statut='f',typ='R' ),
+             KYY             =SIMP(statut='f',typ='R' ),
+             KXY             =SIMP(statut='f',typ='R' ),
+           ),
+         
+           FACE_IMPO       =FACT(statut='f',min=1,max='**',
+             regles=(UN_PARMI('GROUP_MA','MAILLE',),
+                     AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                                 'TEMP','PRE1','PRE2','DNOR','DTAN'),
+                     EXCLUS('DNOR','DX'),
+                     EXCLUS('DNOR','DY'),
+                     EXCLUS('DNOR','DZ'),
+                     EXCLUS('DNOR','DRX'),
+                     EXCLUS('DNOR','DRY'),
+                     EXCLUS('DNOR','DRZ'),
+                     EXCLUS('DTAN','DX'),
+                     EXCLUS('DTAN','DY'),
+                     EXCLUS('DTAN','DZ'),
+                     EXCLUS('DTAN','DRX'),
+                     EXCLUS('DTAN','DRY'),
+                     EXCLUS('DTAN','DRZ'),),
+#  rajout d'un mot clé REPERE :/ LOCAL /GLOBAL                     
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+             DNOR            =SIMP(statut='f',typ='R' ),
+             DTAN            =SIMP(statut='f',typ='R' ),
+             GRX             =SIMP(statut='f',typ='R' ),
+             PRES            =SIMP(statut='f',typ='R' ),
+             PHI             =SIMP(statut='f',typ='R' ),
+             TEMP            =SIMP(statut='f',typ='R' ),
+             PRE1            =SIMP(statut='f',typ='R' ),
+             PRE2            =SIMP(statut='f',typ='R' ),
+           ),
+
+         FLUX_THM_REP    =FACT(statut='f',min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FLUN            =SIMP(statut='f',typ='R' ),
+             FLUN_HYDR1      =SIMP(statut='f',typ='R' ),
+             FLUN_HYDR2      =SIMP(statut='f',typ='R' ),
+           ),
+         
+         FORCE_ARETE     =FACT(statut='f',fr="Appliquer des forces linéiques à une arete d élément volumique ou de coque",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+             MX              =SIMP(statut='f',typ='R' ),
+             MY              =SIMP(statut='f',typ='R' ),
+             MZ              =SIMP(statut='f',typ='R' ),
+           ), 
+         
+           FORCE_COQUE     =FACT(statut='f',fr="Appliquer des forces surfaciques sur des coques",min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),               
+                     PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('F1','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('F2','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('F3','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('MF1','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('MF2','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
+#  rajour d'un mot clé REPERE :/ LOCAL /GLOBAL              
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             
+               FX              =SIMP(statut='f',typ='R' ),
+               FY              =SIMP(statut='f',typ='R' ),
+               FZ              =SIMP(statut='f',typ='R' ),
+               MX              =SIMP(statut='f',typ='R' ),
+               MY              =SIMP(statut='f',typ='R' ),
+               MZ              =SIMP(statut='f',typ='R' ),
+             
+               F1              =SIMP(statut='f',typ='R' ),
+               F2              =SIMP(statut='f',typ='R' ),
+               F3              =SIMP(statut='f',typ='R' ),
+               MF1             =SIMP(statut='f',typ='R' ),
+               MF2             =SIMP(statut='f',typ='R' ),
+              
+             PRES            =SIMP(statut='f',typ='R' ),
+             PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL",) ),
+           ),
+
+         FORCE_CONTOUR   =FACT(statut='f',fr="Appliquer des forces linéiques au bord d'un domaine 2D ou AXIS_FOURIER",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+             MX              =SIMP(statut='f',typ='R' ),
+             MY              =SIMP(statut='f',typ='R' ),
+             MZ              =SIMP(statut='f',typ='R' ),
+           ), 
+
+         FORCE_ELEC      =FACT(statut='f',
+                                 fr="Force de Laplace due à la présence d'un conducteur rectiligne secondaire non maillé",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','POSITION'),
+                     EXCLUS('FX','POSITION'),
+                     EXCLUS('FY','POSITION'),   
+                     EXCLUS('FZ','POSITION'),),
+#  trop de regles : les blocs conditionnels permettent d en suprimer              
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+              
+             FX              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FY              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FZ              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             
+             POSITION        =SIMP(statut='f',typ='TXM',fr="Direction prédéfinie",into=("PARA","INFI","FINI",) ),
+             b_para     =BLOC ( condition = "POSITION == 'PARA'",
+               regles=(UN_PARMI('TRANS','DIST'),),
+               TRANS           =SIMP(statut='f',typ='R',max=3),
+               DIST            =SIMP(statut='f',typ='R' ),
+               b_point2        =BLOC ( condition = "DIST != None", 
+                 POINT2           =SIMP(statut='o',typ='R',max=3),
+               ),
+             ),
+             b_fini_infi     =BLOC ( condition = "(POSITION == 'FINI') or (POSITION == 'INFI')",
+               POINT1          =SIMP(statut='o',typ='R',max=3),
+               POINT2          =SIMP(statut='o',typ='R',max=3),
+             ), 
+           ),
+
+         FORCE_FACE      =FACT(statut='f',fr="Appliquer des forces surfaciques sur une face d'éléments volumiques",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+           ), 
+
+         FORCE_INTERNE   =FACT(statut='f',fr="Appliquer des forces volumiques (2D ou 3D) à un domaine volumique",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ' ),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+           ), 
+
+         IMPE_FACE       =FACT(statut='f',fr="Appliquer une impédance acoustique à une face",min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE' ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             IMPE            =SIMP(statut='o',typ='R' ),
+           ),
+         
+         FORCE_NODALE    =FACT(statut='f',fr="Imposer des forces nodales en des noeuds",min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           FX              =SIMP(statut='f',typ='R' ),
+           FY              =SIMP(statut='f',typ='R' ),
+           FZ              =SIMP(statut='f',typ='R' ),
+           MX              =SIMP(statut='f',typ='R' ),
+           MY              =SIMP(statut='f',typ='R' ),
+           MZ              =SIMP(statut='f',typ='R' ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+         ),
+
+        FORCE_POUTRE    =FACT(statut='f',fr="Appliquer des forces linéiques sur des poutres",min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','N','VY','VZ'),
+                     PRESENT_ABSENT('FX','N','VY','VZ'),              
+                     PRESENT_ABSENT('FY','N','VY','VZ'),
+                     PRESENT_ABSENT('FZ','N','VY','VZ'),
+                     PRESENT_ABSENT('N','FX','FY','FZ'),
+                     PRESENT_ABSENT('VY','FX','FY','FZ'),
+                     PRESENT_ABSENT('VZ','FX','FY','FZ'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE",) ),
+#  rajour d'un mot clé REPERE :/ LOCAL /GLOBAL              
+               FX              =SIMP(statut='f',typ='R' ),
+               FY              =SIMP(statut='f',typ='R' ),
+               FZ              =SIMP(statut='f',typ='R' ),
+             
+               N               =SIMP(statut='f',typ='R' ),
+               VY              =SIMP(statut='f',typ='R' ),
+               VZ              =SIMP(statut='f',typ='R' ),
+              
+           ),
+         
+         FORCE_TUYAU     =FACT(statut='f',fr="imposer une pression dans un élément TUYAU",min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             PRES            =SIMP(statut='f',typ='R' ),
+           ),
+             
+        INTE_ELEC       =FACT(statut='f',fr="Force de Laplace due à la présence d'un conducteur non rectiligne secondaire",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('GROUP_MA_2','MAILLE_2','TRANS','SYME'),
+                     EXCLUS('TRANS','SYME'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+             TRANS           =SIMP(statut='f',typ='R',max='**'),
+             SYME            =SIMP(statut='f',typ='R',max='**'),
+           ),
+         
+         LIAISON_CHAMNO  =FACT(statut='f',fr="définir une relation linéaire entre tous les ddls d'un concept cham_nno",
+                                 min=1,max='**',
+#  type de cham_no CO()
+             CHAM_NO         =SIMP(statut='o',typ=cham_no), #CO()
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ), 
+
+           LIAISON_COQUE   =FACT(statut='f',min=1,max='**',
+             GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+           LIAISON_DDL     =FACT(statut='f',fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             DDL             =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+           ),
+
+           LIAISON_ELEM    =FACT(statut='f',fr="Raccorder une poutre à une partie massive 3D ou une coque", min=1,max='**',
+             regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                     UN_PARMI('GROUP_NO_2','NOEUD_2'),),
+             OPTION          =SIMP(statut='o',typ='TXM',into=("3D_TUYAU","3D_POU","COQ_POU","COQ_TUYAU") ),
+             GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+             CARA_ELEM       =SIMP(statut='f',typ=(cara_elem) ),
+             AXE_POUTRE      =SIMP(statut='f',typ='R',max=3),
+             ANGL_MAX        =SIMP(statut='f',typ='R',defaut= 1. ),
+           ),
+
+           LIAISON_GROUP   =FACT(statut='f',fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),        
+                     UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                     EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                     EXCLUS('GROUP_MA_1','NOEUD_2'),      
+                     EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                     EXCLUS('GROUP_NO_1','MAILLE_2'),
+                     EXCLUS('MAILLE_1','GROUP_NO_2'),
+                     EXCLUS('MAILLE_1','NOEUD_2'),
+                     EXCLUS('NOEUD_1','GROUP_MA_2'),
+                     EXCLUS('NOEUD_1','MAILLE_2'),
+                     EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+             
+               GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+               GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+               GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+               NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+               GROUP_NO_2      =SIMP(statut='f',typ=no,max='**'),
+               NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+             
+             SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+             SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+             DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+             DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+             SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             TRAN            =SIMP(statut='f',typ='R',max=3),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+             CENTRE          =SIMP(statut='f',typ='R',max=3),
+           ),
+
+           LIAISON_OBLIQUE =FACT(statut='f',fr="Appliquer à des noeuds une valeur de déplacement dans un repere oblique",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                     UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+           ), 
+
+           LIAISON_SOLIDE  =FACT(statut='f',fr="Modéliser une partie indéformable d'une structure",min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ), 
+
+           LIAISON_UNIF    =FACT(statut='f',fr="Imposer une meme valeur (inconnue) à des ddls d'un emsemble de noeuds",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           ), 
+
+         LIAISON_UNIL_NO =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),# CO()
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),# CO()
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),# CO()
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),# CO()
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max=3 ),  
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),  
+           CENTRE          =SIMP(statut='f',typ='R',max=3 ),  
+           ANGLE_MAX       =SIMP(statut='f',typ='R' ),  
+           VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
+           FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",   
+                                 into=("SANS","TRESCA","COULOMB") ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",    
+                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION") ),
+           COULOMB         =SIMP(statut='f',typ='R' ),  
+           TRESCA          =SIMP(statut='f',typ='R' ),  
+           E_T             =SIMP(statut='f',typ='R' ),  
+           COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           CONTACT         =SIMP(statut='f',typ='TXM',into=("MAINTENU",) ),
+           JEU             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+         ),
+         
+           LIAISON_MAIL    =FACT(statut='f',min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA_MAIT','MAILLE_MAIT'),
+                     AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL'),
+                     PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),),
+              GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_MAIT     =SIMP(statut='f',typ=ma,max='**'), 
+              GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_ESCL     =SIMP(statut='f',typ=ma,max='**'), 
+              GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,max='**'),
+              NOEUD_ESCL      =SIMP(statut='f',typ=no,max='**'), 
+              TRAN            =SIMP(statut='f',typ='R',max=3 ),
+              ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),
+              CENTRE          =SIMP(statut='f',typ='R',max=3 ),
+              DDL_MAIT        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+              DDL_ESCL        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+         ),
+         
+         ONDE_FLUI       =FACT(statut='f',fr="Appliquer une amplitude de pression d onde incidente",min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             PRES            =SIMP(statut='o',typ='R' ),
+           ),
+         
+         PRES_REP        =FACT(statut='f',fr="Appliquer une pression à un domaine de milieu continu 2D ou 3D",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('PRES','CISA_2D' ),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             PRES            =SIMP(statut='f',typ='R' ),
+             CISA_2D         =SIMP(statut='f',typ='R' ),
+           ),
+         
+         PESANTEUR       =SIMP(statut='f',typ='R',fr="Champ de pesanteur",min=4,max=4),
+
+         RELA_CINE_BP    =FACT(statut='f',min=1,max='**',
+           CABLE_BP        =SIMP(statut='o',typ=cabl_precont ),
+           SIGM_BPEL       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           RELA_CINE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+
+        ROTATION        =SIMP(statut='f',typ='R',fr="Champ de rotation",min=4,max=4),
+         b_rotation      =BLOC ( condition = "ROTATION != None",
+           CENTRE          =SIMP(statut='f',typ='R',defaut=(0.,0.,0.),max=3),),     
+         
+         VITE_FACE       =FACT(statut='f',fr="Imposer des vitesses acoustiquesnormales à une face",min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             VNOR            =SIMP(statut='o',typ='R' ),
+           ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op=   7,sd_prod=char_meca,
+                     fr="Affectation de charges et conditions aux limites mécaniques complexes",
+                     docu="U4.44.05-c",reentrant='n',
+         regles=(AU_MOINS_UN('DDL_IMPO','FORCE_POUTRE','LIAISON_DDL', ),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         DDL_IMPO        =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD',),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI', ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DX              =SIMP(statut='f',typ='C' ),
+           DY              =SIMP(statut='f',typ='C' ),
+           DZ              =SIMP(statut='f',typ='C' ),
+           DRX             =SIMP(statut='f',typ='C' ),
+           DRY             =SIMP(statut='f',typ='C' ),
+           DRZ             =SIMP(statut='f',typ='C' ),
+           GRX             =SIMP(statut='f',typ='C' ),
+           PRES            =SIMP(statut='f',typ='C' ),
+           PHI             =SIMP(statut='f',typ='C' ),
+         ),
+         FORCE_POUTRE    =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','N','VY','VZ',),
+                   PRESENT_ABSENT('FX','N','VY','VZ',),
+                   PRESENT_ABSENT('FY','N','VY','VZ',),
+                   PRESENT_ABSENT('FZ','N','VY','VZ',),
+                   PRESENT_ABSENT('N','FX','FY','FZ',),
+                   PRESENT_ABSENT('VY', 'FX','FY','FZ',),
+                   PRESENT_ABSENT('VZ','FX','FY','FZ', ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE") ),
+           FX              =SIMP(statut='f',typ='C' ),
+           FY              =SIMP(statut='f',typ='C' ),
+           FZ              =SIMP(statut='f',typ='C' ),
+           N               =SIMP(statut='f',typ='C' ),
+           VY              =SIMP(statut='f',typ='C' ),
+           VZ              =SIMP(statut='f',typ='C' ),
+         ),
+         LIAISON_DDL     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD', ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ='C' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
+                      fr="Affectation de charges et conditions aux limites mécaniques fonction d une grandeur",
+                      docu="U4.44.01-f",reentrant='n',
+        regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','LIAISON_DDL','FORCE_NODALE',
+                            'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',
+                            'PRES_REP','FORCE_POUTRE','VITE_FACE','IMPE_FACE','ONDE_PLANE',
+                            'LIAISON_OBLIQUE','EPSI_INIT','LIAISON_GROUP','LIAISON_UNIF',
+                            'LIAISON_SOLIDE','FORCE_COQUE','LIAISON_COQUE','FORCE_TUYAU',
+                            'CONTACT'),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+
+         DDL_IMPO        =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                               'TEMP','PRE1','PRE2'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DX              =SIMP(statut='f',typ=(fonction) ),
+           DY              =SIMP(statut='f',typ=(fonction) ),
+           DZ              =SIMP(statut='f',typ=(fonction) ),
+           DRX             =SIMP(statut='f',typ=(fonction) ),
+           DRY             =SIMP(statut='f',typ=(fonction) ),
+           DRZ             =SIMP(statut='f',typ=(fonction) ),
+           GRX             =SIMP(statut='f',typ=(fonction) ),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           PHI             =SIMP(statut='f',typ=(fonction) ),
+           TEMP            =SIMP(statut='f',typ=(fonction) ),
+           PRE1            =SIMP(statut='f',typ=(fonction) ),
+           PRE2            =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_UNIF    =FACT(statut='f',min=1,max='**',
+                               fr="Imposer une meme valeur (inconnue) a des ddls d un emsemble de noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+         ),
+         LIAISON_SOLIDE  =FACT(statut='f',min=1,max='**',
+                               fr="Modéliser une partie indéformable d une structure",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
+         ),
+         LIAISON_OBLIQUE =FACT(statut='f',min=1,max='**',
+                               fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                   UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
+           DX              =SIMP(statut='f',typ=(fonction) ),
+           DY              =SIMP(statut='f',typ=(fonction) ),
+           DZ              =SIMP(statut='f',typ=(fonction) ),
+           DRX             =SIMP(statut='f',typ=(fonction) ),
+           DRY             =SIMP(statut='f',typ=(fonction) ),
+           DRZ             =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_COQUE   =FACT(statut='f',min=1,max='**',
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
+         ),
+         FACE_IMPO       =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI','TEMP','PRE1','PRE2','DNOR','DTAN'),
+                   EXCLUS('DNOR','DX'),
+                   EXCLUS('DNOR','DY'),
+                   EXCLUS('DNOR','DZ'),
+                   EXCLUS('DNOR','DRX'),
+                   EXCLUS('DNOR','DRY'),
+                   EXCLUS('DNOR','DRZ'),
+                   EXCLUS('DTAN','DX'),
+                   EXCLUS('DTAN','DY'),
+                   EXCLUS('DTAN','DZ'),
+                   EXCLUS('DTAN','DRX'),
+                   EXCLUS('DTAN','DRY'),
+                   EXCLUS('DTAN','DRZ'),),
+#  rajout d un mot cle REPERE : / GLOBAL / LOCAL
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           DX              =SIMP(statut='f',typ=(fonction) ),
+           DY              =SIMP(statut='f',typ=(fonction) ),
+           DZ              =SIMP(statut='f',typ=(fonction) ),
+           DRX             =SIMP(statut='f',typ=(fonction) ),
+           DRY             =SIMP(statut='f',typ=(fonction) ),
+           DRZ             =SIMP(statut='f',typ=(fonction) ),
+           GRX             =SIMP(statut='f',typ=(fonction) ),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           PHI             =SIMP(statut='f',typ=(fonction) ),
+           TEMP            =SIMP(statut='f',typ=(fonction) ),
+           PRE1            =SIMP(statut='f',typ=(fonction) ),
+           PRE2            =SIMP(statut='f',typ=(fonction) ),
+           DNOR            =SIMP(statut='f',typ=(fonction) ),
+           DTAN            =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_DDL     =FACT(statut='f',min=1,max='**',
+                               fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
+         ),
+         LIAISON_GROUP   =FACT(statut='f',min=1,max='**',
+                               fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                   EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                   EXCLUS('GROUP_MA_1','NOEUD_2'),
+                   EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                   EXCLUS('GROUP_NO_1','MAILLE_2'),
+                   EXCLUS('MAILLE_1','GROUP_NO_2'),
+                   EXCLUS('MAILLE_1','NOEUD_2'),
+                   EXCLUS('NOEUD_1','GROUP_MA_2'),
+                   EXCLUS('NOEUD_1','MAILLE_2'),
+                   EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+           DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+           DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+           CENTRE          =SIMP(statut='f',typ='R',max=3),
+         ),
+
+         FORCE_NODALE    =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           MX              =SIMP(statut='f',typ=(fonction) ),
+           MY              =SIMP(statut='f',typ=(fonction) ),
+           MZ              =SIMP(statut='f',typ=(fonction) ),
+           ANGL_NAUT       =SIMP(statut='f',typ=(fonction),max=3 ),
+         ),
+         FORCE_INTERNE   =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FORCE_FACE      =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FORCE_ARETE     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           MX              =SIMP(statut='f',typ=(fonction) ),
+           MY              =SIMP(statut='f',typ=(fonction) ),
+           MZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FORCE_CONTOUR   =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           MX              =SIMP(statut='f',typ=(fonction) ),
+           MY              =SIMP(statut='f',typ=(fonction) ),
+           MZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         PRES_REP        =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('PRES','CISA_2D'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           CISA_2D         =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         FORCE_COQUE     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('F1','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('F2','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('F3','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('MF1','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('MF2','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
+#  rajout d un mot cle REPERE : / GLOBAL / LOCAL
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           MX              =SIMP(statut='f',typ=(fonction) ),
+           MY              =SIMP(statut='f',typ=(fonction) ),
+           MZ              =SIMP(statut='f',typ=(fonction) ),
+           F1              =SIMP(statut='f',typ=(fonction) ),
+           F2              =SIMP(statut='f',typ=(fonction) ),
+           F3              =SIMP(statut='f',typ=(fonction) ),
+           MF1             =SIMP(statut='f',typ=(fonction) ),
+           MF2             =SIMP(statut='f',typ=(fonction) ),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",
+                                 into=("SUP","INF","MOY","MAIL") ),
+         ),
+         FORCE_POUTRE    =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','N','VY','VZ'),
+                   PRESENT_ABSENT('FX','N','VY','VZ'),
+                   PRESENT_ABSENT('FY','N','VY','VZ'),
+                   PRESENT_ABSENT('FZ','N','VY','VZ'),
+                   PRESENT_ABSENT('N','FX','FY','FZ'),
+                   PRESENT_ABSENT('VY','FX','FY','FZ'),
+                   PRESENT_ABSENT('VZ','FX','FY','FZ'),),
+#  rajout d un mot cle REPERE : / GLOBAL / LOCAL
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE") ),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           N               =SIMP(statut='f',typ=(fonction) ),
+           VY              =SIMP(statut='f',typ=(fonction) ),
+           VZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FORCE_TUYAU     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+         ),
+         VITE_FACE       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           VNOR            =SIMP(statut='o',typ=(fonction) ),
+         ),
+         IMPE_FACE       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           IMPE            =SIMP(statut='o',typ=(fonction) ),
+         ),
+         ONDE_PLANE      =FACT(statut='f',min=1,max='**',
+           DIRECTION       =SIMP(statut='o',typ='R',max='**'),
+           TYPE_ONDE       =SIMP(statut='o',typ='TXM' ),
+           FONC_SIGNAL     =SIMP(statut='o',typ=(fonction) ),
+           DIST_ORIG       =SIMP(statut='o',typ='R' ),
+         ),
+         EPSI_INIT       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           EPXX            =SIMP(statut='f',typ=(fonction) ),
+           EPYY            =SIMP(statut='f',typ=(fonction) ),
+           EPZZ            =SIMP(statut='f',typ=(fonction) ),
+           EPXY            =SIMP(statut='f',typ=(fonction) ),
+           EPXZ            =SIMP(statut='f',typ=(fonction) ),
+           EPYZ            =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         CONTACT         =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_2','MAILLE_2'),
+                   EXCLUS('DIST_2','COEF_IMPO'),
+                   EXCLUS('DIST_1','COEF_IMPO'),
+                   EXCLUS('COEF_MULT_2','GROUP_MA_1'),
+                   EXCLUS('COEF_MULT_2','MAILLE_1'),
+                   EXCLUS('COEF_IMPO','GROUP_MA_1'),
+                   EXCLUS('COEF_IMPO','MAILLE_1'),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP") ),
+           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                 into=("NON","NODAL","NODAL_SYME","MAIT_ESCL","MAIT_ESCL_SYME") ),
+           RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_VOISIN",
+                                 into=("NOEUD_BOUCLE","NOEUD_VOISIN") ),
+           INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD")),
+           COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+           COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+           MODL_AXIS       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=2),
+           ITER_CONT_MAXI  =SIMP(statut='f',typ='I',defaut=30),
+           ITER_FROT_MAXI  =SIMP(statut='f',typ='I',defaut=2),
+           LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           SEUIL_INIT      =SIMP(statut='f',typ='I',defaut=0),
+           REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
+           NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",into=("MAIT","MAIT_ESCL")),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
+                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION") ),
+           FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+           COULOMB         =SIMP(statut='f',typ='R',max=1,defaut=0.E+0),
+           E_N             =SIMP(statut='f',typ='R' ),
+           E_T             =SIMP(statut='f',typ='R' ),
+           COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
+           VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
+           VECT_NORM_2     =SIMP(statut='f',typ='R',max=3),
+           PROJECTION      =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE",) ),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'  ),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'  ),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'  ),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+           DIST_1          =SIMP(statut='f',typ=(fonction) ),
+           DIST_2          =SIMP(statut='f',typ=(fonction) ),
+           COEF_IMPO       =SIMP(statut='f',typ='R',defaut=0.E+0),
+           COEF_MULT_2     =SIMP(statut='f',typ='R',defaut=1.E+0),
+         ),
+         FLUX_THM_REP    =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUN            =SIMP(statut='f',typ=(fonction) ),
+           FLUN_HYDR1      =SIMP(statut='f',typ=(fonction) ),
+           FLUN_HYDR2      =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther,
+                      fr=" ",
+                      docu="",reentrant='n',
+         regles=(AU_MOINS_UN('CARA_TORSION', ),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",
+                               into=("OUI","NON") ),
+         CARA_TORSION    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
+                    ,fr="Affectation de charges et conditions aux limites thermiques constantes",
+                    docu="U4.44.02-f",reentrant='n',
+      regles=(AU_MOINS_UN('TEMP_IMPO','SOURCE','FLUX_REP','ECHANGE',
+                          'ECHANGE_PAROI','GRAD_TEMP_INIT','LIAISON_DDL','LIAISON_GROUP',
+                          'LIAISON_UNIF','LIAISON_CHAMNO','RAYONNEMENT','LIAISON_MAIL' ),),
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="OUI"),
+         LIAISON_DDL     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD', ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ='R' ),
+         ),
+         TEMP_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP_SUP','TEMP','TEMP_INF'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           TEMP            =SIMP(statut='f',typ='R'),
+           TEMP_INF        =SIMP(statut='f',typ='R'),
+           TEMP_SUP        =SIMP(statut='f',typ='R'), ),
+         LIAISON_UNIF    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+         ),
+         LIAISON_CHAMNO  =FACT(statut='f',min=01,max='**',
+           CHAM_NO         =SIMP(statut='o',typ=cham_no),# CO()# "il faut definir une structure de donnee generique chamno"
+           COEF_IMPO       =SIMP(statut='o',typ='R' ),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+         ),
+         SOURCE          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('SOUR','SOUR_CALCULEE',),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('SOUR_CALCULEE','TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SOUR            =SIMP(statut='f',typ='R'),
+           SOUR_CALCULEE   =SIMP(statut='f',typ=(cham_elem_sour_r) ),
+         ),
+         FLUX_REP        =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_PRESENT('CARA_TORSION','GROUP_MA'),
+                   AU_MOINS_UN('FLUN','FLUN_INF','FLUN_SUP','CARA_TORSION') ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUN            =SIMP(statut='f',typ='R'),
+           FLUN_INF        =SIMP(statut='f',typ='R'),
+           FLUN_SUP        =SIMP(statut='f',typ='R'),
+           CARA_TORSION    =SIMP(statut='f',typ=tabl_aire_int ),
+         ),
+         ECHANGE         =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('COEF_H','COEF_H_INF','COEF_H_SUP'),
+                   ENSEMBLE('COEF_H','TEMP_EXT',),
+                   ENSEMBLE('COEF_H_INF','TEMP_EXT_INF'),
+                             ENSEMBLE('COEF_H_SUP','TEMP_EXT_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           COEF_H          =SIMP(statut='f',typ='R'),
+           TEMP_EXT        =SIMP(statut='f',typ='R'),
+           COEF_H_INF      =SIMP(statut='f',typ='R'),
+           TEMP_EXT_INF    =SIMP(statut='f',typ='R'),
+           COEF_H_SUP      =SIMP(statut='f',typ='R'),
+           TEMP_EXT_SUP    =SIMP(statut='f',typ='R'),
+         ),
+         ECHANGE_PAROI   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           COEF_H          =SIMP(statut='f',typ='R'),
+           TRAN            =SIMP(statut='f',typ='R',min=2,max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',min=1,max=3),
+           CENTRE          =SIMP(statut='f',typ='R',min=2,max=3),
+                         ),
+         GRAD_TEMP_INIT  =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FLUX_X','FLUX_Y','FLUX_Z'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUX_X          =SIMP(statut='f',typ='R' ),
+           FLUX_Y          =SIMP(statut='f',typ='R' ),
+           FLUX_Z          =SIMP(statut='f',typ='R' ),
+                         ),
+         LIAISON_GROUP   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                             EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                             EXCLUS('GROUP_MA_1','NOEUD_2'),
+                   EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                             EXCLUS('GROUP_NO_1','MAILLE_2'),
+                             EXCLUS('MAILLE_1','GROUP_NO_2'),
+                             EXCLUS('MAILLE_1','NOEUD_2'),
+                             EXCLUS('NOEUD_1','GROUP_MA_2'),
+                             EXCLUS('NOEUD_1','MAILLE_2'),
+                             EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+           DDL_1           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+           DDL_2           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP",) ),
+           COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ='R' ),
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max='**'),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**'),
+           CENTRE          =SIMP(statut='f',typ='R',max='**'),
+         ),
+         CONVECTION      =FACT(statut='f',min=01,max='**',
+           VITESSE         =SIMP(statut='o',typ=(cham_no_depl_r) ),
+         ),
+         RAYONNEMENT     =FACT(statut='f',min=01,max='**',
+           fr="Attention, exprimer les températures en Celsius si rayonnement",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SIGMA           =SIMP(statut='o',typ='R'),
+           EPSILON         =SIMP(statut='o',typ='R'),
+           TEMP_EXT        =SIMP(statut='o',typ='R'),
+         ),
+         LIAISON_MAIL    =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA_MAIT','MAILLE_MAIT'),
+                   AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL',
+                               'NOEUD_ESCL'),),
+           GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_MAIT     =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_ESCL     =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_ESCL      =SIMP(statut='f',typ=no,max='**'),
+           TRAN            =SIMP(statut='f',typ='R',max='**' ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**' ),
+           CENTRE          =SIMP(statut='f',typ='R',max='**' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
+                     fr="Affectation de charges et conditions aux limites thermiques fonction dune grandeur (temps, ...)",
+                     docu="U4.44.02-f",reentrant='n',
+      regles=(AU_MOINS_UN('TEMP_IMPO','SOURCE','FLUX_REP','FLUX_NL','ECHANGE',
+                          'ECHANGE_PAROI','LIAISON_DDL','LIAISON_GROUP','LIAISON_UNIF',
+                          'GRAD_TEMP_INIT','RAYONNEMENT'),),
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         LIAISON_DDL     =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
+         ),
+         TEMP_IMPO       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP_SUP','TEMP','TEMP_INF','EVOL_THER'),
+                   PRESENT_ABSENT('EVOL_THER','TEMP','TEMP_INF','TEMP_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           EVOL_THER       =SIMP(statut='f',typ=(evol_ther) ),
+           DDL             =SIMP(statut='f',typ='TXM',into=("TEMP",) ),
+           TEMP            =SIMP(statut='f',typ=(fonction) ),
+           TEMP_INF        =SIMP(statut='f',typ=(fonction) ),
+           TEMP_SUP        =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_UNIF    =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+         ),
+         SOURCE          =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SOUR            =SIMP(statut='o',typ=(fonction) ),
+         ),
+         FLUX_REP        =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FLUN','FLUN_INF','FLUN_SUP','FLUX_X','FLUX_Y','FLUX_Z'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUN            =SIMP(statut='f',typ=(fonction) ),
+           FLUN_INF        =SIMP(statut='f',typ=(fonction) ),
+           FLUN_SUP        =SIMP(statut='f',typ=(fonction) ),
+           FLUX_X          =SIMP(statut='f',typ=(fonction) ),
+           FLUX_Y          =SIMP(statut='f',typ=(fonction) ),
+           FLUX_Z          =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FLUX_NL         =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUN            =SIMP(statut='o',typ=(fonction) ),
+         ),
+         ECHANGE         =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('COEF_H','COEF_H_INF','COEF_H_SUP'),
+                   ENSEMBLE('COEF_H','TEMP_EXT'),
+                   ENSEMBLE('COEF_H_INF','TEMP_EXT_INF'),
+                   ENSEMBLE('COEF_H_SUP','TEMP_EXT_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           COEF_H          =SIMP(statut='f',typ=(fonction) ),
+           TEMP_EXT        =SIMP(statut='f',typ=(fonction) ),
+           COEF_H_INF      =SIMP(statut='f',typ=(fonction) ),
+           TEMP_EXT_INF    =SIMP(statut='f',typ=(fonction) ),
+           COEF_H_SUP      =SIMP(statut='f',typ=(fonction) ),
+           TEMP_EXT_SUP    =SIMP(statut='f',typ=(fonction) ),
+         ),
+         ECHANGE_PAROI   =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                        UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           COEF_H          =SIMP(statut='o',typ=(fonction) ),
+           TRAN            =SIMP(statut='f',typ='R',min=2,max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',min=1,max=3),
+           CENTRE          =SIMP(statut='f',typ='R',min=2,max=3),
+         ),
+         GRAD_TEMP_INIT  =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FLUX_X','FLUX_Y','FLUX_Z'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUX_X          =SIMP(statut='f',typ=(fonction) ),
+           FLUX_Y          =SIMP(statut='f',typ=(fonction) ),
+           FLUX_Z          =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_GROUP   =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                             EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                        EXCLUS('GROUP_MA_1','NOEUD_2'),
+                   EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                        EXCLUS('GROUP_NO_1','MAILLE_2'),
+                        EXCLUS('MAILLE_1','GROUP_NO_2'),
+                        EXCLUS('MAILLE_1','NOEUD_2'),
+                        EXCLUS('NOEUD_1','GROUP_MA_2'),
+                        EXCLUS('NOEUD_1','MAILLE_2'),
+                        EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+           DDL_1           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+           DDL_2           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max='**'),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**'),
+           CENTRE          =SIMP(statut='f',typ='R',max='**'),
+         ),
+         CONVECTION      =FACT(statut='f',min=1,max='**',
+           VITESSE         =SIMP(statut='o',typ=(cham_no_depl_r) ),
+         ),
+         RAYONNEMENT     =FACT(statut='f',min=1,max='**',
+           fr="Attention, exprimer les températures en Celsius si rayonnement",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SIGMA           =SIMP(statut='o',typ=(fonction) ),
+           EPSILON         =SIMP(statut='o',typ=(fonction) ),
+           TEMP_EXT        =SIMP(statut='o',typ=(fonction) ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
+                   fr="Affectation de caractéristiques de matériaux à un maillage",
+                         docu="U4.43.03-f",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         MODELE          =SIMP(statut='f',typ=modele),
+         AFFE            =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           MATER           =SIMP(statut='o',typ=mater),
+           TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR VABHHTS J.TESELET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-f1",
+                 fr="Affectation des éléments finis sur le maillage",reentrant='n',
+         regles=(AU_MOINS_UN('AFFE','AFFE_SOUS_STRUC'),),
+         MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',max=2,into=("MAILLE","NOEUD") ),
+         AFFE_SOUS_STRUC =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('TOUT','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PHENOMENE       =SIMP(statut='f',typ='TXM',defaut="MECANIQUE",into=("MECANIQUE",) ),
+         ),
+         AFFE            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           PHENOMENE       =SIMP(statut='o',typ='TXM',
+                                 into=("MECANIQUE","THERMIQUE","ACOUSTIQUE","NON_LOCAL") ),
+                b_mecanique     =BLOC( condition = "PHENOMENE=='MECANIQUE'",
+                                        fr="modelisations mécaniques",
+                    MODELISATION    =SIMP(statut='o',typ='TXM', into=(
+                                                                      "2D_CONTACT",
+                                                                      "2D_DIS_T",
+                                                                      "2D_DIS_TR",
+                                                                      "2D_FLUI_ABSO",
+                                                                      "2D_FLUI_PESA",
+                                                                      "2D_FLUI_STRU",
+                                                                      "2D_FLUIDE",
+                                                                      "3D",
+                                                                      "3D_ABSO",
+                                                                      "3D_CONTACT",
+                                                                      "3D_FAISCEAU",
+                                                                      "3D_FLUI_ABSO",
+                                                                      "3D_FLUIDE",
+                                                                      "3D_HHM" ,
+                                                                      "3D_HM",
+                                                                      "3D_INCO",
+                                                                      "3D_JOINT_CT",
+                                                                      "3D_SI",
+                                                                      "3D_THH",
+                                                                      "3D_THHM",
+                                                                      "3D_THM",
+                                                                      "APPUI_REP",
+                                                                      "ASSE_GRIL",
+                                                                      "AXIS",
+                                                                      "AXIS_FLUI_STRU",
+                                                                      "AXIS_FLUIDE",
+                                                                      "AXIS_FOURIER",
+                                                                      "AXIS_HHM",
+                                                                      "AXIS_HM",
+                                                                      "AXIS_INCO",
+                                                                      "AXIS_SI",
+                                                                      "AXIS_THH",
+                                                                      "AXIS_THHM",
+                                                                      "AXIS_THM",
+                                                                      "BARRE",
+                                                                      "2D_BARRE",
+                                                                      "C_PLAN",
+                                                                      "C_PLAN_SI",
+                                                                      "CABLE",
+                                                                      "CABLE_POULIE",
+                                                                      "COQUE_3D",
+                                                                      "COQUE_AXIS",
+                                                                      "COQUE_C_PLAN",
+                                                                      "COQUE_D_PLAN",
+                                                                      "CONT_DVP_2D",
+                                                                      "CONT_DVP_3D",
+                                                                      "D_PLAN",
+                                                                      "D_PLAN_ABSO",
+                                                                      "D_PLAN_HHM",
+                                                                      "D_PLAN_HM",
+                                                                      "D_PLAN_INCO",
+                                                                      "D_PLAN_SI",
+                                                                      "D_PLAN_THH",
+                                                                      "D_PLAN_THHM",
+                                                                      "D_PLAN_THM",
+                                                                      "DIS_T",
+                                                                      "DIS_TR",
+                                                                      "DKT",
+                                                                      "DST",
+                                                                      "FLUI_STRU",
+                                                                      "GRILLE",
+                                                                      "POU_C_T",
+                                                                      "POU_D_E",
+                                                                      "POU_D_EM",
+                                                                      "POU_D_T",
+                                                                      "POU_D_T_GD",
+                                                                      "POU_D_TG",
+                                                                      "Q4G",
+                                                                      "TUYAU",
+                                                                      "TUYAU_3M",
+                                                                      "TUYAU_6M"
+                                                                     )  )  ),
+
+                b_thermique     =BLOC( condition = "PHENOMENE=='THERMIQUE'",
+                                        fr="modelisations thermiques",
+                    MODELISATION    =SIMP(statut='o',typ='TXM',into=(
+                                                                      "3D",
+                                                                      "3D_DIAG",
+                                                                      "AXIS",
+                                                                      "AXIS_DIAG",
+                                                                      "AXIS_FOURIER",
+                                                                      "COQUE",
+                                                                      "COQUE_AXIS",
+                                                                      "COQUE_PLAN",
+                                                                      "PLAN",
+                                                                      "PLAN_DIAG",
+                                                                      ),),),
+
+                b_acoustique    =BLOC( condition = "PHENOMENE=='ACOUSTIQUE'",
+                                        fr="modelisations acoustiques",
+                     MODELISATION    =SIMP(statut='o',typ='TXM',into=(
+                                                                       "3D",
+                                                                       "PLAN"
+                                                                       ), ),),
+
+                b_non_local     =BLOC( condition = "PHENOMENE=='NON_LOCAL'",
+                                        fr="modelisations non locales",
+                     MODELISATION    =SIMP(statut='o',typ='TXM',into=(
+                                                                      "3D",
+                                                                      "AXIS",
+                                                                      "C_PLAN",
+                                                                      "D_PLAN",
+                                                                     ) ), ),
+         ),
+) ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+AIDE=PROC(nom="AIDE",op=42,docu="U4.02.01-f",
+          fr="Interrogation sur le catalogue des commandes et les concepts produits",
+         regles=(AU_MOINS_UN('COMMANDE','CONCEPT','TYPE_ELEM', ),),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         TYPE_ELEM       =FACT(fr="couple type_elem option",
+                               statut='f',min=01,max=01,
+           INITEL          =SIMP(statut='f',typ='TXM',defaut="NON",
+                                 into=("OUI","NON",) ),
+         ),
+         COMMANDE        =FACT(statut='f',min=01,max='**',
+           NOM             =SIMP(fr="liste des noms de commande", 
+                                 statut='f',typ='TXM',max='**',defaut="*"),
+           OPTION          =SIMP(fr="option d'édition de commande",
+                                 statut='f',typ='TXM',defaut="CATALOGUE",
+                                 into=("CATALOGUE","A_REMPLIR","NUMERO",) ),
+         ),
+         CONCEPT         =FACT(statut='f',min=01,max='**',
+           NOM             =SIMP(fr="liste des noms de concept", 
+                                 statut='f',typ='TXM',max='**',defaut="*"),
+           OPTION          =SIMP(fr="option d'édition de concept",
+                                 statut='f',typ='TXM',defaut="TOUT_TYPE",
+                                 into=("TOUT_TYPE","CREER","A_CREER",) ),
+         ),
+) ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage,
+                   fr="Assembler deux maillages sous un seul nom",
+                   docu="U4.23.03-e",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage,min=2,max=2 ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=matr_asse_gene_r,
+                    fr="Assemblage des matrices généralisées de macro éléments pour construction de la matrice globale généralisée",
+                    docu="U4.65.04-d",reentrant='n',
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         OPTION          =SIMP(statut='o',typ='TXM',into=("RIGI_GENE","MASS_GENE","AMOR_GENE") ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def asse_matrice_prod(MATR_ELEM,**args):
+  if AsType(MATR_ELEM) == matr_elem_depl_r : return matr_asse_depl_r
+  if AsType(MATR_ELEM) == matr_elem_depl_c : return matr_asse_depl_c
+  if AsType(MATR_ELEM) == matr_elem_temp_r : return matr_asse_temp_r
+  if AsType(MATR_ELEM) == matr_elem_pres_c : return matr_asse_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+ASSE_MATRICE=OPER(nom="ASSE_MATRICE",op=12,sd_prod=asse_matrice_prod,
+                  fr="Construction d une matrice assemblée",docu="U4.61.22-f",reentrant='n',
+         MATR_ELEM       =SIMP(statut='o',
+                               typ=(matr_elem_depl_r,matr_elem_depl_c,matr_elem_temp_r,matr_elem_pres_c) ),
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl),
+         CHAR_CINE       =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene,
+                    fr="Assemblage de vecteurs de chargement en coordonnées généralisées",
+                    docu="U4.65.05-d",reentrant='n',
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         CHAR_SOUS_STRUC =FACT(statut='o',min=01,max='**',
+           SOUS_STRUC      =SIMP(statut='o',typ='TXM' ),
+           VECT_ASSE       =SIMP(statut='o',typ=cham_no_depl_r ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def asse_vecteur_prod(VECT_ELEM,**args):
+  if AsType(VECT_ELEM) == vect_elem_depl_r : return cham_no_depl_r
+  if AsType(VECT_ELEM) == vect_elem_temp_r : return cham_no_temp_r
+  if AsType(VECT_ELEM) == vect_elem_pres_r : return cham_no_pres_r
+  if AsType(VECT_ELEM) == vect_elem_pres_c : return cham_no_pres_c
+  raise AsException("type de concept resultat non prevu ")
+
+ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=asse_vecteur_prod,
+                  fr="Assemblage d un second membre",docu="U4.61.23-f",reentrant='n',
+         VECT_ELEM       =SIMP(statut='o',typ=vect_elem,max='**'),
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2,) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8,
+                     fr="Création d'une liste d'amortissements modaux calculés selon la règle du RCC-G",
+                     docu="U4.52.13-c",reentrant='n',
+         ENER_SOL        =FACT(statut='o',min=01,max=01,
+           regles=(UN_PARMI('GROUP_NO_RADIER','GROUP_MA_RADIER'),
+                   PRESENT_ABSENT('COEF_GROUP','FONC_GROUP'),
+#  Peut-on remplacer les deux règles suivantes par un ENSEMBLE_('KRX','KRY','KRZ')
+                   PRESENT_PRESENT('KRX','KRY'),
+                   PRESENT_PRESENT('KRX','KRZ'),
+                   PRESENT_ABSENT('COOR_CENTRE','NOEUD_CENTRE'),
+                   PRESENT_ABSENT('GROUP_NO_CENTRE','NOEUD_CENTRE'),
+                   PRESENT_ABSENT('GROUP_NO_CENTRE','COOR_CENTRE'),),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","RIGI_PARASOL") ),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+           GROUP_NO_RADIER =SIMP(statut='f',typ=grno,max='**'),
+           GROUP_MA_RADIER =SIMP(statut='f',typ=grma,max='**'),
+           FONC_GROUP      =SIMP(statut='f',typ=fonction ),
+           COEF_GROUP      =SIMP(statut='f',typ='R',max='**'),
+           KX              =SIMP(statut='o',typ='R' ),
+           KY              =SIMP(statut='o',typ='R' ),
+           KZ              =SIMP(statut='o',typ='R' ),
+           KRX             =SIMP(statut='f',typ='R' ),
+           KRY             =SIMP(statut='f',typ='R' ),
+           KRZ             =SIMP(statut='f',typ='R' ),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+           COOR_CENTRE     =SIMP(statut='f',typ='R',max=03),
+         ),
+         AMOR_INTERNE    =FACT(statut='o',min=01,max=01,
+           ENER_POT        =SIMP(statut='o',typ=tabl_ener_pot ),
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+           AMOR_REDUIT     =SIMP(statut='o',typ='R',max='**'),
+         ),
+         AMOR_SOL        =FACT(statut='o',min=01,max=01,
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FONC_AMOR_GEO   =SIMP(statut='o',typ=fonction,max='**' ),
+           HOMOGENE        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 0.3 ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+def calc_cham_elem_prod(OPTION,**args):
+
+# options mecaniques
+  if OPTION == "DEGE_ELNO_DEPL" : return cham_elem_epsi_r
+  if OPTION == "ECIN_ELEM_DEPL" : return cham_elem_ener_r
+  if OPTION == "EFGE_ELNO_CART" : return cham_elem_sief_r
+  if OPTION == "EFGE_ELNO_DEPL" : return cham_elem_sief_r
+  if OPTION == "ENDO_ELNO_SIGM" : return cham_elem_sief_r
+  if OPTION == "EPOT_ELEM_DEPL" : return cham_elem_ener_r
+  if OPTION == "ENEL_ELGA" :      return cham_elem_ener_r
+  if OPTION == "ENEL_ELNO_ELGA" : return cham_elem_ener_r
+  if OPTION == "EPSI_ELNO_DEPL" : return cham_elem_epsi_r
+  if OPTION == "EQUI_ELGA_EPSI" : return cham_elem_epsi_r
+  if OPTION == "EQUI_ELGA_SIGM" : return cham_elem_sief_r
+  if OPTION == "EQUI_ELNO_EPSI" : return cham_elem_epsi_r
+  if OPTION == "EQUI_ELNO_SIGM" : return cham_elem_sief_r
+  if OPTION == "PRES_DBEL_DEPL" : return cham_elem_dbel_r
+  if OPTION == "SIEF_ELGA_DEPL" : return cham_elem_sief_r
+  if OPTION == "SIEF_ELGA_LAGR" : return cham_elem_sief_r
+  if OPTION == "SIGM_ELNO_CART" : return cham_elem_sief_r
+  if OPTION == "SIGM_ELNO_DEPL" : return cham_elem_sief_r
+  if OPTION == "SIGM_ELNO_LAGR" : return cham_elem_sief_r
+  if OPTION == "SIPO_ELNO_DEPL" : return cham_elem_sief_r
+
+# options thermiques
+
+  if OPTION == "FLUX_ELGA_TEMP" : return cham_elem_flux_r
+  if OPTION == "FLUX_ELNO_TEMP" : return cham_elem_flux_r
+  if OPTION == "SOUR_ELGA_ELEC" : return cham_elem_sour_r
+
+# options acoustiques
+
+  if OPTION == "PRES_ELNO_DBEL" : return cham_elem_dbel_r
+  if OPTION == "PRES_ELNO_REEL" : return cham_elem_pres_r
+  if OPTION == "PRES_ELNO_IMAG" : return cham_elem_pres_r
+
+# autres options
+
+  if OPTION == "COOR_ELGA" :      return cham_elem_geom_r
+
+  raise AsException("type de concept resultat non prevu")
+
+CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=calc_cham_elem_prod,
+                    fr="Calcul de champs par éléments à partir de champs solution ou de champs par éléments",
+                    docu="U4.81.03-f",reentrant='n',
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+
+         regles=(EXCLUS('TOUT','GROUP_MA',),EXCLUS('TOUT','MAILLE',),),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+#
+#
+#  introduire un mot cle de type modelisation : mécanique,thermique,...
+#
+
+         OPTION          =SIMP(statut='o',typ='TXM',
+                               into=("DEGE_ELNO_DEPL","ECIN_ELEM_DEPL","EFGE_ELNO_CART",
+                                     "EFGE_ELNO_DEPL","ENDO_ELNO_SIGM","EPOT_ELEM_DEPL",
+                                     "ENEL_ELGA",     "ENEL_ELNO_ELGA","EPSI_ELNO_DEPL",
+                                     "EQUI_ELGA_EPSI","EQUI_ELGA_SIGM","EQUI_ELNO_EPSI",
+                                     "EQUI_ELNO_SIGM","PRES_DBEL_DEPL","SIEF_ELGA_DEPL",
+                                     "SIEF_ELGA_LAGR","SIGM_ELNO_CART","SIGM_ELNO_DEPL",
+                                     "SIGM_ELNO_LAGR","SIPO_ELNO_DEPL",
+                                     "FLUX_ELGA_TEMP","FLUX_ELNO_TEMP","SOUR_ELGA_ELEC",
+                                     "PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
+                                     "COOR_ELGA"), ),
+
+         b_dege_elno_depl  =BLOC(condition="OPTION=='DEGE_ELNO_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+           PLAN            =SIMP(statut='o',typ='TXM',defaut="MAIL", into=("SUP","INF","MOY","MAIL"), ),
+         ),
+
+         b_ecin_elem_depl  =BLOC(condition="OPTION=='ECIN_ELEM_DEPL'",
+           regles=(UN_PARMI('VITE','DEPL',),ENSEMBLE('DEPL','FREQ',),),
+           FREQ            =SIMP(statut='f',typ='R'),
+           VITE            =SIMP(statut='f',typ=cham_no_depl_r),
+           DEPL            =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_depl_c)),
+         ),
+
+         b_efge_elno_cart  =BLOC(condition="OPTION=='EFGE_ELNO_CART'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,) ),
+           PLAN            =SIMP(statut='o',typ='TXM',defaut="MAIL", into=("SUP","INF","MOY","MAIL"), ),
+         ),
+
+         b_efge_elno_depl  =BLOC(condition="OPTION=='EFGE_ELNO_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+           PLAN            =SIMP(statut='o',typ='TXM',defaut="MAIL", into=("SUP","INF","MOY","MAIL"), ),
+         ),
+
+         b_endo_elno_sigm  =BLOC(condition="OPTION=='ENDO_ELNO_SIGM'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,) ),
+         ),
+
+         b_epot_elem_depl  =BLOC(condition="OPTION=='EPOT_ELEM_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+         ),
+
+         b_enel_elga       =BLOC(condition="OPTION=='ENEL_ELGA'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,) ),
+         ),
+
+         b_enel_elno_elga  =BLOC(condition="OPTION=='ENEL_ELNO_ELGA'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,) ),
+         ),
+
+         b_epsi_elno_depl  =BLOC(condition="OPTION=='EPSI_ELNO_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+         ),
+
+         b_equi_elga_epsi  =BLOC(condition="OPTION=='EQUI_ELGA_EPSI'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_epsi_r,) ),
+         ),
+
+         b_equi_elga_sigm  =BLOC(condition="OPTION=='EQUI_ELGA_SIGM'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,) ),
+         ),
+
+         b_equi_elno_epsi  =BLOC(condition="OPTION=='EQUI_ELNO_EPSI'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_epsi_r,) ),
+         ),
+
+         b_equi_elno_sigm  =BLOC(condition="OPTION=='EQUI_ELNO_SIGM'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,) ),
+         ),
+
+         b_pres_dbel_depl  =BLOC(condition="OPTION=='PRES_DBEL_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_c,)),
+         ),
+
+         b_sief_elga_depl  =BLOC(condition="OPTION=='SIEF_ELGA_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+         ),
+
+         b_sief_elga_lagr  =BLOC(condition="OPTION=='SIEF_ELGA_LAGR'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+           THETA           =SIMP(statut='o',typ=(theta_geom,)),
+           PROPAGATION     =SIMP(statut='f',typ='R',defaut=0.E+0),
+         ),
+
+         b_sigm_elno_cart  =BLOC(condition="OPTION=='SIGM_ELNO_CART'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,) ),
+         ),
+
+         b_sigm_elno_depl  =BLOC(condition="OPTION=='SIGM_ELNO_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,) ),
+         ),
+
+         b_sigm_elno_lagr  =BLOC(condition="OPTION=='SIGM_ELNO_LAGR'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+           THETA           =SIMP(statut='o',typ=(theta_geom,)),
+           PROPAGATION     =SIMP(statut='f',typ='R',defaut=0.E+0),
+         ),
+
+         b_sipo_elno_depl  =BLOC(condition="OPTION=='SIPO_ELNO_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+         ),
+
+         b_thermique  =BLOC(condition="OPTION in ('FLUX_ELNO_TEMP','FLUX_ELGA_TEMP','SOUR_ELGA_ELEC',)",
+           TEMP            =SIMP(statut='o',typ=(cham_no_temp_r,)),
+         ),
+
+         b_acoustique  =BLOC(condition="OPTION in ('PRES_ELNO_DBEL','PRES_ELNO_REEL','PRES_ELNO_IMAG',)",
+           PRES            =SIMP(statut='o',typ=(cham_no_pres_c,)),
+         ),
+
+
+
+         EXCIT           =FACT(statut='f',min=01,max='**',
+               regles=(EXCLUS('FONC_MULT','COEF_MULT', ),),
+               CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou)),
+               FONC_MULT       =SIMP(statut='f',typ=fonction),
+               COEF_MULT       =SIMP(statut='f',typ='R'), ),
+
+         INST            =SIMP(statut='f',typ='R',defaut= 0.E+0),
+         ACCE            =SIMP(statut='f',typ=cham_no_depl_r),
+         NUME_COUCHE     =SIMP(statut='f',typ='I',defaut= 1),
+         NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY") ),
+         MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0 ),
+         ANGLE           =SIMP(statut='f',typ='I',defaut= 0),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def calc_char_cine_prod(CHAR_CINE,**args):
+  if AsType(CHAR_CINE) == char_cine_meca : return cham_no_depl_r
+  if AsType(CHAR_CINE) == char_cine_ther : return cham_no_temp_r
+  if AsType(CHAR_CINE) == char_cine_acou : return cham_no_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=calc_char_cine_prod,
+                    fr="Calcul des seconds membres associés à des charges cinématiques (conditions aux limites non dualisées)",
+                    docu="U4.61.03-e",reentrant='n',
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl ),
+         CHAR_CINE       =SIMP(statut='o',typ=(char_cine_meca,char_cine_ther,char_cine_acou ) ),
+         INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/03/2001   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def calc_char_seisme_prod(MATR_MASS,**args ):
+  if AsType(MATR_MASS) == matr_asse_depl_r : return cham_no_depl_r
+  raise AsException("type de concept resultat non prevu")
+
+CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op=  92,sd_prod=calc_char_seisme_prod,
+                      docu="U4.63.01-e",reentrant='n',
+         regles=(UN_PARMI('MONO_APPUI','MODE_STAT' ),),
+         MATR_MASS       =SIMP(statut='o',typ=matr_asse_depl_r,fr="Matrice de masse" ),
+         DIRECTION       =SIMP(statut='o',typ='R',max=06,fr="Directions du séisme imposé"),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),         
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,) ),
+         b_mode_stat     =BLOC ( condition = "MODE_STAT != None",
+           regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 04/12/2001   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+def calc_elem_prod(RESULTAT,**args):
+   if AsType(RESULTAT) != None : return AsType(RESULTAT)
+   raise AsException("type de concept resultat non prevu")
+
+CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,docu="U4.81.01-f1",reentrant='f',
+                    fr="Compléter un résultat en calculant des champs par éléments (contraintes, déformations,... )",
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                        'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+
+         LIST_ORDRE      =SIMP(statut='f',typ=listis),
+
+         OPTION          =SIMP(statut='o',typ='TXM',max='**',
+                               into=("EFGE_ELNO_DEPL","EPOT_ELEM_DEPL","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
+                                     "SIGM_ELNO_TUYO","SIGM_ELNO_CART","DEGE_ELNO_DEPL","EFGE_ELNO_CART",
+                                     "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL",
+                                     "EPME_ELNO_DEPL","EPME_ELGA_DEPL","EPMG_ELNO_DEPL","EPMG_ELGA_DEPL",
+                                     "EPSP_ELNO","EPSP_ELGA","ECIN_ELEM_DEPL","SIPO_ELNO_DEPL",
+                                     "EPGR_ELNO","EPGR_ELGA","DURT_ELGA_META","DURT_ELNO_META",
+                                     "SIGM_ELNO_COQU","SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",
+                                     "SIGM_NOZ1_ELGA","ERRE_ELEM_NOZ1","SIGM_NOZ2_ELGA","ERRE_ELEM_NOZ2",
+                                     "VNOR_ELEM_DEPL","SIRE_ELNO_DEPL","ERRE_ELGA_NORE","ERRE_ELNO_ELGA",
+                                     "VARI_ELNO_ELGA","VARI_ELNO_TUYO","EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
+                                     "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
+                                     "DCHA_ELNO_SIGM","DCHA_ELGA_SIGM","RADI_ELNO_SIGM","RADI_ELGA_SIGM",
+                                     "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","ENEL_ELGA","ENEL_ELNO_ELGA","SIEF_ELNO_ELGA",
+                                     "DEUL_ELGA_TEMP","DETE_ELNO_DLTE","DEUL_ELGA_DEPL","DEDE_ELNO_DLDE",
+                                     "DESI_ELNO_DLSI","PMPB_ELNO_SIEF","PMPB_ELGA_SIEF",
+                                     "FLUX_ELGA_TEMP","FLUX_ELNO_TEMP","HYDR_ELNO_ELGA",
+                                     "SOUR_ELGA_ELEC",
+                                     "PRES_ELNO_DBEL","PRES_DBEL_DEPL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
+                                     "INTE_ELNO_ACTI","INTE_ELNO_REAC","ERTH_ELEM_TEMP","ERTH_ELNO_ELEM"
+                                     ) ),
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,mode_meca,
+                                    mode_stat,mode_stat_depl,mode_stat_acce,mode_stat_forc,
+                                    evol_noli,mult_elas,fourier_elas,
+                                               evol_ther,base_modale,
+                                               acou_harmo,mode_acou,mode_flamb) ),
+         EXCIT           =FACT(statut='f',min=1,max='**',
+             regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+             CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),
+             FONC_MULT       =SIMP(statut='f',typ=fonction),
+             FONC_MULT_C     =SIMP(statut='f',typ=fonction_c),
+             COEF_MULT       =SIMP(statut='f',typ='R'),
+             COEF_MULT_C     =SIMP(statut='f',typ='C'),
+             PHAS_DEG        =SIMP(statut='f',typ='R'),
+             PUIS_PULS       =SIMP(statut='f',typ='I'),
+             TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+         ),
+         NORME           =SIMP(statut='f',typ='TXM',defaut="VMIS",
+                               into=("VMIS","TOTAL","VMIS_CINE","TOTAL_CINE") ),
+         NUME_COUCHE     =SIMP(statut='f',typ='I',defaut= 1 ),
+         NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY") ),
+          
+         ANGLE           =SIMP(statut='f',typ='I',defaut= 0 ),
+         PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL") ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters"),
+         TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),
+         
+         TEMP_INIT       =FACT(statut='f',min=1,max='**',
+             regles=(EXCLUS('META_INIT','EVOL_THER'),),
+             META_INIT       =SIMP(statut='f',typ=carte_meta_r),
+             EVOL_THER       =SIMP(statut='f',typ=evol_ther,),
+             NUME_INIT       =SIMP(statut='f',typ='I'),
+         ),
+         PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57,),         
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),                 
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=cham_elem_dommag,reentrant='n',
+                  fr="Calcul d un champ de dommage subi par une structure",
+                  docu="U4.83.02-c",
+      regles=(PRESENT_PRESENT('DOMMAGE','MATER', ),),
+         OPTION          =SIMP(statut='o',typ='TXM',
+                               into=("DOMA_ELNO_SIGM","DOMA_ELGA_SIGM",
+                                     "DOMA_ELNO_EPSI","DOMA_ELGA_EPSI",
+                                     "DOMA_ELNO_EPME","DOMA_ELGA_EPME") ),
+         HISTOIRE        =FACT(statut='o',min=01,max=01,
+           RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,evol_noli) ),
+           EQUI_GD         =SIMP(statut='f',typ='TXM',defaut="VMIS_SG",into=("VMIS_SG","INVA_2_SG") ),
+         ),
+         DOMMAGE         =SIMP(statut='o',typ='TXM',
+                               into=("WOHLER","MANSON_COFFIN","TAHERI_MANSON","TAHERI_MIXTE",) ),
+         MATER           =SIMP(statut='o',typ=(mater) ),
+         TAHERI_NAPPE    =SIMP(statut='f',typ=(fonction) ),
+         TAHERI_FONC     =SIMP(statut='f',typ=(fonction) ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 23/04/2001   AUTEUR MCOURTOI M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu,
+                    docu="U4.66.02-d",reentrant='n',
+         VITE_FLUI       =FACT(statut='o',min=01,max=01,
+                               fr="Définir la plage de vitesse fluide étudiée",
+           VITE_MIN        =SIMP(statut='o',typ='R' ),
+           VITE_MAX        =SIMP(statut='o',typ='R' ),
+           NB_POIN         =SIMP(statut='o',typ='I' ),
+         ),
+         BASE_MODALE     =FACT(statut='o',min=01,max=01,
+                               
+           regles=(UN_PARMI('AMOR_REDUIT','AMOR_UNIF'),),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           AMOR_UNIF       =SIMP(statut='f',typ='R' ),
+         ),
+         TYPE_FLUI_STRU  =SIMP(statut='o',typ=type_flui_stru ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+                               fr="Choix des informations à imprimer dans le fichier RESULTAT",
+           PARA_COUPLAGE   =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           DEFORMEE        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=fonction,
+                      docu="U4.32.01-d1",reentrant='f',
+         regles=(UN_PARMI('VALE_R','LIST_PARA'),),
+         FONCTION        =SIMP(statut='o',typ=fonction ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE_R          =SIMP(statut='f',typ='R',max='**'),
+         LIST_PARA       =SIMP(statut='f',typ=listr8 ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG","INT") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("EXCLU","CONSTANT","LINEAIRE","INTERPRE") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("EXCLU","CONSTANT","LINEAIRE","INTERPRE") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE MCOURTOI M.COURTOIS
+def calc_fonction_prod(DERIVE,EXTRACTION,INTEGRE,RMS,NOCI_SEISME,MAX,COMB,COMB_C,ENVELOPPE,SPEC_OSCI,ASSE,FFT,COMPOSE,**args):
+  if (RMS != None)        : return tabl_fonc_rms
+  if (MAX != None)        : return tabl_fonc_max
+  if (NOCI_SEISME != None): return tabl_fonc_noci
+  if (INTEGRE != None)    : return fonction
+  if (DERIVE != None)     : return fonction
+  if (COMB != None)       : return fonction
+  if (ENVELOPPE != None)  : return fonction
+  if (EXTRACTION != None) : return fonction
+  if (SPEC_OSCI != None)  : return fonction
+  if (COMB_C != None)     : return fonction_c
+  if (COMPOSE != None)    : return fonction
+  if (ASSE != None)       : return fonction
+  if (FFT != None)        : 
+     vale=FFT.get_child('FONCTION').get_valeur()
+     if (AsType(vale) == fonction )  : return fonction_c
+     if (AsType(vale) == fonction_c) : return fonction
+  raise AsException("type de concept resultat non prevu")
+
+CALC_FONCTION=OPER(nom="CALC_FONCTION",op=  91,sd_prod=calc_fonction_prod
+                    ,fr="Opérations mathématiques sur des concepts de type fonction",
+                     docu="U4.32.04-e1",reentrant='n',
+         regles=(UN_PARMI('DERIVE','INTEGRE','SPEC_OSCI','MAX','COMB','COMB_C','ENVELOPPE','RMS',
+                          'NOCI_SEISME','COMPOSE','EXTRACTION','ASSE','FFT' ),),
+         FFT             =FACT(statut='f',min=1,max=1,fr="Calcul de la transformee de Fourier ou de son inverse",
+           FONCTION        =SIMP(statut='o',typ=(fonction,fonction_c) )
+         ),
+         DERIVE          =FACT(statut='f',min=1,max=1,fr="Calcul de la dérivée d une fonction",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="DIFF_CENTREE",into=("DIFF_CENTREE",) ),
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+         ),
+         INTEGRE         =FACT(statut='f',min=1,max=1,fr="Calcul de l intégrale d une fonction",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+           FONCTION        =SIMP(statut='o',typ=fonction),
+           COEF            =SIMP(statut='f',typ='R',defaut= 0.E+0,fr="Valeur de la constante d intégration" ),
+         ),
+         RMS             =FACT(statut='f',min=1,max=1,fr="Calcul de la valeur RMS d une fonction",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           INST_INIT       =SIMP(statut='f',typ='R',fr="Instant initial définissant le début du signal" ),
+           INST_FIN        =SIMP(statut='f',typ='R',fr="Instant final définissant la fin du signal" ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+         ),
+         NOCI_SEISME     =FACT(statut='f',min=1,max=1,
+           FONCTION        =SIMP(statut='f',typ=fonction ),
+           SPEC_OSCI       =SIMP(statut='f',typ=fonction ),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",max='**',
+                                 into=("INTE_ARIAS","POUV_DEST","INTE_SPEC","VITE_ABSO_CUMU",
+                                       "DUREE_PHAS_FORT","MAXI","ACCE_SUR_VITE","TOUT",) ),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           NATURE          =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE") ),
+           COEF            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           PESANTEUR       =SIMP(statut='f',typ='R',defaut= 9.81E+0 ),
+           FREQ_INIT       =SIMP(statut='f',typ='R',defaut= 4.E-1 ),
+           FREQ_FIN        =SIMP(statut='f',typ='R',defaut= 10.E+0 ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           NORME           =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+           BORNE_INF       =SIMP(statut='f',typ='R',defaut= 0.05E+0 ),
+           BORNE_SUP       =SIMP(statut='f',typ='R',defaut= 0.95E+0 ),
+           b_acce_reel     =BLOC(condition="(INST_INIT != None)or(INST_FIN != None)or(FREQ_INIT != None)or(FREQ_FIN != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           ),
+         ),
+         SPEC_OSCI       =FACT(statut='f',min=1,max=1,fr="Calcul du spectre d oscillateur",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="NIGAM",into=("NIGAM",) ),
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           NORME           =SIMP(statut='f',typ='R',defaut= 9.81E+0,fr="Valeur de la norme du spectre d oscillateur" ),
+           NATURE          =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("DEPL","VITE","ACCE") ),
+           NATURE_FONC     =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("DEPL","VITE","ACCE") ),
+         ),
+         MAX             =FACT(statut='f',min=1,max=1,fr="Calcul des extrémas locaux d une fonction",
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+         ),
+         COMB            =FACT(statut='f',min=1,max='**',fr="Calcul d une combinaison linéaire réelle de fonctions",
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           COEF            =SIMP(statut='o',typ='R',fr="Coefficient réel de la combinaison linéaire associée à la fonction" ),
+         ),
+         COMB_C          =FACT(statut='f',min=1,max='**',fr="Calcul d une combinaison linéaire complexe de fonctions",
+           regles=(UN_PARMI('COEF_R','COEF_C'),),
+           FONCTION        =SIMP(statut='o',typ=(fonction, fonction_c) ),
+           COEF_R          =SIMP(statut='f',typ='R',fr="Coefficient réel de la combinaison linéaire associée à la fonction" ),
+           COEF_C          =SIMP(statut='f',typ='C',fr="Coefficient complexe de la combinaison linéaire associée à la fonction" ),
+         ),
+         b_comb          =BLOC ( condition = " (COMB != None) or (COMB_C != None)",
+             LIST_PARA      =SIMP(statut='f',typ=listr8 ),  
+         ),
+         COMPOSE         =FACT(statut='f',min=1,max=1,fr="Calcul de la composition de deux fonctions FONC_RESU(FONC_PARA)",
+           FONC_RESU       =SIMP(statut='o',typ=fonction),
+           FONC_PARA       =SIMP(statut='o',typ=fonction),
+         ),
+         EXTRACTION      =FACT(statut='f',min=1,max=1,fr="Opération d extraction sur une fonction complexe",
+           FONCTION        =SIMP(statut='o',typ=fonction_c),
+           PARTIE          =SIMP(statut='o',typ='TXM',into=("REEL","IMAG","MODULE","PHASE"),fr="Partie à extraire"),
+         ),
+         ENVELOPPE       =FACT(statut='f',min=1,max=1,fr="Calcul de l enveloppe d une famille de fonctions",
+           FONCTION        =SIMP(statut='o',typ=fonction,max='**' ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="SUP",into=("SUP","INF"),fr="Type de l enveloppe" ),
+         ),
+         ASSE            =FACT(statut='f',min=1,max=1,fr="Création à partir de la concatenation de fonctions",
+           FONCTION        =SIMP(statut='o',typ=fonction,max='**' ),
+           SURCHARGE       =SIMP(statut='f',typ='TXM',defaut="DROITE",into=("DROITE","GAUCHE")),
+         ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                                          "INST","X","Y","Z","EPSI","FREQ","PULS",
+                                                          "AMOR","ABSC") ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                                          "INST","X","Y","Z","EPSI","FREQ","PULS",
+                                                          "AMOR","ABSC") ),
+         INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
+                   fr="calcul de la force ajoutee ",
+                   docu="U4.66.03-a",reentrant ='n',
+
+        regles=(EXCLUS('MODE_MECA','MODELE_GENE'),
+                PRESENT_PRESENT( 'MODELE_GENE','NUME_DDL_GENE'),
+                UN_PARMI('MONO_APPUI', 'NOEUD','GROUP_NO'),
+                UN_PARMI('MONO_APPUI','MODE_STAT')),
+
+         MODELE_FLUIDE   =SIMP(statut='o',typ=modele ),
+         MODELE_INTERFACE=SIMP(statut='o',typ=modele ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CHARGE          =SIMP(statut='o',typ=char_ther ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         NUME_DDL_GENE   =SIMP(statut='f',typ=nume_ddl_gene ),
+         DIST_REFE       =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+         AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         NUME_MODE_MECA  =SIMP(statut='f',typ='I',max='**'),
+         POTENTIEL       =SIMP(statut='f',typ=evol_ther ),
+         NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+
+         DIRECTION       =SIMP(statut='o',typ='R',max=3),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",),),
+         NOEUD           =SIMP(statut='f',typ=no,max='**'),
+         GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,),),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    = BLOC ( condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC( condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult     =BLOC( condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non iversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC (condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut=0),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0),  ),
+
+           ) ;
+#& MODIF COMMANDE  DATE 12/09/2001   AUTEUR MCOURTOI M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_G_LOCAL_T=OPER(nom="CALC_G_LOCAL_T",op=77,sd_prod=tabl_calc_g_loca,
+                    fr="Calcul du taux de restitution local d énergie",docu="U4.82.04-e1",reentrant='n',
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         FOND            =SIMP(statut='o',typ=fond_fiss),
+         regles=(UN_PARMI('RESULTAT','DEPL'),
+                 UN_PARMI('R_INF','R_INF_FO'),
+                 PRESENT_PRESENT('R_INF','R_SUP'),
+                 PRESENT_PRESENT('R_INF_FO','R_SUP_FO'), ),
+                         
+         DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+         RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_noli),),
+         b_extrac        =BLOC(condition="RESULTAT != None",fr="extraction d un champ",
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis),
+             INST            =SIMP(statut='f',typ='R',max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8),
+             
+             b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
+               PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+         ),
+         CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
+         SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS") ),
+         COMP_ELAS       =FACT(statut='f',min=01,max=01,
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC") ),
+               ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_LINE  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_TRAC  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","GREEN") ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         COMP_INCR       =FACT(statut='f',min=01,max=01,
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE") ),
+               ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               VMIS_ISOT_TRAC  =SIMP(statut='f',typ='I',defaut=2,into=(2,) ),
+               VMIS_ISOT_LINE  =SIMP(statut='f',typ='I',defaut=2,into=(2,) ),
+               VMIS_CINE_LINE  =SIMP(statut='f',typ='I',defaut=7,into=(7,) ),
+               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC") ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           SIGM            =SIMP(statut='f',typ=cham_elem_sief_r),
+           DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+         ),
+
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="CALC_G",
+                               into=("CALC_G","CALC_G_LGLO","G_BILINEAIRE","CALC_G_MAX") ),
+         b_g             =BLOC(condition="OPTION=='CALC_G'",
+           LISSAGE_THETA   =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE") ),
+           LISSAGE_G       =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE","LAGRANGE_NO_NO",) ),
+         ), 
+         b_g_lglo        =BLOC(condition="OPTION=='CALC_G_LGLO'",
+           PROPAGATION     =SIMP(statut='o',typ='R'),
+           THETA           =SIMP(statut='o',typ=theta_geom),
+           DIRE_THETA      =SIMP(statut='f',typ=cham_no_depl_r),
+           LISSAGE_THETA   =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE") ),
+           LISSAGE_G       =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE","LAGRANGE_NO_NO",) ),
+         ), 
+         b_g_bilin       =BLOC(condition="OPTION=='G_BILINEAIRE'",
+           LISSAGE_THETA   =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE") ),
+           LISSAGE_G       =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE") ),
+         ), 
+         b_calc_g_max    =BLOC(condition="OPTION=='CALC_G_MAX'",
+           BORNES          =FACT(statut='o',min=01,max='**',
+              NUME_ORDRE     =SIMP(statut='o',typ='I'),
+              VALE_MIN       =SIMP(statut='o',typ='R'),
+              VALE_MAX       =SIMP(statut='o',typ='R'),
+                                ),
+           LISSAGE_THETA   =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE") ),
+           LISSAGE_G       =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE") ),
+         ),
+           
+         DEGRE           =SIMP(statut='f',typ='I',defaut=5,into=(0,1,2,3,4,5,6,7) ),
+
+         R_INF           =SIMP(statut='f',typ='R'),
+         R_SUP           =SIMP(statut='f',typ='R'),
+         R_INF_FO        =SIMP(statut='f',typ=fonction),
+         R_SUP_FO        =SIMP(statut='f',typ=fonction),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 12/09/2001   AUTEUR MCOURTOI M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_G_THETA_T=OPER(nom="CALC_G_THETA_T",op=53,sd_prod=tabl_calc_g_th,
+                    fr="Calcul du taux de restitution d énergie par la méthode theta en thermo-élasticité en 2D ou en 3D",
+                    docu="U4.82.03-e1",reentrant='n',
+         regles=(UN_PARMI('RESULTAT','DEPL'),
+                 EXCLUS('COMP_ELAS','COMP_INCR'),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         THETA           =SIMP(statut='o',typ=theta_geom),
+         DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+         RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_noli),),
+
+         b_extrac        =BLOC(condition="RESULTAT != None",fr="extraction d un champ",
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+            
+           b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           ),
+         ),
+
+         CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
+         SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS") ),
+         COMP_ELAS       =FACT(statut='f',min=01,max=01,
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC") ),
+               ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_LINE  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_TRAC  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","GREEN") ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),  
+         COMP_INCR       =FACT(statut='f',min=01,max=01,
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE") ),
+               ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               VMIS_ISOT_TRAC  =SIMP(statut='f',typ='I',defaut=2,into=(2,) ),
+               VMIS_ISOT_LINE  =SIMP(statut='f',typ='I',defaut=2,into=(2,) ),
+               VMIS_CINE_LINE  =SIMP(statut='f',typ='I',defaut=7,into=(7,) ),
+               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC") ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           SIGM            =SIMP(statut='f',typ=cham_elem_sief_r),
+           DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="CALC_G",
+                               into=("CALC_G","CALC_G_LAGR","CALC_K_G","G_BILINEAIRE","CALC_G_MAX","CALC_DG",) ),
+         b_calc_g_max    =BLOC(condition="OPTION=='CALC_G_MAX'",
+           BORNES          =FACT(statut='o',min=01,max='**',
+                NUME_ORDRE     =SIMP(statut='o',typ='I'),
+                VALE_MIN       =SIMP(statut='o',typ='R'),
+                VALE_MAX       =SIMP(statut='o',typ='R'),
+                                ),
+         ),
+         b_calc_k_g      =BLOC(condition="OPTION=='CALC_K_G'",
+           FOND            =SIMP(statut='o',typ=fond_fiss),
+         ),
+         b_calc_g_lagr   =BLOC(condition="OPTION=='CALC_G_LAGR'",
+           PROPAGATION     =SIMP(statut='o',typ='R'),
+         ),
+         b_calc_dg       =BLOC(condition="OPTION=='CALC_DG'",
+           SENSIBILITE     =FACT(statut='f',min=01,max=01,
+                 THETA          =SIMP(statut='o',typ=theta_geom ),
+                               ),  
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=tabl_intsp,
+                    fr="Calcul d une matrice interspectrale d une fonction du temps",
+                    docu="U4.36.03-e",reentrant='n',
+         INST_INIT       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         INST_FIN        =SIMP(statut='o',typ='R' ),
+         DUREE_ANALYSE   =SIMP(statut='f',typ='R' ),
+         DUREE_DECALAGE  =SIMP(statut='f',typ='R' ),
+         NB_POIN         =SIMP(statut='o',typ='I' ),
+         FONCTION        =SIMP(statut='o',typ=fonction,max='**' ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
+                    fr="Calcul des matrices de masse, d amortissement ou de raideur ajoutées",
+                    docu="U4.66.01-c",reentrant='n',
+         regles=(EXCLUS('MODE_MECA','CHAM_NO','MODELE_GENE'),
+                 PRESENT_ABSENT('NUME_DDL_GENE','CHAM_NO'),
+                 PRESENT_PRESENT('MODELE_GENE','NUME_DDL_GENE'),),
+         MODELE_FLUIDE   =SIMP(statut='o',typ=modele ),
+         MODELE_INTERFACE=SIMP(statut='o',typ=modele ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CHARGE          =SIMP(statut='o',typ=char_ther ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         CHAM_NO         =SIMP(statut='f',typ=cham_no_depl_r ),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         NUME_DDL_GENE   =SIMP(statut='f',typ=nume_ddl_gene ),
+         DIST_REFE       =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+         AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         NUME_MODE_MECA  =SIMP(statut='f',typ='I',max='**'),
+         OPTION          =SIMP(statut='o',typ='TXM',into=("MASS_AJOU","AMOR_AJOU","RIGI_AJOU") ),
+         POTENTIEL       =SIMP(statut='f',typ=evol_ther ),
+         NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    = BLOC ( condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC( condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult     =BLOC( condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non iversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC (condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut=0),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 11/12/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def calc_matr_elem_prod(OPTION,**args):
+  if OPTION == "RIGI_MECA"        : return matr_elem_depl_r
+  if OPTION == "RIGI_FLUI_STRU"   : return matr_elem_depl_r
+  if OPTION == "RIGI_MECA_LAGR"   : return matr_elem_depl_r
+  if OPTION == "MASS_ID_MDEP_R"   : return matr_elem_depl_r
+  if OPTION == "MASS_ID_MDNS_R"   : return matr_elem_depl_r
+  if OPTION == "MASS_ID_MTEM_R"   : return matr_elem_temp_r
+  if OPTION == "MASS_ID_MTNS_R"   : return matr_elem_temp_r
+  if OPTION == "MASS_MECA"        : return matr_elem_depl_r
+  if OPTION == "MASS_FLUI_STRU"   : return matr_elem_depl_r
+  if OPTION == "RIGI_GEOM"        : return matr_elem_depl_r
+  if OPTION == "RIGI_ROTA"        : return matr_elem_depl_r
+  if OPTION == "AMOR_MECA"        : return matr_elem_depl_r
+  if OPTION == "IMPE_MECA"        : return matr_elem_depl_r
+  if OPTION == "ONDE_FLUI"        : return matr_elem_depl_r
+  if OPTION == "RIGI_MECA_HYST"   : return matr_elem_depl_c
+  if OPTION == "RIGI_THER"        : return matr_elem_temp_r
+  if OPTION == "MASS_THER"        : return matr_elem_temp_r
+  if OPTION == "MASS_MECA_DIAG"   : return matr_elem_depl_r
+  if OPTION == "RIGI_ACOU"        : return matr_elem_pres_c
+  if OPTION == "MASS_ACOU"        : return matr_elem_pres_c
+  if OPTION == "AMOR_ACOU"        : return matr_elem_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
+                    ,fr="Calcul des matrices élémentaires",docu="U4.61.01-f",reentrant='n',
+         OPTION          =SIMP(statut='o',typ='TXM',
+                               into=("RIGI_MECA","MASS_MECA","RIGI_GEOM",
+                                     "AMOR_MECA","RIGI_THER","MASS_THER","IMPE_MECA",
+                                     "ONDE_FLUI","MASS_FLUI_STRU","RIGI_FLUI_STRU",
+                                     "RIGI_ROTA","MASS_MECA_DIAG","RIGI_ACOU",
+                                     "MASS_ID_MDEP_R","MASS_ID_MDNS_R","MASS_ID_MTEM_R","MASS_ID_MTNS_R",
+                                     "MASS_ACOU","AMOR_ACOU","RIGI_MECA_HYST",
+                                     "RIGI_MECA_LAGR") ),
+
+         b_rigi_meca = BLOC( condition = "OPTION=='RIGI_MECA'",
+           regles=(AU_MOINS_UN('MODELE','CHARGE' ),),
+           MODELE          =SIMP(statut='f',typ=modele ),
+           b_modele        =BLOC(condition = "MODELE != None",
+             CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+             CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+             MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**' ),
+           b_charge        =BLOC (condition = "CHARGE != None",
+             INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+         ),
+
+         b_rigi_meca_lagr  =BLOC(condition = "OPTION=='RIGI_MECA_LAGR'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='f',typ=char_meca,max='**'  ),
+           b_charge        =BLOC(condition = "CHARGE != None",
+             INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           THETA           =SIMP(statut='o',typ=theta_geom ),
+           PROPAGATION     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+
+         b_mass_meca       =BLOC(condition = "(OPTION=='MASS_MECA') or (OPTION=='MASS_MECA_DIAG')",
+           regles=(AU_MOINS_UN('MODELE','CHARGE'),),
+           MODELE          =SIMP(statut='f',typ=modele ),
+           b_modele          =BLOC(condition = "MODELE != None",
+             CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
+             CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           ),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**' ),
+           b_charge        =BLOC(condition = "CHARGE != None",
+             INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+         ),
+
+         b_mass_identite   =BLOC(condition = "(OPTION in ('MASS_ID_MDEP_R','MASS_ID_MTEM_R','MASS_ID_MDNS_R','MASS_ID_MTNS_R')) ",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           # j'ajoute ces 2 mot clés inutiles à cause de l'alarme pas assez subtile de MEDOME
+           CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+         ),
+
+         b_rigi_geom       =BLOC(condition = "OPTION=='RIGI_GEOM'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           SIEF_ELGA         =SIMP(statut='o',typ=cham_elem_sief_r ),
+           MODE_FOURIER      =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+
+         b_rigi_rota       =BLOC(condition = "OPTION=='RIGI_ROTA'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='o',typ=char_meca,max='**' ),
+           INST              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+
+         b_amor_meca       =BLOC(condition = "OPTION=='AMOR_MECA'",
+           regles=(AU_MOINS_UN('CARA_ELEM','RIGI_MECA'),
+                   ENSEMBLE('RIGI_MECA','MASS_MECA','CHAM_MATER'), ),
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
+           RIGI_MECA         =SIMP(statut='f',typ=matr_elem_depl_r ),
+           MASS_MECA         =SIMP(statut='f',typ=matr_elem_depl_r ),
+           CHARGE            =SIMP(statut='f',typ=char_meca,max='**' ),
+         ),
+
+         b_rigi_meca_hyst  =BLOC( condition = "OPTION=='RIGI_MECA_HYST'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHARGE            =SIMP(statut='o',typ=char_meca ,max='**' ),
+           CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           RIGI_MECA         =SIMP(statut='o',typ=matr_elem_depl_r ),
+         ),
+
+         b_rigi_ther       =BLOC(condition = "OPTION=='RIGI_THER'",
+           regles=(AU_MOINS_UN('MODELE','CHARGE' ),),
+           MODELE            =SIMP(statut='f',typ=modele ),
+           b_modele          =BLOC(condition = "MODELE != None",
+             CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+             CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+             MODE_FOURIER      =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           CHARGE            =SIMP(statut='f',typ=char_ther,max='**' ),
+         ),
+
+         b_mass_ther       =BLOC(condition = "OPTION=='MASS_THER'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+         ),
+
+         b_rigi_acou       =BLOC(condition = "(OPTION=='RIGI_ACOU') or (OPTION=='MASS_ACOU') or (OPTION=='AMOR_ACOU')",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='f',typ=char_acou ,max='**' ),
+         ),
+
+         b_rigi_flui       =BLOC(condition = "(OPTION=='RIGI_FLUI_STRU') or (OPTION=='MASS_FLUI_STRU')",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CARA_ELEM         =SIMP(statut='o',typ=cara_elem ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='o',typ=char_meca ,max='**' ),
+           INST              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+
+         b_impe_meca       =BLOC(condition = "(OPTION=='IMPE_MECA') or (OPTION=='ONDE_FLUI')",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHARGE            =SIMP(statut='o',typ=char_meca,max='**' ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 27/06/2001   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,docu="U4.85.01-a",reentrant='o',
+               fr="Calcule la métallurgie a partir du résultat du calcul thermique",
+         MODELE          =SIMP(statut='o',typ=modele ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         RESULTAT        =SIMP(statut='o',typ=evol_ther ),
+         ETAT_INIT       =FACT(statut='o',min=01,max=01,
+      regles=(UN_PARMI('NUME_INIT','META_INIT',),),
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther ),
+           NUME_INIT       =SIMP(statut='f',typ='I' ),  
+           META_INIT       =SIMP(statut='f',typ=carte_var2_r ),
+         ),
+         COMP_INCR       =FACT(statut='o',min=01,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',into=("ACIER","ZIRC",) ),
+           ACIER           =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+           ZIRC            =SIMP(statut='c',typ='I',defaut=3,into=(3,) ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           MAILLE          =SIMP(statut='f',typ=ma),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM'     
+                             ,into=("META_ELNO_TEMP",) ),
+)  ;
+#& MODIF COMMANDE  DATE 04/12/2001   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+def calc_no_prod(RESULTAT,**args):
+   if AsType(RESULTAT) != None : return AsType(RESULTAT)
+   raise AsException("type de concept resultat non prevu")
+
+CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,docu="U4.81.02-e1",reentrant='o',
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,acou_harmo,mode_meca,
+                                               mode_acou,mode_stat,mode_stat_depl,mode_stat_acce,
+                                              mode_stat_forc,evol_ther,evol_noli,base_modale,
+                                               mult_elas,fourier_elas,mode_flamb ) ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters"),
+
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                        'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           
+         OPTION          =SIMP(statut='o',typ='TXM',max='**',
+                               into=("FORC_NODA","REAC_NODA",
+                                     "DCHA_NOEU_SIGM",
+                                     "DEGE_NOEU_DEPL",
+                                     "DETE_NOEU_DLTE",
+                                     "DEDE_NOEU_DLDE",
+                                     "DESI_NOEU_DLSI",
+                                     "DURT_NOEU_META",
+                                     "EFGE_NOEU_CART","EFGE_NOEU_DEPL",
+                                     "ENDO_NOEU_SINO",
+                                     "ENEL_NOEU_ELGA",
+                                     "EPMG_NOEU_DEPL",
+                                     "EPSA_NOEU",
+                                     "EPSG_NOEU"     ,"EPSG_NOEU_DEPL",
+                                     "EPSI_NOEU_DEPL","EPSI_NOEU_DPGE",
+                                     "EPSP_NOEU"     ,"EPSP_NOEU_ZAC",
+                                     "EQUI_NOEU_EPME","EQUI_NOEU_EPSI","EQUI_NOEU_SIGM",
+                                     "ERRE_NOEU_ELGA",
+                                     "FLUX_NOEU_TEMP",
+                                     "GRAD_NOEU_THETA",
+                                     "HYDR_NOEU_ELGA",
+                                     "INTE_NOEU_ACTI","INTE_NOEU_REAC",
+                                     "META_NOEU_TEMP",
+                                     "PMPB_NOEU_SIEF",
+                                     "PRES_NOEU_DBEL","PRES_NOEU_IMAG","PRES_NOEU_REEL",
+                                     "RADI_NOEU_SIGM",
+                                     "SIEF_NOEU"     ,"SIEF_NOEU_ELGA",
+                                     "SIGM_NOEU_CART","SIGM_NOEU_COQU","SIGM_NOEU_DEPL","SIGM_NOEU_DPGE",
+                                     "SIGM_NOEU_SIEF","SIGM_NOEU_VARI","SIGM_NOEU_ZAC",
+                                     "SIPO_NOEU_DEPL","SIPO_NOEU_SIEF",
+                                     "SIRE_NOEU_DEPL",
+                                     "VARI_NOEU"     ,"VARI_NOEU_ELGA",) ),
+         
+         b_forc_reac     =BLOC(condition = """(OPTION == 'FORC_NODA') or (type(OPTION) == type(()) and 'FORC_NODA' in OPTION) or\
+ (OPTION == 'REAC_NODA') or (type(OPTION) == type(()) and 'REAC_NODA' in OPTION)""",
+             MODELE          =SIMP(statut='o',typ=modele),
+         ),
+
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='f',min=1,max='**',
+           CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou) ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE","FIXE_PILO","SUIV") ),
+         ),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         TAILLE_BLOC     =SIMP(statut='f',typ='R' ,defaut= 400. ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,docu="U4.82.02-d",reentrant='n',
+                fr="Affectation d un champ sur le maillage (mécanique de la rupture)",
+         regles=(UN_PARMI('THETA_2D','THETA_3D','THETA_BANDE'),
+                 PRESENT_PRESENT('THETA_3D','FOND_3D'),
+                 PRESENT_ABSENT('THETA_2D','DIRE_THETA'),
+                 EXCLUS('DIRECTION','DIRE_THETA'),),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="COURONNE",into=("COURONNE","BANDE") ),
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         FOND_3D         =SIMP(statut='f',typ=(fond_fiss) ),
+         THETA_3D        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   UN_PARMI('MODULE','MODULE_FO'),
+                   ENSEMBLE('MODULE','R_INF','R_SUP'),
+                   ENSEMBLE('MODULE_FO','R_INF_FO','R_SUP_FO'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           MODULE          =SIMP(statut='f',typ='R'),
+           R_INF           =SIMP(statut='f',typ='R'),
+           R_SUP           =SIMP(statut='f',typ='R'),
+           MODULE_FO       =SIMP(statut='f',typ=fonction),
+           R_INF_FO        =SIMP(statut='f',typ=fonction),
+           R_SUP_FO        =SIMP(statut='f',typ=fonction),
+                         ),
+         DIRE_THETA      =SIMP(statut='f',typ=(cham_no_depl_r) ),
+         DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+         THETA_2D        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           MODULE          =SIMP(statut='o',typ='R'),
+           R_INF           =SIMP(statut='o',typ='R'),
+           R_SUP           =SIMP(statut='o',typ='R'),
+         ),
+         THETA_BANDE     =FACT(statut='f',min=01,max='**',
+           MODULE          =SIMP(statut='o',typ='R'),
+           R_INF           =SIMP(statut='o',typ='R'),
+           R_SUP           =SIMP(statut='o',typ='R'),
+         ),
+         GRAD_NOEU_THETA =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT",into=("RESULTAT",) ),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="EXCEL",into=("EXCEL","AGRAF") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def calc_vect_elem_prod(OPTION,**args):
+  if OPTION == "CHAR_MECA" :      return vect_elem_depl_r
+  if OPTION == "CHAR_MECA_LAGR" : return vect_elem_depl_r
+  if OPTION == "CHAR_THER" :      return vect_elem_temp_r
+  if OPTION == "CHAR_ACOU" :      return vect_elem_pres_c
+  if OPTION == "FORC_NODA" :      return vect_elem_depl_r
+  raise AsException("type de concept resultat non prevu")
+
+CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,docu="U4.61.02-f",reentrant='n',
+                    fr="Calcul des seconds membres élémentaires",
+         OPTION          =SIMP(statut='o',typ='TXM',into=("CHAR_MECA","CHAR_THER","CHAR_ACOU",
+                                                           "FORC_NODA","CHAR_MECA_LAGR") ),
+         b_char_meca     =BLOC(condition = "OPTION=='CHAR_MECA'",
+           regles=(AU_MOINS_UN('CHARGE','MODELE'),),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
+           MODELE          =SIMP(statut='f',typ=modele),
+           b_charge     =BLOC(condition = "CHARGE != None", fr="modèle ne contenant pas de sous-structure",
+              CHAM_MATER   =SIMP(statut='f',typ=cham_mater),
+              CARA_ELEM    =SIMP(statut='f',typ=cara_elem),
+              INST         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+              MODE_FOURIER =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),  
+           b_modele     =BLOC(condition = "(MODELE != None)",fr="modèle contenant une sous-structure",
+              SOUS_STRUC      =FACT(statut='o',min=01,
+                regles=(UN_PARMI('TOUT','MAILLE'),),
+                CAS_CHARGE  =SIMP(statut='o',typ='TXM' ),
+                TOUT        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                MAILLE      =SIMP(statut='f',typ=ma,max='**',),
+              ),
+           ),
+         ),
+         b_char_ther     =BLOC(condition = "OPTION=='CHAR_THER'",
+           CARA_ELEM        =SIMP(statut='f',typ=cara_elem),
+           CHARGE           =SIMP(statut='o',typ=char_ther,max='**'),
+           INST             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+              
+         b_char_acou     =BLOC(condition = "OPTION=='CHAR_ACOU'",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater),
+           CHARGE            =SIMP(statut='o',typ=char_acou,max='**'),
+         ),
+         
+         b_forc_noda     =BLOC(condition = "OPTION=='FORC_NODA'",
+           SIEF_ELGA         =SIMP(statut='o',typ=cham_elem_sief_r),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem),
+           MODELE            =SIMP(statut='f',typ=modele),
+         ),
+         
+         b_meca_lagr     =BLOC(condition = "OPTION=='CHAR_MECA_LAGR'",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater),
+           THETA             =SIMP(statut='o',typ=theta_geom),
+           PROPAGATION       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           CHARGE            =SIMP(statut='f',typ=char_meca,max='**'),
+           INST              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+) ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+def comb_cham_elem_prod(COMB_R=None,COMB_C=None,COMB_FOURIER=None,**args):
+
+  if COMB_R != None:
+    vale=COMB_R.get_child('CHAM_ELEM').get_valeur()
+  elif COMB_C != None:
+    vale=COMB_C.get_child('CHAM_ELEM').get_valeur()
+  elif COMB_FOURIER != None:
+    vale=COMB_FOURIER.get_child('CHAM_ELEM').get_valeur()
+  else :
+    raise AsException("type de concept resultat non prevu")
+
+  if AsType(vale) == cham_elem_sief_r : return cham_elem_sief_r
+  if AsType(vale) == cham_elem_flux_r : return cham_elem_flux_r
+  if AsType(vale) == cham_elem_epsi_r : return cham_elem_epsi_r
+  if AsType(vale) == cham_elem_ener_r : return cham_elem_ener_r
+  if AsType(vale) == cham_elem_crit_r : return cham_elem_crit_r
+  if AsType(vale) == cham_elem_dbel_r : return cham_elem_dbel_r
+  if AsType(vale) == cham_elem_pres_r : return cham_elem_pres_r
+  if AsType(vale) == cham_elem_sief_c : return cham_elem_sief_c
+  raise AsException("type de concept resultat non prevu")
+
+COMB_CHAM_ELEM=OPER(nom="COMB_CHAM_ELEM",op= 139,sd_prod=comb_cham_elem_prod,reentrant='f',
+                    fr="Combinaison linéaire de champs par éléments",docu="U4.72.03-e",
+      regles=(UN_PARMI('COMB_R','COMB_C','COMB_FOURIER'),
+              PRESENT_PRESENT('COMB_FOURIER','ANGL'),),
+      COMB_R          =FACT(statut='f',min=01,max='**',
+        PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
+        COEF_R          =SIMP(statut='o',typ='R'),
+        CHAM_ELEM       =SIMP(statut='o',
+                              typ=(cham_elem_sief_r,cham_elem_flux_r,cham_elem_epsi_r,
+                                   cham_elem_ener_r,cham_elem_crit_r,cham_elem_dbel_r,
+                                   cham_elem_pres_r,cham_elem_sief_c ) ),
+      ),
+      COMB_C          =FACT(statut='f',min=01,max='**',
+        regles=(UN_PARMI('COEF_R','COEF_C', ),),
+        COEF_R          =SIMP(statut='f',typ='R'),
+        COEF_C          =SIMP(statut='f',typ='C'),
+        CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r) ),
+      ),
+      COMB_FOURIER    =FACT(statut='f',min=01,max='**',
+        COEF_R          =SIMP(statut='f',typ='R',defaut= 1.),
+        NUME_MODE       =SIMP(statut='o',typ='I'),
+        TYPE_MODE       =SIMP(statut='o',typ='TXM',into=("SYME","ANTI") ),
+        CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,cham_elem_flux_r,cham_elem_epsi_r ) ),
+      ),
+      ANGL            =SIMP(statut='f',typ='R' ),
+)  ;
+
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+def comb_cham_no_prod(COMB_R,COMB_C,COMB_FOURIER,**args):
+  if COMB_C != None:
+    type_mat = AsType(COMB_C.get_child('CHAM_NO').get_valeur())
+    if type_mat in  (cham_no_depl_c,cham_no_depl_r) : return cham_no_depl_c
+    if type_mat in  (cham_no_temp_c,cham_no_temp_r) : return cham_no_temp_c
+    if type_mat in  (cham_no_pres_c,cham_no_pres_r) : return cham_no_pres_c
+  elif COMB_R != None:
+    type_mat = AsType(COMB_R.get_child('CHAM_NO').get_valeur())
+    if type_mat in  (cham_no_depl_c,cham_no_depl_r) : return cham_no_depl_r
+    if type_mat in  (cham_no_temp_c,cham_no_temp_r) : return cham_no_temp_r
+    if type_mat in  (cham_no_pres_c,cham_no_pres_r) : return cham_no_pres_r
+    if type_mat ==  matr_asse_gene_r : return matr_asse_gene_r
+  elif COMB_FOURIER != None:
+    type_mat = AsType(COMB_FOURIER.get_child('CHAM_NO').get_valeur())
+    if type_mat == cham_no_temp_r : return cham_no_temp_r
+    if type_mat == cham_no_depl_r : return cham_no_depl_r
+  raise AsException("type de concept resultat non prevu")
+
+
+COMB_CHAM_NO=OPER(nom="COMB_CHAM_NO",op=  30,sd_prod=comb_cham_no_prod
+                    ,fr="Combinaison linéaire de champs aux noeuds",
+                     docu="U4.72.02-f",reentrant='f',
+         regles=(UN_PARMI('COMB_R','COMB_C','COMB_FOURIER'),),
+         COMB_R          =FACT(statut='f',min=01,max='**',
+           PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG",) ),
+           CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_temp_c,cham_no_depl_r,cham_no_depl_c
+                                                ,cham_no_pres_r,cham_no_pres_c ) ),
+           COEF_R          =SIMP(statut='o',typ='R' ),
+         ),
+         COMB_C          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('COEF_R','COEF_C' ),),
+           CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_r,cham_no_temp_c
+                                                ,cham_no_depl_c,cham_no_pres_c ) ),
+           COEF_R          =SIMP(statut='f',typ='R' ),
+           COEF_C          =SIMP(statut='f',typ='C' ),
+         ),
+         COMB_FOURIER    =FACT(statut='f',min=01,max='**',
+           CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_depl_r) ),
+           COEF_R          =SIMP(statut='f',typ='R',defaut= 1. ),
+           NUME_MODE       =SIMP(statut='o',typ='I' ),
+           TYPE_MODE       =SIMP(statut='o',typ='TXM',into=("SYME","ANTI") ),
+         ),
+         b_angl = BLOC ( condition = "COMB_FOURIER != None",
+           ANGL            =SIMP(statut='o',typ='R' ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier,
+                  docu="U4.83.31-c",reentrant='n',
+         RESULTAT        =SIMP(statut='o',typ=fourier_elas ),
+         ANGL            =SIMP(statut='o',typ='R',max='**'),
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',max=05,
+                               into=("DEPL","REAC_NODA","SIEF_ELGA_DEPL","EPSI_ELNO_DEPL","SIGM_ELNO_DEPL") ),
+)  ;
+#& MODIF COMMANDE  DATE 10/07/2001   AUTEUR ACBHHCD G.DEVESA 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def comb_matr_asse_prod(COMB_R,COMB_C,**args):
+  if COMB_C != None:
+    type_mat = AsType(COMB_C.get_child('MATR_ASSE').get_valeur())
+    if type_mat in  (matr_asse_depl_c,matr_asse_depl_r) : return matr_asse_depl_c
+    if type_mat in  (matr_asse_gene_c,matr_asse_gene_r) : return matr_asse_gene_c    
+    if type_mat in  (matr_asse_temp_c,matr_asse_temp_r) : return matr_asse_temp_c
+    if type_mat in  (matr_asse_pres_c,matr_asse_pres_r) : return matr_asse_pres_c
+  elif COMB_R != None:
+    type_mat = AsType(COMB_R.get_child('MATR_ASSE').get_valeur())
+    if type_mat in  (matr_asse_depl_c,matr_asse_depl_r) : return matr_asse_depl_r
+    if type_mat in  (matr_asse_temp_c,matr_asse_temp_r) : return matr_asse_temp_r
+    if type_mat in  (matr_asse_pres_c,matr_asse_pres_r) : return matr_asse_pres_r
+    if type_mat in  (matr_asse_gene_c,matr_asse_gene_r) : return matr_asse_gene_r
+  raise AsException("type de concept resultat non prevu")
+
+COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op=  31,sd_prod=comb_matr_asse_prod,
+                    fr="Combinaison linéaire de matrices assemblées",
+                    docu="U4.72.01-f",reentrant='f',
+         regles=(UN_PARMI('COMB_R','COMB_C' ),),
+         COMB_R          =FACT(statut='f',min=01,max='**',
+           PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
+           MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_temp_c
+                                                ,matr_asse_pres_r,matr_asse_pres_c,matr_asse_gene_r,matr_asse_gene_c ) ),
+           COEF_R          =SIMP(statut='o',typ='R' ),
+         ),
+         COMB_C          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('COEF_R','COEF_C' ),),
+           MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_temp_c
+                                                ,matr_asse_pres_r,matr_asse_pres_c,matr_asse_gene_r,matr_asse_gene_c ) ),
+           COEF_R          =SIMP(statut='f',typ='R' ),
+           COEF_C          =SIMP(statut='f',typ='C' ),
+         ),
+         SANS_CMP        =SIMP(statut='f',typ='TXM',into=("LAGR",) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/03/2001   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
+                     fr="Réponse sismique par recombinaison modale par une méthode spectrale",
+                     docu="U4.84.01-d",reentrant='n',
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','FREQ','NUME_MODE','LIST_FREQ','LIST_ORDRE'),
+                 UN_PARMI('AMOR_REDUIT','LIST_AMOR','AMOR_GENE' ),),
+         MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+         b_freq          =BLOC(condition = "FREQ != None or LIST_FREQ != None",
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+         MODE_CORR       =SIMP(statut='f',typ=mode_stat_acce ),
+         
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         LIST_AMOR       =SIMP(statut='f',typ=listr8 ),
+         AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r ),
+         
+         MASS_INER       =SIMP(statut='f',typ=tabl_mass_iner ),
+         CORR_FREQ       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         
+         EXCIT           =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('MONO_APPUI','NOEUD','GROUP_NO'),
+                   UN_PARMI('AXE','TRI_AXE','TRI_SPEC' ),),
+           
+           MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           AXE             =SIMP(statut='f',fr="Excitation suivant un seul axe",
+                                 typ='R',max=03),  
+           TRI_AXE         =SIMP(statut='f',fr="Excitation suivant les trois axes mais avec le meme spectre",
+                                 typ='R',max=03),
+           TRI_SPEC        =SIMP(statut='f',fr="Excitation suivant les trois axes  avec trois spectres",
+                                 typ='TXM',into=("OUI",) ),
+           b_axe           =BLOC(condition = "AXE != None",fr="Excitation suivant un seul axe",
+             SPEC_OSCI       =SIMP(statut='o',typ=fonction,max=01 ),
+             ECHELLE         =SIMP(statut='f',typ='R',max=01),
+           ),
+           b_tri_axe       =BLOC(condition = "TRI_AXE != None",fr="Excitation suivant les trois axes mais avec le meme spectre",
+             SPEC_OSCI       =SIMP(statut='o',typ=fonction,max=01 ),
+             ECHELLE         =SIMP(statut='f',typ='R',max=01),
+           ),
+           b_tri_spec      =BLOC(condition = "TRI_SPEC != None",fr="Excitation suivant les trois axes  avec trois spectres",
+             SPEC_OSCI       =SIMP(statut='o',typ=fonction,min=03,max=03 ),
+             ECHELLE         =SIMP(statut='f',typ='R',min=03,max=03),
+           ),       
+           NATURE          =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("ACCE","VITE","DEPL") ),
+         ),
+         COMB_MODE       =FACT(statut='o',min=01,max=01,
+           TYPE            =SIMP(statut='o',typ='TXM',into=("SRSS","CQC","DSC","ABS","DPC") ),
+           DUREE           =SIMP(statut='f',typ='R' ),
+         ),
+         COMB_DIRECTION  =FACT(statut='f',min=01,max=01,
+           TYPE            =SIMP(statut='f',typ='TXM',into=("QUAD","NEWMARK") ),
+         ),
+         COMB_MULT_APPUI =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("QUAD","LINE","ABS") ),
+         ),
+         DEPL_MULT_APPUI =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO'),
+                   AU_MOINS_UN('DX','DY','DZ' ),),
+           MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,), ),
+           NOEUD_REFE      =SIMP(statut='f',typ=no),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           DX              =SIMP(statut='f',typ='R' ),
+           DY              =SIMP(statut='f',typ='R' ),
+           DZ              =SIMP(statut='f',typ='R' ),
+         ),
+         OPTION          =SIMP(statut='o',typ='TXM',max=9,
+                               into=("DEPL","VITE","ACCE_ABSOLU","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
+                                     "EFGE_ELNO_DEPL","REAC_NODA","FORC_NODA","EFGE_ELNO_CART",
+                                     "SIPO_ELNO_DEPL") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         IMPRESSION      =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('TOUT','NIVEAU'),),
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           NIVEAU          =SIMP(statut='f',typ='TXM',into=("SPEC_OSCI","MASS_EFFE","MAXI_GENE"),max=03 ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def crea_champ_prod(TYPE_CHAM,**args):
+  if TYPE_CHAM == "CART_DBEL_R" : return carte_dbel_r
+  if TYPE_CHAM == "CART_DEPL_C" : return carte_depl_c
+  if TYPE_CHAM == "CART_DEPL_F" : return carte_depl_f
+  if TYPE_CHAM == "CART_DEPL_R" : return carte_depl_r
+  if TYPE_CHAM == "CART_DURT_R" : return carte_durt_r
+  if TYPE_CHAM == "CART_ENER_R" : return carte_ener_r 
+  if TYPE_CHAM == "CART_EPSI_R" : return carte_epsi_r
+  if TYPE_CHAM == "CART_ERREUR" : return carte_erreur
+  if TYPE_CHAM == "CART_FLUX_R" : return carte_flux_r
+  if TYPE_CHAM == "CART_GEOM_R" : return carte_geom_r
+  if TYPE_CHAM == "CART_G_DEPL_R" : return carte_g_depl_r
+  if TYPE_CHAM == "CART_HYDR_R" : return carte_hydr_r
+  if TYPE_CHAM == "CART_INST_R" : return carte_inst_r
+  if TYPE_CHAM == "CART_INTE_R" : return carte_inte_r
+  if TYPE_CHAM == "CART_META_R" : return carte_meta_r
+  if TYPE_CHAM == "CART_NEUT_F" : return carte_neut_f
+  if TYPE_CHAM == "CART_NEUT_R" : return carte_neut_r
+  if TYPE_CHAM == "CART_PRES_R" : return carte_pres_r
+  if TYPE_CHAM == "CART_SIEF_R" : return carte_sief_r
+  if TYPE_CHAM == "CART_SOUR_R" : return carte_sour_r
+  if TYPE_CHAM == "CART_TEMP_F" : return carte_temp_f
+  if TYPE_CHAM == "CART_TEMP_R" : return carte_temp_r
+  if TYPE_CHAM == "CART_VAR2_R" : return carte_var2_r
+  if TYPE_CHAM == "CART_VNOR_C" : return carte_vnor_c
+  if TYPE_CHAM == "NOEU_DBEL_R" : return cham_no_dbel_r
+  if TYPE_CHAM == "NOEU_DEPL_C" : return cham_no_depl_c
+  if TYPE_CHAM == "NOEU_DEPL_F" : return cham_no_depl_f
+  if TYPE_CHAM == "NOEU_DEPL_R" : return cham_no_depl_r
+  if TYPE_CHAM == "NOEU_DURT_R" : return cham_no_durt_r
+  if TYPE_CHAM == "NOEU_ENER_R" : return cham_no_ener_r
+  if TYPE_CHAM == "NOEU_EPSI_R" : return cham_no_epsi_r
+  if TYPE_CHAM == "NOEU_ERREUR" : return cham_no_erreur
+  if TYPE_CHAM == "NOEU_FLUX_R" : return cham_no_flux_r
+  if TYPE_CHAM == "NOEU_GEOM_R" : return cham_no_geom_r
+  if TYPE_CHAM == "NOEU_G_DEPL_R" : return cham_no_g_depl_r
+  if TYPE_CHAM == "NOEU_HYDR_R" : return cham_no_hydr_r
+  if TYPE_CHAM == "NOEU_INST_R" : return cham_no_inst_r
+  if TYPE_CHAM == "NOEU_INTE_R" : return cham_no_inte_r
+  if TYPE_CHAM == "NOEU_META_R" : return cham_no_meta_r
+  if TYPE_CHAM == "NOEU_NEUT_F" : return cham_no_neut_f
+  if TYPE_CHAM == "NOEU_NEUT_R" : return cham_no_neut_r
+  if TYPE_CHAM == "NOEU_PRES_R" : return cham_no_pres_r
+  if TYPE_CHAM == "NOEU_SIEF_R" : return cham_no_sief_r
+  if TYPE_CHAM == "NOEU_SOUR_R" : return cham_no_sour_r
+  if TYPE_CHAM == "NOEU_TEMP_F" : return cham_no_temp_f
+  if TYPE_CHAM == "NOEU_TEMP_R" : return cham_no_temp_r
+  if TYPE_CHAM == "NOEU_VAR2_R" : return cham_no_var2_r
+  if TYPE_CHAM == "NOEU_VNOR_C" : return cham_no_vnor_c
+  if TYPE_CHAM == "ELEM_DBEL_R" : return cham_elem_dbel_r
+  if TYPE_CHAM == "ELEM_DEPL_C" : return cham_elem_depl_c
+  if TYPE_CHAM == "ELEM_DEPL_F" : return cham_elem_depl_f
+  if TYPE_CHAM == "ELEM_DEPL_R" : return cham_elem_depl_r
+  if TYPE_CHAM == "ELEM_DURT_R" : return cham_elem_durt_r
+  if TYPE_CHAM == "ELEM_ENER_R" : return cham_elem_ener_r
+  if TYPE_CHAM == "ELEM_EPSI_R" : return cham_elem_epsi_r
+  if TYPE_CHAM == "ELEM_ERREUR" : return cham_elem_erreur
+  if TYPE_CHAM == "ELEM_FLUX_R" : return cham_elem_flux_r
+  if TYPE_CHAM == "ELEM_GEOM_R" : return cham_elem_geom_r
+  if TYPE_CHAM == "ELEM_G_DEPL_R" : return cham_elem_g_depl
+  if TYPE_CHAM == "ELEM_HYDR_R" : return cham_elem_hydr_r
+  if TYPE_CHAM == "ELEM_INST_R" : return cham_elem_inst_r
+  if TYPE_CHAM == "ELEM_INTE_R" : return cham_elem_inte_r
+  if TYPE_CHAM == "ELEM_META_R" : return cham_elem_meta_r
+  if TYPE_CHAM == "ELEM_NEUT_F" : return cham_elem_neut_f
+  if TYPE_CHAM == "ELEM_NEUT_R" : return cham_elem_neut_r
+  if TYPE_CHAM == "ELEM_PRES_R" : return cham_elem_pres_r
+  if TYPE_CHAM == "ELEM_SIEF_R" : return cham_elem_sief_r
+  if TYPE_CHAM == "ELEM_SOUR_R" : return cham_elem_sour_r
+  if TYPE_CHAM == "ELEM_TEMP_F" : return cham_elem_temp_f
+  if TYPE_CHAM == "ELEM_TEMP_R" : return cham_elem_temp_r
+  if TYPE_CHAM == "ELEM_VARI_R" : return cham_elem_vari_r
+  if TYPE_CHAM == "ELEM_VNOR_C" : return cham_elem_vnor_c
+  if TYPE_CHAM == "ELNO_DBEL_R" : return cham_elem_dbel_r
+  if TYPE_CHAM == "ELNO_DEPL_C" : return cham_elem_depl_c
+  if TYPE_CHAM == "ELNO_DEPL_F" : return cham_elem_depl_f
+  if TYPE_CHAM == "ELNO_DEPL_R" : return cham_elem_depl_r
+  if TYPE_CHAM == "ELNO_DURT_R" : return cham_elem_durt_r
+  if TYPE_CHAM == "ELNO_ENER_R" : return cham_elem_ener_r
+  if TYPE_CHAM == "ELNO_EPSI_R" : return cham_elem_epsi_r
+  if TYPE_CHAM == "ELNO_ERREUR" : return cham_elem_erreur
+  if TYPE_CHAM == "ELNO_FLUX_R" : return cham_elem_flux_r
+  if TYPE_CHAM == "ELNO_GEOM_R" : return cham_elem_geom_r
+  if TYPE_CHAM == "ELNO_G_DEPL_R" : return cham_elem_g_depl
+  if TYPE_CHAM == "ELNO_HYDR_R" : return cham_elem_hydr_r
+  if TYPE_CHAM == "ELNO_INST_R" : return cham_elem_inst_r
+  if TYPE_CHAM == "ELNO_INTE_R" : return cham_elem_inte_r
+  if TYPE_CHAM == "ELNO_META_R" : return cham_elem_meta_r
+  if TYPE_CHAM == "ELNO_NEUT_F" : return cham_elem_neut_f
+  if TYPE_CHAM == "ELNO_NEUT_R" : return cham_elem_neut_r
+  if TYPE_CHAM == "ELNO_PRES_R" : return cham_elem_pres_r
+  if TYPE_CHAM == "ELNO_SIEF_R" : return cham_elem_sief_r
+  if TYPE_CHAM == "ELNO_SOUR_R" : return cham_elem_sour_r
+  if TYPE_CHAM == "ELNO_TEMP_F" : return cham_elem_temp_f
+  if TYPE_CHAM == "ELNO_TEMP_R" : return cham_elem_temp_r
+  if TYPE_CHAM == "ELNO_VARI_R" : return cham_elem_vari_r
+  if TYPE_CHAM == "ELNO_VNOR_C" : return cham_elem_vnor_c
+  if TYPE_CHAM == "ELGA_DBEL_R" : return cham_elem_dbel_r
+  if TYPE_CHAM == "ELGA_DEPL_C" : return cham_elem_depl_c
+  if TYPE_CHAM == "ELGA_DEPL_F" : return cham_elem_depl_f
+  if TYPE_CHAM == "ELGA_DEPL_R" : return cham_elem_depl_r
+  if TYPE_CHAM == "ELGA_DURT_R" : return cham_elem_durt_r
+  if TYPE_CHAM == "ELGA_ENER_R" : return cham_elem_ener_r
+  if TYPE_CHAM == "ELGA_EPSI_R" : return cham_elem_epsi_r
+  if TYPE_CHAM == "ELGA_ERREUR" : return cham_elem_erreur
+  if TYPE_CHAM == "ELGA_FLUX_R" : return cham_elem_flux_r
+  if TYPE_CHAM == "ELGA_GEOM_R" : return cham_elem_geom_r
+  if TYPE_CHAM == "ELGA_G_DEPL_R" : return cham_elem_g_depl
+  if TYPE_CHAM == "ELGA_HYDR_R" : return cham_elem_hydr_r
+  if TYPE_CHAM == "ELGA_INST_R" : return cham_elem_inst_r
+  if TYPE_CHAM == "ELGA_INTE_R" : return cham_elem_inte_r
+  if TYPE_CHAM == "ELGA_META_R" : return cham_elem_meta_r
+  if TYPE_CHAM == "ELGA_NEUT_F" : return cham_elem_neut_f
+  if TYPE_CHAM == "ELGA_NEUT_R" : return cham_elem_neut_r
+  if TYPE_CHAM == "ELGA_PRES_R" : return cham_elem_pres_r
+  if TYPE_CHAM == "ELGA_SIEF_R" : return cham_elem_sief_r
+  if TYPE_CHAM == "ELGA_SOUR_R" : return cham_elem_sour_r
+  if TYPE_CHAM == "ELGA_TEMP_F" : return cham_elem_temp_f
+  if TYPE_CHAM == "ELGA_TEMP_R" : return cham_elem_temp_r
+  if TYPE_CHAM == "ELGA_VARI_R" : return cham_elem_vari_r
+  if TYPE_CHAM == "ELGA_VNOR_C" : return cham_elem_vnor_c
+  if TYPE_CHAM == "CART_IRRA_R" : return carte_irra_r
+  if TYPE_CHAM == "NOEU_IRRA_R" : return cham_no_irra_r
+  if TYPE_CHAM == "ELEM_IRRA_R" : return cham_elem_irra_r
+  if TYPE_CHAM == "ELNO_IRRA_R" : return cham_elem_irra_r
+  if TYPE_CHAM == "ELGA_IRRA_R" : return cham_elem_irra_r
+  raise AsException("type de concept resultat non prevu")
+
+CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
+                fr="  ",docu="U4.72.04-a1",reentrant='n',
+         TYPE_CHAM       =SIMP(statut='o',typ='TXM',     
+                        into=("CART_DBEL_R","NOEU_DBEL_R","ELEM_DBEL_R",  
+                             "ELNO_DBEL_R","ELGA_DBEL_R","CART_DEPL_C",         
+                             "NOEU_DEPL_C","ELEM_DEPL_C","ELNO_DEPL_C",         
+                             "ELGA_DEPL_C","CART_DEPL_F","NOEU_DEPL_F",         
+                             "ELEM_DEPL_F","ELNO_DEPL_F","ELGA_DEPL_F",         
+                             "CART_DEPL_R","NOEU_DEPL_R","ELEM_DEPL_R",         
+                             "ELNO_DEPL_R","ELGA_DEPL_R","CART_DURT_R",         
+                             "NOEU_DURT_R","ELEM_DURT_R","ELNO_DURT_R",         
+                             "ELGA_DURT_R","CART_ENER_R","NOEU_ENER_R",         
+                             "ELEM_ENER_R","ELNO_ENER_R","ELGA_ENER_R",         
+                             "CART_EPSI_R","NOEU_EPSI_R","ELEM_EPSI_R",         
+                             "ELNO_EPSI_R","ELGA_EPSI_R","CART_ERREUR",         
+                             "NOEU_ERREUR","ELEM_ERREUR","ELNO_ERREUR",         
+                             "ELGA_ERREUR","CART_FLUX_R","NOEU_FLUX_R",         
+                             "ELEM_FLUX_R","ELNO_FLUX_R","ELGA_FLUX_R",         
+                             "CART_GEOM_R","NOEU_GEOM_R","ELEM_GEOM_R",         
+                             "ELNO_GEOM_R","ELGA_GEOM_R","CART_G_DEPL_R",       
+                             "NOEU_G_DEPL_R","ELEM_G_DEPL_R","ELNO_G_DEPL_R",   
+                             "ELGA_G_DEPL_R","CART_HYDR_R","NOEU_HYDR_R",       
+                             "ELEM_HYDR_R","ELNO_HYDR_R","ELGA_HYDR_R",         
+                             "CART_INST_R","NOEU_INST_R","ELEM_INST_R",         
+                             "ELNO_INST_R","ELGA_INST_R","CART_INTE_R",         
+                             "NOEU_INTE_R","ELEM_INTE_R","ELNO_INTE_R",         
+                             "ELGA_INTE_R","CART_META_R","NOEU_META_R",         
+                             "ELEM_META_R","ELNO_META_R","ELGA_META_R",         
+                             "CART_NEUT_F","NOEU_NEUT_F","ELEM_NEUT_F",         
+                             "ELNO_NEUT_F","ELGA_NEUT_F","CART_NEUT_R",         
+                             "NOEU_NEUT_R","ELEM_NEUT_R","ELNO_NEUT_R",         
+                             "ELGA_NEUT_R","CART_PRES_R","NOEU_PRES_R",         
+                             "ELEM_PRES_R","ELNO_PRES_R","ELGA_PRES_R",         
+                             "CART_SIEF_R","NOEU_SIEF_R","ELEM_SIEF_R",         
+                             "ELNO_SIEF_R","ELGA_SIEF_R","CART_SOUR_R",         
+                             "NOEU_SOUR_R","ELEM_SOUR_R","ELNO_SOUR_R",         
+                             "ELGA_SOUR_R","CART_TEMP_F","NOEU_TEMP_F",         
+                             "ELEM_TEMP_F","ELNO_TEMP_F","ELGA_TEMP_F",         
+                             "CART_TEMP_R","NOEU_TEMP_R","ELEM_TEMP_R",         
+                             "ELNO_TEMP_R","ELGA_TEMP_R","CART_VAR2_R",         
+                             "NOEU_VAR2_R","ELEM_VARI_R","ELNO_VARI_R",         
+                             "ELGA_VARI_R","CART_VNOR_C","NOEU_VNOR_C",         
+                             "ELEM_VNOR_C","ELNO_VNOR_C","ELGA_VNOR_C",
+                             "CART_IRRA_R","NOEU_IRRA_R","ELEM_IRRA_R",
+                             "ELNO_IRRA_R","ELGA_IRRA_R",) ),
+
+#        SI CREATION D'UN CHAM_NO, POUR IMPOSER LA NUMEROTATION DES DDLS :
+#        ------------------------------------------------------------------
+         regles=(EXCLUS('NUME_DDL','CHAM_NO',)),         
+         NUME_DDL        =SIMP(statut='f',typ=(nume_ddl) ),
+         CHAM_NO         =SIMP(statut='f',typ=(cham_no) ),
+
+         OPERATION       =SIMP(statut='o',typ='TXM',into=("AFFE","ASSE","EVAL","EXTR","DISC",) ),
+
+         b_affe          =BLOC(condition = "OPERATION == 'AFFE'", 
+             regles=(UN_PARMI('MAILLAGE','MODELE'),EXCLUS('MAILLAGE','PROL_ZERO'),),         
+             MAILLAGE        =SIMP(statut='f',typ=(maillage) ),
+             MODELE          =SIMP(statut='f',typ=(modele) ),
+             PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+             AFFE            =FACT(statut='o',min=01,max='**',
+                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD',),         
+                        UN_PARMI('VALE','VALE_I','VALE_C','VALE_F', ),),
+                TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+                MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+                GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+                NOEUD           =SIMP(statut='f',typ=no,max='**'),
+                NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
+                VALE            =SIMP(statut='f',typ='R',max='**' ),  
+                VALE_I          =SIMP(statut='f',typ='I',max='**' ),  
+                VALE_C          =SIMP(statut='f',typ='C',max='**' ),  
+                VALE_F          =SIMP(statut='f',typ=fonction,max='**'), 
+                                   ),
+                             ),
+         b_asse          =BLOC(condition = "OPERATION == 'ASSE'", 
+             regles=(UN_PARMI('MAILLAGE','MODELE'),EXCLUS('MAILLAGE','PROL_ZERO'),),         
+             MAILLAGE        =SIMP(statut='f',typ=(maillage) ),
+             MODELE          =SIMP(statut='f',typ=(modele) ),
+             PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+             ASSE            =FACT(statut='o',min=01,max='**',
+                regles=(AU_MOINS_UN('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD',),      
+                PRESENT_PRESENT('NOM_CMP_RESU','NOM_CMP', ),),
+                TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+                GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+                MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+                NOEUD           =SIMP(statut='f',typ=no,max='**'),
+                CHAM_GD         =SIMP(statut='o',typ=(cham_gd)),
+                NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),  
+                NOM_CMP_RESU    =SIMP(statut='f',typ='TXM',max='**' ),  
+                CUMUL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                COEF_R          =SIMP(statut='f',typ='R',defaut= 1. ),  
+                                    ),
+                             ),
+         b_eval          =BLOC(condition = "OPERATION == 'EVAL'", 
+             CHAM_F          =SIMP(statut='o',typ=(cham_gd)),
+             CHAM_PARA       =SIMP(statut='o',typ=(cham_gd),max='**'),
+                             ),
+         b_disc          =BLOC(condition = "OPERATION == 'DISC'", 
+             MODELE          =SIMP(statut='f',typ=(modele) ),
+             PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+             CHAM_GD         =SIMP(statut='o',typ=(cham_gd)),
+                             ),
+         b_extr          =BLOC(condition = "OPERATION == 'EXTR'", 
+             regles=(UN_PARMI('MAILLAGE','RESULTAT'),),         
+             MAILLAGE        =SIMP(statut='f',typ=(maillage) ),
+             RESULTAT        =SIMP(statut='f',typ=(resultat) ),
+             b_extr_maillage =BLOC(condition = "MAILLAGE != None",
+                 NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("GEOMETRIE",)),
+                                  ),
+             b_extr_resultat =BLOC(condition = "RESULTAT != None",
+                 regles=(EXCLUS('TYPE_MAXI','NUME_ORDRE','INST','FREQ','NUME_MODE',        
+                                'NOEUD_CMP','NOM_CAS','ANGL', ),),
+                 NOM_CHAM        =SIMP(statut='o',typ='TXM',     
+                           into=("DEPL","VITE","ACCE",          
+                             "DEPL_ABSOLU","VITE_ABSOLU",
+                             "TEMP","IRRA","ACCE_ABSOLU",  
+                             "FORC_NODA","REAC_NODA","EFGE_NOEU_DEPL",          
+                             "EFGE_NOEU_CART","EPSI_NOEU_DEPL",                 
+                             "SIGM_NOEU_DEPL","SIGM_NOEU_CART",                 
+                             "SIPO_NOEU_DEPL","EQUI_NOEU_SIGM",                 
+                             "EQUI_NOEU_EPSI","FLUX_NOEU_TEMP",                 
+                             "FLUX_ELGA_TEMP","FLUX_ELNO_TEMP",                 
+                             "META_ELGA_TEMP","META_ELNO_TEMP",                 
+                             "META_NOEU_TEMP","DURT_ELGA_META",                 
+                             "DURT_ELNO_META","DURT_NOEU_META","SIEF_ELGA",     
+                             "SIEF_ELNO_ELGA","SIEF_ELGA_DEPL",                 
+                             "VARI_ELNO_ELGA","VARI_ELGA","EPOT_ELEM_DEPL",     
+                             "ECIN_ELEM_DEPL","SOUR_ELGA_ELEC",                 
+                             "PRES_ELNO_REEL","PRES_ELNO_IMAG",                 
+                             "PRES_ELNO_DBEL","INTE_ELNO_ACTI",                 
+                             "INTE_ELNO_REAC","EFGE_ELNO_DEPL",                 
+                             "SIGM_ELNO_DEPL","EFGE_ELNO_CART",                 
+                             "SIGM_ELNO_CART","SIPO_ELNO_DEPL",                 
+                             "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL",                 
+                             "EPSG_ELNO_DEPL","EPSG_ELGA_DEPL","EPSP_ELNO",     
+                             "EPSP_ELGA","EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",     
+                             "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI",                 
+                             "ERRE_ELNO_ELGA","ERRE_ELGA_NORE",                 
+                             "ERRE_ELEM_NOZ1","ERRE_ELEM_NOZ2",                 
+                             "SIGM_NOZ1_ELGA","SIGM_NOZ2_ELGA",                 
+                             "DEGE_ELNO_DEPL","SIRE_ELNO_DEPL",                 
+                             "VNOR_ELEM_DEPL","SIEF_ELNO","VARI_ELNO",          
+                             "SIEF_NOEU_ELGA","VARI_NOEU_ELGA",                 
+                             "PRES_NOEU_DBEL","PRES_NOEU_REEL",                 
+                             "PRES_NOEU_IMAG","INTE_NOEU_ACTI",                 
+                             "INTE_NOEU_REAC","DCHA_ELGA_SIGM",                 
+                             "DCHA_ELNO_SIGM","RADI_ELGA_SIGM",                 
+                             "RADI_ELNO_SIGM","ENDO_ELNO_SIGA",                 
+                             "ENDO_ELNO_SINO","ENDO_ELNO_SIGM",                 
+                             "SIGM_ELNO_VARI","SIGM_NOEU_VARI",                 
+                             "EPME_ELNO_DEPL","EPME_ELGA_DEPL",                 
+                             "EPME_ELNO_DPGE","EPMG_ELNO_DEPL",                 
+                             "EPMG_ELGA_DEPL","GRAD_ELGA_THETA",                
+                             "GTHE_ELNO_ELGA","GRAD_NOEU_THETA",
+                             "HYDR_ELGA","HYDR_ELNO_ELGA","HYDR_NOEU_ELGA",    
+                             "THETA","SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",
+                             "VALE_CONT",) ),
+                 TYPE_MAXI       =SIMP(statut='f',typ='TXM',into=("MAXI","MINI","MAXI_ABS","MINI_ABS","NORM_TRAN",) ),
+                 TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="VALE",into=("VALE","INST",) ),
+                 TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                 LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+                 NUME_ORDRE      =SIMP(statut='f',typ='I'),  
+                 INST            =SIMP(statut='f',typ='R'),  
+                 FREQ            =SIMP(statut='f',typ='R'),  
+                 NUME_MODE       =SIMP(statut='f',typ='I'),  
+                 NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),  
+                 NOM_CAS         =SIMP(statut='f',typ='TXM'),  
+                 ANGL            =SIMP(statut='f',typ='R'),  
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),  
+                 CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+                 INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN",) ),
+                              ),
+
+                ),
+# FIN DU CATALOGUE : INFO,TITRE ET TYPAGE DU RESULAT :
+#-----------------------------------------------------
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage,
+                     docu="U4.23.02-c",reentrant='n',
+         regles=(EXCLUS('ECLA_PG','CREA_MAILLE'),
+                 EXCLUS('ECLA_PG','CREA_GROUP_MA'),
+                 EXCLUS('ECLA_PG','DETR_GROUP_MA'),
+                 EXCLUS('ECLA_PG','MODI_MAILLE'),),
+         MAILLAGE        =SIMP(statut='o',typ=maillage ),
+         CREA_POI1       =FACT(statut='f',min=01,max='**',fr="Création de mailles de type POI1 à partir de noeuds",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD' ),),
+           NOM_GROUP_MA    =SIMP(statut='f',typ=grma,max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+         ),
+         CREA_MAILLE     =FACT(statut='f',min=01,max='**',fr="Duplication de mailles",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           PREF_MAILLE     =SIMP(statut='o',typ='TXM' ),
+           PREF_NUME       =SIMP(statut='f',typ='I' ),
+         ),
+         CREA_GROUP_MA   =FACT(statut='f',min=01,max='**',fr="Duplication de mailles et création de groupes de mailles",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           NOM             =SIMP(statut='o',typ='TXM'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           PREF_MAILLE     =SIMP(statut='o',typ='TXM' ),
+           PREF_NUME       =SIMP(statut='f',typ='I' ),
+         ),
+         DETR_GROUP_MA   =FACT(statut='f',min=01,max=01,fr="Destruction de groupes de mailles",
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           NB_MAILLE       =SIMP(statut='f',typ='I',defaut= 0,
+                                 fr="Nombre minimal de mailles que doit contenir le groupe pour etre détruit",  ),  
+         ),
+         MODI_MAILLE     =FACT(statut='f',min=01,max='**',fr="Modification du type de mailles",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=ma,max='**'),
+           OPTION          =SIMP(statut='o',typ='TXM',into=("TRIA6_7","QUAD8_9","SEG3_4"),fr="Choix de la transformation" ),
+           PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
+           PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
+         ),
+         REPERE          =FACT(statut='f',min=01,max='**',
+                               fr="changement de repère servant à déterminer les caractéristiques d une section de poutre",
+           TABLE           =SIMP(statut='o',typ=tabl_cara_geom,
+                                 fr="Nom de la table contenant les caractéristiques de la section de poutre" ),
+           NOM_ORIG        =SIMP(statut='f',typ='TXM',into=("CDG","TORSION"),fr="Origine du nouveau repère" ),
+           NOM_ROTA        =SIMP(statut='f',typ='TXM',into=("INERTIE",),fr="Direction du repére"  ),   
+           b_cdg =BLOC(condition = "NOM_ORIG == 'CDG'",
+             GROUP_MA        =SIMP(statut='f',typ=grma,
+                                   fr="Nom du groupe de mailles dont le centre de gravité sera l origine du nouveau repère"),
+           ),
+         ),
+         ECLA_PG         =FACT(statut='f',min=01,max=01,
+                               fr="Eclatement des mailles en petites mailles contenant chacune un seul point de gauss",
+           MODELE          =SIMP(statut='o',typ=modele ),
+           SHRINK          =SIMP(statut='f',typ='R',defaut= 0.9, fr="Facteur de réduction" ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 07/01/2002   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def crea_resu_prod(TYPE_RESU,**args):
+  if TYPE_RESU == "EVOL_ELAS"    : return evol_elas
+  if TYPE_RESU == "EVOL_NOLI"    : return evol_noli
+  if TYPE_RESU == "EVOL_THER"    : return evol_ther
+  if TYPE_RESU == "MULT_ELAS"    : return mult_elas
+  if TYPE_RESU == "FOURIER_ELAS" : return fourier_elas
+  if TYPE_RESU == "EVOL_VARC"    : return evol_varc
+  raise AsException("type de concept resultat non prevu")
+
+CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-d1",reentrant='f',
+               fr="Engendrer ou enrichir une structure de donnees en affectant les cham_gd associes",
+
+         OPERATION =SIMP(statut='o',typ='TXM',into=("AFFE","ECLA_PG","PERM_CHAM","PROL_RTZ",),
+                         fr="choix de la fonction a activer",),
+
+         b_affe       =BLOC(condition = "OPERATION == 'AFFE'",
+
+           TYPE_RESU    =SIMP(statut='o',typ='TXM',into=("MULT_ELAS","EVOL_ELAS","EVOL_NOLI","FOURIER_ELAS",
+                                                         "EVOL_THER","EVOL_VARC",) ),
+           NOM_CHAM     =SIMP(statut='f',typ='TXM',into=("DEPL","TEMP","IRRA","HYDR_ELGA",),max=1 ),
+           AFFE         =FACT(statut='f',min=01,max='**',
+             regles=(UN_PARMI('NOM_CAS','NUME_MODE','LIST_INST','INST',),),
+             CHAM_GD         =SIMP(statut='f',typ=(cham_gd)),
+             NUME_ORDRE_INIT =SIMP(statut='f',typ='I'),
+             NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+             NUME_MODE       =SIMP(statut='f',typ='I'),
+             TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
+             INST            =SIMP(statut='f',typ='R',max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8),
+             NUME_INIT       =SIMP(statut='f',typ='I'),
+             NUME_FIN        =SIMP(statut='f',typ='I'),
+           ),  
+         ),  
+
+         b_ecla_pg    =BLOC(condition = "OPERATION == 'ECLA_PG'",
+           
+           TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_ELAS","EVOL_NOLI","EVOL_THER"), ),
+         
+           ECLA_PG         =FACT(statut='f',min=01,max=01,
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                   into=("SIEF_ELGA","VARI_ELGA","SIEF_ELGA_DEPL","FLUX_ELGA_TEMP",) ),
+             MODELE_INIT     =SIMP(statut='o',typ=modele),
+             RESU_INIT       =SIMP(statut='o',typ=resultat),
+             MAILLAGE        =SIMP(statut='o',typ=maillage),
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis),
+             INST            =SIMP(statut='f',typ='R',max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+           ),
+         ),
+
+         b_perm_cham =BLOC(condition = "OPERATION == 'PERM_CHAM'",
+
+           TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_NOLI",) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","SIEF_ELGA","VARI_ELGA",),max='**' ),
+           RESU_INIT       =SIMP(statut='o',typ=evol_noli),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+           CRITERE         =SIMP(statut='f',typ='TXM',into=('RELATIF','ABSOLU'),defaut='RELATIF'),
+           MAILLAGE_INIT   =SIMP(statut='o',typ=maillage,),
+           RESU_FINAL      =SIMP(statut='o',typ=evol_noli,),
+           MAILLAGE_FINAL  =SIMP(statut='o',typ=maillage,),
+           PERM_CHAM       =FACT(statut='o',min=01,max=01,
+              GROUP_MA_FINAL =SIMP(statut='o',typ=grma),
+              GROUP_MA_INIT  =SIMP(statut='o',typ=grma),
+              TRAN           =SIMP(statut='o',typ='R',max='**'),
+              PRECISION      =SIMP(statut='f',typ='R',defaut=1.0E-3),
+           ),
+         ),
+
+         b_prol_rtz   =BLOC(condition = "OPERATION == 'PROL_RTZ'",
+
+           TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_THER",) ),
+
+           PROL_RTZ        =FACT(statut='f',min=01,max=01,
+              regles=(EXCLUS('INST','LIST_INST'),),
+              MAILLAGE_FINAL  =SIMP(statut='o',typ=maillage,),
+              TABLE           =SIMP(statut='o',typ=tabl_post_rele,fr="Table issue de post_releve_t"),
+              INST            =SIMP(statut='f',typ='R',max='**'),
+              LIST_INST       =SIMP(statut='f',typ=listr8),
+              b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
+                 CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+              ),
+              PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU",),),
+              PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU",),),
+              REPERE          =SIMP(statut='o',typ='TXM',into=("CYLINDRIQUE",),),
+              ORIGINE         =SIMP(statut='o',typ='R',min=03,max=03),  
+              AXE_Z           =SIMP(statut='o',typ='R',min=03,max=03),  
+           ),
+         ),
+
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEBUT=MACRO(nom="DEBUT",op=0 ,docu="U4.11.01-f1",repetable='n',
+           fr="Ouverture d une étude. Allocation des ressources mémoire et disque",
+          sd_prod=ops.DEBUT,
+
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+                           into=("OUI","NON"),defaut="OUI"),
+         BASE            =FACT(fr="définition des paramètres associés aux bases JEVEUX",
+                               statut='f',min=01,max=03,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM',
+                                 into=('GLOBALE','VOLATILE','LOCALE'),),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           CAS             =SIMP(statut='f',typ='TXM'),
+           NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+           LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+           LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max=03,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='o',typ='I'),
+         ),
+         CATALOGUE       =FACT(statut='f',min=01,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+         CODE            =FACT("définition d un nom pour l'esemble d'une étude",
+                               statut='f',min=01,max=01,
+           NOM             =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I',defaut=15),
+         ),
+         DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
+                               statut='f',min=01,max=01,
+           JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+                                 statut='f',typ='TXM',into=('TEST',)),
+         ),
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=01,max=01,
+           GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
+           TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
+           TAILLE          =SIMP(statut='f',typ='I'),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut=800.),
+           PARTITION       =SIMP(statut='f',typ='R'),
+         ),
+ );
+#& MODIF COMMANDE  DATE 19/12/2001   AUTEUR CIBHHPD D.NUNEZ 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=base_modale,
+                     docu="U4.64.02-e",reentrant='f',
+         regles=(UN_PARMI('CLASSIQUE','RITZ','DIAG_MASS'),),
+         CLASSIQUE       =FACT(statut='f',min=01,max=01,
+           INTERF_DYNA     =SIMP(statut='o',typ=interf_dyna_clas ),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca,max='**' ),
+           NMAX_MODE       =SIMP(statut='f',typ='I',defaut= 10 ),
+         ),
+         RITZ            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MODE_STAT','MODE_MECA','MULT_ELAS','BASE_MODALE'),),
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca,max='**'  ),
+           NMAX_MODE       =SIMP(statut='f',typ='I',defaut= 999 ),
+           MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,) ),
+           MULT_ELAS       =SIMP(statut='f',typ=mult_elas ),
+           BASE_MODALE     =SIMP(statut='f',typ=base_modale ),
+         ),
+        DIAG_MASS        =FACT(statut='f',min=01,max='**',
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca,max='**'  ),
+           MODE_STAT       =SIMP(statut='o',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,) ),
+         ),
+#  le bloc conditionnel remplace-t-il PRESENT_PRESENT('RITZ','NUME_REF'),
+#                                     PRESENT_ABSENT('INTERF_DYNA','CLASSIQUE'),        
+         b_ritz          =BLOC(condition = "RITZ != None",
+           INTERF_DYNA     =SIMP(statut='f',typ=interf_dyna_clas ),
+           NUME_REF        =SIMP(statut='o',typ=nume_ddl ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_CABLE_BP=OPER(nom="DEFI_CABLE_BP",op= 180,sd_prod=cabl_precont,
+                   fr=" ",
+                   docu="U4.42.04-a",reentrant='n',
+         MODELE          =SIMP(statut='o',typ=modele ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+         GROUP_MA_BETON  =SIMP(statut='o',typ=grma),
+         DEFI_CABLE      =FACT(statut='o',min=1,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('NOEUD_ANCRAGE','GROUP_NO_ANCRAGE'),),
+           MAILLE          =SIMP(statut='f',typ=ma,min=2,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           NOEUD_ANCRAGE   =SIMP(statut='f',typ=no,max=2),
+           GROUP_NO_ANCRAGE=SIMP(statut='f',typ=grno,max=2),
+           TYPE_ANCRAGE    =SIMP(statut='o',typ='TXM',min=2,max=2,     
+                                 into=("ACTIF","PASSIF") ),
+         ),
+         TENSION_INIT    =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         RECUL_ANCRAGE   =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         RELAXATION      =FACT(statut='f',min=0,max=1,
+           R_J             =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op=   2,sd_prod=fonction,
+                    fr="Définition d une fonction constante",
+                    docu="U4.31.01-f",reentrant='n',
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE            =SIMP(statut='o',typ='R',max=01 ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater,docu="U4.42.03-e",reentrant='n',
+                    fr="Définition d une coque composite couche par couche",
+         COUCHE          =FACT(statut='o',min=01,max='**',
+           EPAIS           =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+           MATER           =SIMP(statut='o',typ=(mater) ),
+           ORIENTATION     =SIMP(statut='f',typ='R',defaut= 0.E+0,
+                                 val_min=-90.E+0,val_max=90.E+0   ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
+                                 into=("RESULTAT",) ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
+                    docu="U4.25.01-d",reentrant='n',
+         regles=(  UN_PARMI('FAISCEAU_TRANS','GRAPPE','FAISCEAU_AXIAL','COQUE_COAX',),),
+         FAISCEAU_TRANS  =FACT(statut='f',min=01,max='**',
+           COUPLAGE        =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           PROF_RHO_F_INT  =SIMP(statut='f',typ=fonction ),
+           PROF_RHO_F_EXT  =SIMP(statut='f',typ=fonction ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',into=("DX","DY","DZ") ),
+           COEF_MASS_AJOU  =SIMP(statut='f',typ='R' ),
+           TYPE_PAS        =SIMP(statut='f',typ='TXM',into=("CARRE_LIGN","TRIA_LIGN") ),
+           TYPE_RESEAU     =SIMP(statut='f',typ='I' ),
+           UNITE_CD        =SIMP(statut='f',typ='I',defaut=70),
+           UNITE_CK        =SIMP(statut='f',typ='I',defaut=71),            
+           PAS             =SIMP(statut='f',typ='R' ),
+         ),
+         GRAPPE          =FACT(statut='f',min=00,max=01,
+           regles=(ENSEMBLE('GRAPPE_2','NOEUD','CARA_ELEM','MODELE','RHO_FLUI',),
+                   PRESENT_PRESENT('COEF_MASS_AJOU','GRAPPE_2', ),),
+#  peut on créer un bloc a partir de la valeur de couplage  
+           COUPLAGE        =SIMP(statut='o',typ='TXM',into=("OUI","NON") ),
+           GRAPPE_2        =SIMP(statut='f',typ='TXM',
+                                 into=("ASC_CEN","ASC_EXC","DES_CEN","DES_EXC") ),
+           NOEUD           =SIMP(statut='f',typ=no),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           MODELE          =SIMP(statut='f',typ=modele ),
+           COEF_MASS_AJOU  =SIMP(statut='f',typ='R' ),
+           RHO_FLUI        =SIMP(statut='f',typ='R' ),
+           UNITE_CA        =SIMP(statut='f',typ='I',defaut=70),
+           UNITE_KA        =SIMP(statut='f',typ='I',defaut=71),            
+         ),
+         FAISCEAU_AXIAL  =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA','TRI_GROUP_MA'),
+                   UN_PARMI('CARA_ELEM','RAYON_TUBE'),
+                   ENSEMBLE('RAYON_TUBE','COOR_TUBE'),
+                   PRESENT_ABSENT('RAYON_TUBE','TRI_GROUP_MA'),
+                   ENSEMBLE('CARA_PAROI','VALE_PAROI'),
+                   ENSEMBLE('LONG_TYPG','LARG_TYPG','EPAI_TYPG','RUGO_TYPG','COEF_TRAI_TYPG','COEF_DPOR_TYPG',
+                            'COOR_GRILLE','TYPE_GRILLE', ),),
+#  on doit pouvoir mettre des blocs conditionnels mais pas assez d infos pour le faire                            
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           TRI_GROUP_MA    =SIMP(statut='f',typ='TXM' ),
+           VECT_X          =SIMP(statut='f',typ='R',max=03),
+           PROF_RHO_FLUI   =SIMP(statut='f',typ=fonction ),
+           PROF_VISC_CINE  =SIMP(statut='f',typ=fonction ),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           RAYON_TUBE      =SIMP(statut='f',typ='R' ),
+           COOR_TUBE       =SIMP(statut='f',typ='R',max='**'),
+           PESANTEUR       =SIMP(statut='f',typ='R',min=04,max=04),
+           RUGO_TUBE       =SIMP(statut='f',typ='R' ),
+           CARA_PAROI      =SIMP(statut='f',typ='TXM',max=05,
+                                 into=("YC","ZC","R","HY","HZ") ),
+           VALE_PAROI      =SIMP(statut='f',typ='R',max=05),
+           ANGL_VRIL       =SIMP(statut='f',typ='R' ),
+           LONG_TYPG       =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           LARG_TYPG       =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           EPAI_TYPG       =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           RUGO_TYPG       =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           COEF_TRAI_TYPG  =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           COEF_DPOR_TYPG  =SIMP(statut='f',typ='R',max='**'),
+           COOR_GRILLE     =SIMP(statut='f',typ='R',max='**'),
+           TYPE_GRILLE     =SIMP(statut='f',typ='I',max='**'),
+         ),
+         COQUE_COAX      =FACT(statut='f',min=00,max=01,
+           MASS_AJOU       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           GROUP_MA_INT    =SIMP(statut='o',typ=grma),
+           GROUP_MA_EXT    =SIMP(statut='o',typ=grma),
+           VECT_X          =SIMP(statut='o',typ='R',max='**'),
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           MATER_INT       =SIMP(statut='o',typ=mater ),
+           MATER_EXT       =SIMP(statut='o',typ=mater ),
+           RHO_FLUI        =SIMP(statut='o',typ='R' ),
+           VISC_CINE       =SIMP(statut='o',typ='R' ),
+           RUGOSITE        =SIMP(statut='o',typ='R' ),
+           PDC_MOY_1       =SIMP(statut='o',typ='R' ),
+           PDC_DYN_1       =SIMP(statut='o',typ='R' ),
+           PDC_MOY_2       =SIMP(statut='o',typ='R' ),
+           PDC_DYN_2       =SIMP(statut='o',typ='R' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 23/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction,docu="U4.MK.10-e",reentrant='n',
+                    fr="Définition d une fonction du temps pour calculer des forces de LAPLACE",
+      regles=(UN_PARMI('COUR_PRIN','COUR'),
+              EXCLUS('COUR','COUR_SECO'), ),
+         FREQ            =SIMP(statut='f',typ='R',defaut= 50.),
+         SIGNAL          =SIMP(statut='f',typ='TXM',defaut="COMPLET",into=("COMPLET","CONTINU") ),
+         COUR            =FACT(statut='f',min=1,max='**',
+         fr="Définition du courant de court-circuit",
+           regles=(UN_PARMI('PHI_CC_1','INTC_CC_1'),
+                   UN_PARMI('PHI_CC_2','INTC_CC_2'),),
+           INTE_CC_1       =SIMP(statut='o',typ='R'),
+           TAU_CC_1        =SIMP(statut='o',typ='R'),
+           PHI_CC_1        =SIMP(statut='f',typ='R'),
+           INTC_CC_1       =SIMP(statut='f',typ='R'),
+           INTE_CC_2       =SIMP(statut='o',typ='R'),
+           TAU_CC_2        =SIMP(statut='o',typ='R'),
+           PHI_CC_2        =SIMP(statut='f',typ='R'),
+           INTC_CC_2       =SIMP(statut='f',typ='R'),
+           INST_CC_INIT    =SIMP(statut='o',typ='R'),
+           INST_CC_FIN     =SIMP(statut='o',typ='R'),
+         ),
+         COUR_PRIN       =FACT(statut='f',min=1,max=1,
+         fr="Définition du courant de court-circuit avec réenclenchement",
+           regles=(UN_PARMI('PHI_CC_1','INTC_CC_1'),),
+           INTE_CC_1       =SIMP(statut='o',typ='R'),
+           TAU_CC_1        =SIMP(statut='o',typ='R'),
+           PHI_CC_1        =SIMP(statut='f',typ='R'),
+           INTC_CC_1       =SIMP(statut='f',typ='R'),
+           INTE_RENC_1     =SIMP(statut='f',typ='R'),
+           TAU_RENC_1      =SIMP(statut='f',typ='R'),
+           PHI_RENC_1      =SIMP(statut='f',typ='R'),
+           INST_CC_INIT    =SIMP(statut='o',typ='R'),
+           INST_CC_FIN     =SIMP(statut='o',typ='R'),
+           INST_RENC_INIT  =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+           INST_RENC_FIN   =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+         ),
+         COUR_SECO       =FACT(statut='f',min=1,max='**',
+         fr="Définition du courant de court-circuit avec un intervalle de temps différent de celui de COUR_PRIN",
+           regles=(UN_PARMI('PHI_CC_2','INTC_CC_2'),),
+           INTE_CC_2       =SIMP(statut='o',typ='R'),
+           TAU_CC_2        =SIMP(statut='o',typ='R'),
+           PHI_CC_2        =SIMP(statut='f',typ='R'),
+           INTC_CC_2       =SIMP(statut='f',typ='R'),
+           INTE_RENC_2     =SIMP(statut='f',typ='R'),
+           TAU_RENC_2      =SIMP(statut='f',typ='R'),
+           PHI_RENC_2      =SIMP(statut='f',typ='R'),
+           DIST            =SIMP(statut='f',typ='R',defaut=1.0E+0),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction,
+                    docu="U4.35.01-c",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
+         NOEUD_INIT      =SIMP(statut='o',typ=no),
+         NOEUD_FIN       =SIMP(statut='o',typ=no),
+         VITE            =FACT(statut='o',min=1,max=1,
+           VALE            =SIMP(statut='f',typ='R',defaut= 1. ),
+           PROFIL          =SIMP(statut='o',typ='TXM',into=("UNIFORME","LEONARD") ),
+           NB_BAV          =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 2 , 3 ) ),
+         ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",
+                               into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",
+                               into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM' ,defaut="EXCLU",
+                               into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE MCOURTOI M.COURTOIS
+def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,**args):
+  if VALE != None  : return fonction
+  if VALE_C != None  : return fonction_c
+  if VALE_PARA != None  : return fonction
+  if NOEUD_PARA != None  : return fonction
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
+                    ,fr="Définition des valeurs réelles ou complexes d une fonction réelle",
+                     docu="U4.31.02-f1",reentrant='n',
+         regles=(UN_PARMI('VALE','VALE_C','VALE_PARA','NOEUD_PARA'),),
+         NOM_PARA        =SIMP(statut='o',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","META","FREQ","PULS",
+                                     "AMOR","ABSC","SIGM","HYDR","SECH","PORO","SAT",
+                                     "PGAZ","PCAP","VITE") ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE            =SIMP(statut='f',typ='R',min=2,max='**',
+                               fr ="Fonction réelle définie par une liste de couples (abscisse,ordonnée)"),
+         VALE_C          =SIMP(statut='f',typ='R',min=2,max='**',
+                               fr ="Fonction complexe définie par une liste de couples"),
+         VALE_PARA       =SIMP(statut='f',typ=listr8,
+                               fr ="Fonction réelle définie par deux concepts de type listr8" ),
+         b_vale_para     =BLOC(condition = "VALE_PARA != None",
+           VALE_FONC       =SIMP(statut='o',typ=listr8 ),
+         ),
+         NOEUD_PARA      =SIMP(statut='f',typ=no,max='**',
+                               fr ="Fonction réelle définie par une liste de noeuds et un maillage"),
+         b_noeud_para    =BLOC(condition = "NOEUD_PARA != None",
+           MAILLAGE        =SIMP(statut='o',typ=maillage ),
+           VALE_Y          =SIMP(statut='o',typ='R',max='**'),
+         ),
+
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         VERIF           =SIMP(statut='f',typ='TXM',defaut="CROISSANT",into=("CROISSANT","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,docu="U4.82.01-e",reentrant='n',
+                    fr="Définition de lèvres et d un fond de fissure en 3D",
+         regles=(UN_PARMI('FOND','FOND_FERME'),
+                 EXCLUS('FOND_FERME','DTAN_ORIG'),
+                 EXCLUS('FOND_FERME','DTAN_EXTR'),
+                      EXCLUS('FOND_FERME','VECT_GRNO_ORIG'),
+                      EXCLUS('FOND_FERME','VECT_GRNO_EXTR'),
+                 UN_PARMI('LEVRE_SUP','NORMALE'),
+                      EXCLUS('LEVRE_INF','NORMALE'),
+                 ENSEMBLE('DTAN_ORIG','DTAN_EXTR'),
+                      ENSEMBLE('VECT_GRNO_ORIG','VECT_GRNO_EXTR'),
+                      EXCLUS('DTAN_ORIG','VECT_GRNO_ORIG'),
+                      EXCLUS('DTAN_EXTR','VECT_GRNO_EXTR') ,),
+           MAILLAGE        =SIMP(statut='o',typ=maillage ),
+           FOND            =FACT(statut='f',min=01,max=01,
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+                     EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+                          EXCLUS('NOEUD_EXTR','GROUP_NO_EXTR'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+#  à mettre à jour le max vaut-il 1  
+             NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
+           ),
+           FOND_FERME      =FACT(statut='f',min=01,max=01,
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+                          EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+             MAILLE_ORIG     =SIMP(statut='f',typ=ma,max=1),
+             GROUP_MA_ORIG   =SIMP(statut='f',typ=ma,max=1),
+           ),
+           LEVRE_SUP       =FACT(statut='f',min=01,max=01,
+             regles=(UN_PARMI('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           ),
+           LEVRE_INF       =FACT(statut='f',min=01,max=01,
+             regles=(UN_PARMI('GROUP_MA','MAILLE', ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           ),
+           NORMALE         =SIMP(statut='f',typ='R',max='**'),
+           DTAN_ORIG       =SIMP(statut='f',typ='R',max='**'),
+           DTAN_EXTR       =SIMP(statut='f',typ='R',max='**'),
+           VECT_GRNO_ORIG  =SIMP(statut='f',typ=grno,max=2),
+           VECT_GRNO_EXTR  =SIMP(statut='f',typ=grno,max=2),
+           INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR VABHHTS J.TESELET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def defi_group_prod(MAILLAGE,**args):
+  if AsType(MAILLAGE) == maillage : return maillage
+  if AsType(MAILLAGE) == squelette : return squelette
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
+                fr="Définition de nouveaux groupes de noeuds et/ou de mailles dans un concept maillage",
+                docu="U4.22.01-e",reentrant='o',
+         regles=(AU_MOINS_UN('CREA_GROUP_MA','CREA_GROUP_NO'),),            
+         MAILLAGE        =SIMP(statut='o',typ=(maillage,squelette) ),
+         
+         CREA_GROUP_MA   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION'),),
+#  quel est le concept attendu deriere NOM
+           NOM             =SIMP(statut='o',typ=grma),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           INTERSEC        =SIMP(statut='f',typ=grma,max='**'),
+           UNION           =SIMP(statut='f',typ=grma,max='**'),
+           DIFFE           =SIMP(statut='f',typ=grma,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',into=("FACE_NORMALE","SPHERE","CYLINDRE","BANDE") ),
+           b_group_ma      =BLOC(condition = "GROUP_MA != None",
+             regles=(EXCLUS('POSITION','NUME_INIT'),),
+             NUME_INIT       =SIMP(statut='f',typ='I',defaut= 1 ),             
+             POSITION        =SIMP(statut='f',typ='TXM',into=("INIT","FIN","MILIEU") ), 
+             b_nume_init   =BLOC(condition = "NUME_INIT != None",
+               NUME_FIN        =SIMP(statut='f',typ='I' ),
+             ),      
+           ),
+           b_face_normale  =BLOC(condition = "OPTION == 'FACE_NORMALE'",
+             regles=(UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=02),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),
+             ANGL_PREC       =SIMP(statut='f',typ='R',defaut= 0.5 ),
+             VERI_SIGNE      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),     
+           ),
+           b_sphere        =BLOC(condition = "OPTION == 'SPHERE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+             RAYON           =SIMP(statut='o',typ='R' ),    
+           ),
+           b_cylindre      =BLOC(condition = "OPTION == 'CYLINDRE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+             RAYON           =SIMP(statut='o',typ='R' ), 
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=02),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),   
+           ),
+           b_bande         =BLOC(condition = "OPTION == 'BANDE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+             DIST            =SIMP(statut='o',typ='R' ),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=02),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),   
+           ),
+         ),
+         CREA_GROUP_NO   =FACT(statut='f',min=01,max='**',
+           regles = (
+         AU_MOINS_UN ('TOUT_GROUP_MA','GROUP_MA','NOEUD',
+                     'INTERSEC','UNION','DIFFE','GROUP_NO','OPTION'),
+                   EXCLUS ('TOUT_GROUP_MA','GROUP_MA','NOEUD','INTERSEC','UNION','DIFFE'),),
+           TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',into=("OUI",) ),               
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           INTERSEC        =SIMP(statut='f',typ=grno,max='**'),
+           UNION           =SIMP(statut='f',typ=grno,max='**'),
+           DIFFE           =SIMP(statut='f',typ=grno,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',into=("ENV_SPHERE","ENV_CYLINDRE","PLAN",
+                                                            "SEGM_DROI_ORDO","NOEUD_ORDO") ),  
+           b_nom_group_ma  =BLOC(condition = "GROUP_MA != None",
+             NOM             =SIMP(statut='f',typ=grma,max='**'),
+           ),
+           b_crit_noeud    = BLOC(condition = "GROUP_MA != None",
+             CRIT_NOEUD    = SIMP(statut='f',typ='TXM',defaut="TOUS",
+                            into=("TOUS","SOMMET","MILIEU","CENTRE"),),),
+           b_nom =BLOC(condition = "GROUP_MA == None and TOUT_GROUP_MA == None" ,
+             NOM             =SIMP(statut='o',typ=geom),
+           ),                                                 
+           b_group_no      =BLOC(condition = "GROUP_NO != None",
+             regles=(EXCLUS('POSITION','NUME_INIT'),),
+             NUME_INIT       =SIMP(statut='f',typ='I',defaut= 1 ),
+             POSITION        =SIMP(statut='f',typ='TXM',into=("INIT","FIN","MILIEU") ), 
+             b_nume_init     =BLOC(condition = "NUME_INIT != None",
+               NUME_FIN        =SIMP(statut='f',typ='I' ),
+             ),      
+           ),
+           b_env_sphere    =BLOC(condition = "OPTION == 'ENV_SPHERE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=01),
+             RAYON           =SIMP(statut='o',typ='R' ),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),
+           ),
+           b_env_cylindre  =BLOC(condition = "OPTION == 'ENV_CYLINDRE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=01),
+             RAYON           =SIMP(statut='o',typ='R' ),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),
+           ),
+           b_env_plan      =BLOC(condition = "OPTION == 'PLAN'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=01),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),
+           ),
+           b_segm_droi_ordo=BLOC(condition = "OPTION == 'SEGM_DROI_ORDO'",
+             regles=(UN_PARMI('NOEUD_ORIG','GROUP_NO_ORIG'),
+                     UN_PARMI('NOEUD_EXTR','GROUP_NO_EXTR'),), 
+             NOEUD_ORIG      =SIMP(statut='f',typ=no),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),
+           ),
+           b_noeud_ordo    =BLOC(condition = "OPTION == 'NOEUD_ORDO'",
+             regles=(UN_PARMI('NOEUD_ORIG','GROUP_NO_ORIG'),
+                     UN_PARMI('NOEUD_EXTR','GROUP_NO_EXTR'),),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),
+           ),      
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_INTE_SPEC=OPER(nom="DEFI_INTE_SPEC",op= 115,sd_prod=tabl_intsp,
+                    docu="U4.36.02-e1",reentrant='n',
+
+         DIMENSION       =SIMP(statut='f',typ='I',defaut= 1 ),
+
+         PAR_FONCTION    =FACT(statut='f',min=1,max='**',
+           NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           FONCTION        =SIMP(statut='o',typ=fonction_c ),
+         ),
+         KANAI_TAJIMI    =FACT(statut='f',min=1,max='**',
+           regles=(EXCLUS('VALE_R','VALE_C'),),
+           NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           FREQ_MIN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FREQ_MAX        =SIMP(statut='f',typ='R',defaut= 100. ),
+           PAS             =SIMP(statut='f',typ='R',defaut= 1. ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',defaut= 0.6 ),
+           FREQ_MOY        =SIMP(statut='f',typ='R',defaut= 5. ),
+           VALE_R          =SIMP(statut='f',typ='R' ),
+           VALE_C          =SIMP(statut='f',typ='C' ),
+           INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+           PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         ),
+         CONSTANT        =FACT(statut='f',min=1,max='**',
+           regles=(EXCLUS('VALE_R','VALE_C'),),
+           NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           FREQ_MIN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FREQ_MAX        =SIMP(statut='f',typ='R',defaut= 100. ),
+           PAS             =SIMP(statut='f',typ='R',defaut= 1. ),
+           VALE_R          =SIMP(statut='f',typ='R' ),
+           VALE_C          =SIMP(statut='f',typ='C' ),
+           INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+           PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),               
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op=  98,sd_prod=interf_dyna_clas,
+                      docu="U4.64.01-e",reentrant='n',
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl ),
+         INTERFACE       =FACT(statut='o',min=01,max='**',
+           regles=(ENSEMBLE('NOM','TYPE'),
+#  erreur doc U sur la condition qui suit
+                   UN_PARMI('NOEUD','GROUP_NO'),),
+           NOM             =SIMP(statut='f',typ='TXM' ),
+           TYPE            =SIMP(statut='f',typ='TXM',into=("MNEAL","CRAIGB","CB_HARMO","AUCUN") ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           DDL_ACTIF       =SIMP(statut='f',typ='TXM',max='**'),
+           MASQUE          =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         FREQ            =SIMP(statut='f',typ='R',defaut= 1.),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis,
+                    fr="Définition d une suite croissante d entiers",
+                    docu="U4.34.02-f",reentrant='n',
+         regles=(UN_PARMI('VALE','DEBUT'),
+                 EXCLUS('VALE','INTERVALLE'),),
+         VALE            =SIMP(statut='f',typ='I',max='**'),
+         DEBUT           =SIMP(statut='f',typ='I'),
+         INTERVALLE      =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOMBRE','PAS'),),
+           JUSQU_A         =SIMP(statut='o',typ='I'),
+           NOMBRE          =SIMP(statut='f',typ='I',val_min=1,),
+           PAS             =SIMP(statut='f',typ='I',val_min=1,),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 07/03/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8,
+                    fr="Définition d une suite croissante de réels",
+                    docu="U4.34.01-f",reentrant='n',
+         regles=(UN_PARMI('VALE','DEBUT',),
+                 EXCLUS('VALE','INTERVALLE'),
+                 ENSEMBLE('DEBUT','INTERVALLE')),
+         VALE            =SIMP(statut='f',typ='R',max='**'),
+         DEBUT           =SIMP(statut='f',typ='R'),
+         INTERVALLE      =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOMBRE','PAS'),),
+           JUSQU_A         =SIMP(statut='o',typ='R'),
+           NOMBRE          =SIMP(statut='f',typ='I'),
+           PAS             =SIMP(statut='f',typ='R'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage,
+                   fr="Définition d un nouveau maillage à partir de macro éléments",
+                   docu="U4.23.01-e",reentrant='n',
+         DEFI_MAILLE     =FACT(statut='o',min=01,max='**',
+           MACR_ELEM_STAT  =SIMP(statut='o',typ=macr_elem_stat,max='**' ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           TRAN            =SIMP(statut='f',typ='R',max=03),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+           b_angl_naut     =BLOC(condition = "ANGL_NAUT != None",
+             CENTRE          =SIMP(statut='f',typ='R',max=03),
+           ),
+         ),
+         RECO_GLOBAL     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+         ),
+         RECO_MAILLE     =FACT(statut='f',min=01,max='**',
+           MAILLE          =SIMP(statut='o',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='o',typ=grno,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="GEOMETRIQUE",into=("GEOMETRIQUE","NOEUD_A_NOEUD","INVERSE") ),
+           geometrique     =BLOC(condition = "OPTION == 'GEOMETRIQUE'",
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),
+         ),
+         DEFI_NOEUD      =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','NOEUD_INIT'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",),
+                                 fr="Renommage de tous les noeuds" ),
+           NOEUD_INIT      =SIMP(statut='f',typ=no,
+                                 fr="Renommage d un seul noeud"),                     
+           b_tout          =BLOC(condition = "TOUT != None",
+             PREFIXE         =SIMP(statut='f',typ='TXM' ),
+             INDEX           =SIMP(statut='o',typ='I',max='**'),
+           ),
+           b_noeud_init    =BLOC(condition = "NOEUD_INIT != None",
+             MAILLE          =SIMP(statut='o',typ=ma),
+             NOEUD_FIN       =SIMP(statut='o',typ=no),
+           ),        
+         ),
+         DEFI_GROUP_NO   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','MAILLE'),
+                AU_MOINS_UN('INDEX','GROUP_NO_FIN'),
+                   ENSEMBLE('GROUP_NO_INIT','GROUP_NO_FIN'),),
+#  la regle ancien catalogue AU_MOINS_UN__: ( INDEX , GROUP_NO_FIN ) incoherente avec doc U           
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",),
+                                 fr="Création de plusieurs groupes de noeuds" ),
+           MAILLE          =SIMP(statut='f',typ=ma,
+                                 fr="Création de plusieurs groupes de noeuds"),
+           GROUP_NO_INIT   =SIMP(statut='f',typ=grno,
+                                 fr="Création d un seul groupe de noeuds"),
+           PREFIXE         =SIMP(statut='f',typ='TXM' ),
+           INDEX           =SIMP(statut='f',typ='I',max='**'),
+           GROUP_NO_FIN    =SIMP(statut='f',typ=grno),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR VABHHTS J.TESELET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
+                   fr="Définition des paramètres décrivant le comportement d un matériau",
+                   docu="U4.43.01-f1",reentrant='n',
+       regles=(EXCLUS('ELAS','ELAS_FO','ELAS_FLUI','ELAS_ISTR','ELAS_ISTR_FO','ELAS_ORTH',
+                      'ELAS_ORTH_FO','ELAS_COQUE','ELAS_COQUE_FO',
+                      'SURF_ETAT_SATU','CAM_CLAY_THM','SURF_ETAT_NSAT'),
+               EXCLUS('THER','THER_FO','THER_ORTH','THER_NL'),
+               EXCLUS('ECRO_LINE','ECRO_LINE_FO'),
+               EXCLUS('TAHERI','TAHERI_FO'),
+               EXCLUS('ROUSSELIER','ROUSSELIER_FO'),
+               PRESENT_PRESENT('ROUSSELIER','TRACTION'),
+               PRESENT_PRESENT('ROUSSELIER_FO','TRACTION'),
+               EXCLUS('CIN1_CHAB','CIN1_CHAB_FO'),
+               EXCLUS('CIN2_CHAB','CIN2_CHAB_FO'),
+               EXCLUS('VISCOCHAB','VISCOCHAB_FO'),
+               EXCLUS('POLY_CFC','POLY_CFC_FO'),
+               EXCLUS('LEMAITRE','LEMAITRE_FO','ZIRC_CYRA2','ZIRC_EPRI'),
+               EXCLUS('OHNO','OHNO_FO'),
+               EXCLUS('LMARC','LMARC_FO'),
+               EXCLUS('VMIS_POUTRE','VMIS_POUTRE_FO'),
+               EXCLUS('VENDOCHAB','VENDOCHAB_FO'),
+               PRESENT_PRESENT('BPEL_BETON','ELAS'),
+               PRESENT_PRESENT('BPEL_ACIER','ELAS'),
+               EXCLUS('RCCM','RCCM_FO'),
+               EXCLUS('WEIBULL','WEIBULL_FO'),),
+#
+# comportement élastique
+#
+           ELAS            =FACT(statut='f',min=0,max=1,
+             E               =SIMP(statut='o',typ='R',val_min=0.E+0),
+             NU              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=0.5E+0),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+             AMOR_ALPHA      =SIMP(statut='f',typ='R'),
+             AMOR_BETA       =SIMP(statut='f',typ='R'),
+             AMOR_HYST       =SIMP(statut='f',typ='R'),
+           ),
+           ELAS_FO         =FACT(statut='f',min=0,max=1,
+             E               =SIMP(statut='o',typ=fonction),
+             NU              =SIMP(statut='o',typ=fonction),
+             RHO             =SIMP(statut='f',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.),
+             ALPHA           =SIMP(statut='f',typ=fonction),
+             AMOR_ALPHA      =SIMP(statut='f',typ=fonction),
+             AMOR_BETA       =SIMP(statut='f',typ=fonction),
+             AMOR_HYST       =SIMP(statut='f',typ=fonction),
+             K_DESSIC        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             B_ENDOGE        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="INST",into=("TEMP","INST",) ),
+             VERI_P3         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
+             VERI_P4         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
+           ),
+           ELAS_FLUI       =FACT(statut='f',min=0,max=1,
+             E               =SIMP(statut='o',typ='R'),
+             NU              =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='o',typ='R'),
+             PROF_RHO_F_INT  =SIMP(statut='o',typ=fonction),
+             PROF_RHO_F_EXT  =SIMP(statut='o',typ=fonction),
+             COEF_MASS_AJOU  =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="ABSC",into=("ABSC",) ),
+           ),
+           ELAS_ISTR       =FACT(statut='f',min=0,max=1,
+             E_L             =SIMP(statut='o',typ='R'),
+             E_N             =SIMP(statut='o',typ='R'),
+             NU_LT           =SIMP(statut='o',typ='R'),
+             NU_LN           =SIMP(statut='o',typ='R'),
+             G_LN            =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA_L         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             ALPHA_N         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           ELAS_ISTR_FO    =FACT(statut='f',min=0,max=1,
+             E_L             =SIMP(statut='o',typ=fonction),
+             E_N             =SIMP(statut='o',typ=fonction),
+             NU_LT           =SIMP(statut='o',typ=fonction),
+             NU_LN           =SIMP(statut='o',typ=fonction),
+             G_LN            =SIMP(statut='o',typ=fonction),
+             RHO             =SIMP(statut='f',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.),
+             ALPHA_L         =SIMP(statut='f',typ=fonction),
+             ALPHA_N         =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST")),
+           ),
+           ELAS_ORTH       =FACT(statut='f',min=0,max=1,
+             E_L             =SIMP(statut='o',typ='R'),
+             E_T             =SIMP(statut='o',typ='R'),
+             E_N             =SIMP(statut='f',typ='R'),
+             NU_LT           =SIMP(statut='o',typ='R'),
+             NU_LN           =SIMP(statut='f',typ='R'),
+             NU_TN           =SIMP(statut='f',typ='R'),
+             G_LT            =SIMP(statut='o',typ='R'),
+             G_LN            =SIMP(statut='f',typ='R'),
+             G_TN            =SIMP(statut='f',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA_L         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             ALPHA_T         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             ALPHA_N         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             XT              =SIMP(statut='f',typ='R',defaut= 1. ),
+             XC              =SIMP(statut='f',typ='R',defaut= 1. ),
+             YT              =SIMP(statut='f',typ='R',defaut= 1. ),
+             YC              =SIMP(statut='f',typ='R',defaut= 1. ),
+             S_LT            =SIMP(statut='f',typ='R',defaut= 1. ),
+           ),
+           ELAS_ORTH_FO    =FACT(statut='f',min=0,max=1,
+             E_L             =SIMP(statut='o',typ=fonction),
+             E_T             =SIMP(statut='o',typ=fonction),
+             E_N             =SIMP(statut='o',typ=fonction),
+             NU_LT           =SIMP(statut='o',typ=fonction),
+             NU_LN           =SIMP(statut='o',typ=fonction),
+             NU_TN           =SIMP(statut='o',typ=fonction),
+             G_LT            =SIMP(statut='o',typ=fonction),
+             G_LN            =SIMP(statut='o',typ=fonction),
+             G_TN            =SIMP(statut='o',typ=fonction),
+             RHO             =SIMP(statut='f',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1. ),
+             ALPHA_L         =SIMP(statut='f',typ=fonction),
+             ALPHA_T         =SIMP(statut='f',typ=fonction),
+             ALPHA_N         =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST",) ),
+           ),
+           ELAS_THM        =FACT(statut='f',min=0,max=1,
+             RHO_S           =SIMP(statut='o',typ='R'),
+             UN_SUR_KS       =SIMP(statut='o',typ='R'),
+             E               =SIMP(statut='f',typ='R'),
+             KB              =SIMP(statut='f',typ='R'),
+             D_KB_T          =SIMP(statut='f',typ='R'),
+             ALPHA_S         =SIMP(statut='f',typ='R'),
+             ALPHA_D         =SIMP(statut='f',typ='R'),
+           ),
+           SURF_ETAT_SATU  =FACT(statut='f',min=0,max=1,
+             E_CHAR          =SIMP(statut='o',typ='R'),
+             E_DECHAR        =SIMP(statut='o',typ='R'),
+             XN              =SIMP(statut='f',typ='R'),
+             RF              =SIMP(statut='f',typ='R'),
+             EV_KB           =SIMP(statut='f',typ='R'),
+             EV_XM           =SIMP(statut='f',typ='R'),
+             D_E_T           =SIMP(statut='f',typ='R'),
+             ALPHA0          =SIMP(statut='f',typ='R'),
+             ALPHA1          =SIMP(statut='f',typ='R'),
+             ALPHA2          =SIMP(statut='f',typ='R'),
+             ALPHA3          =SIMP(statut='f',typ='R'),
+             ALPHA_S         =SIMP(statut='f',typ='R'),
+             ANG_FRT         =SIMP(statut='o',typ='R'),
+             COHE            =SIMP(statut='o',typ='R'),
+             RESI_TRAC       =SIMP(statut='o',typ='R'),
+           ),
+           CAM_CLAY_THM    =FACT(statut='f',min=0,max=1,
+             NU              =SIMP(statut='f',typ='R'),
+             LAMBDA          =SIMP(statut='o',typ='R'),
+             KAPA            =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='f',typ='R'),
+             PRES_CRIT       =SIMP(statut='f',typ='R'),
+             GAMA            =SIMP(statut='o',typ='R'),
+             A0_PC           =SIMP(statut='o',typ='R'),
+             A1_PC           =SIMP(statut='f',typ='R'),
+             A2_PC           =SIMP(statut='f',typ='R'),
+             ALPHA0_PC       =SIMP(statut='f',typ='R'),
+             ALPHA1_PC       =SIMP(statut='f',typ='R'),
+             ALPHA2_PC       =SIMP(statut='f',typ='R'),
+             ALPHA3_PC       =SIMP(statut='f',typ='R'),
+             ALPHA_S         =SIMP(statut='f',typ='R'),
+                         ),
+           SURF_ETAT_NSAT  =FACT(statut='f',min=0,max=1,
+             E_CHAR          =SIMP(statut='o',typ='R'),
+             E_DECHAR        =SIMP(statut='o',typ='R'),
+             XN              =SIMP(statut='f',typ='R'),
+             RF              =SIMP(statut='f',typ='R'),
+             EV_KB           =SIMP(statut='f',typ='R'),
+             EV_XM           =SIMP(statut='f',typ='R'),
+             EV_A            =SIMP(statut='f',typ='R'),
+             EV_B            =SIMP(statut='f',typ='R'),
+             EV_CT           =SIMP(statut='f',typ='R'),
+             EV_SIGB         =SIMP(statut='f',typ='R'),
+             D_E_T           =SIMP(statut='f',typ='R'),
+             D_E_SUCC        =SIMP(statut='f',typ='R'),
+             ANG_FRT         =SIMP(statut='o',typ='R'),
+             COHE            =SIMP(statut='o',typ='R'),
+             D_COEH_SUCC     =SIMP(statut='f',typ='R'),
+             ANG_FRT_ULT     =SIMP(statut='f',typ='R'),
+             SUCC_ULTM       =SIMP(statut='f',typ='R'),
+             RESI_TRAC       =SIMP(statut='f',typ='R'),
+             A_SURF_SATU     =SIMP(statut='f',typ='R'),
+             B_SURF_SATU     =SIMP(statut='f',typ='R'),
+             C_SURF_SATU     =SIMP(statut='f',typ='R'),
+             D_SURF_SATU     =SIMP(statut='f',typ='R'),
+           ),
+           ELAS_COQUE      =FACT(statut='f',min=0,max=1,
+             regles=(EXCLUS('MEMB_L','M_LLLL',),
+                     PRESENT_PRESENT('MEMB_L','MEMB_LT', 'MEMB_T','MEMB_G_LT','FLEX_L','FLEX_LT',
+                                     'FLEX_T','FLEX_G_LT','CISA_L','CISA_T',),
+                     PRESENT_PRESENT('M_LLLL','M_LLTT','M_LLLT','M_TTTT','M_TTLT','M_LTLT','F_LLLL',
+                                     'F_LLTT','F_LLLT','F_TTTT','F_TTLT','F_LTLT','MF_LLLL',
+                                     'MF_LLTT','MF_LLLT','MF_TTTT','MF_TTLT','MF_LTLT','MC_LLLZ',
+                                     'MC_LLTZ','MC_TTLZ','MC_TTTZ','MC_LTLZ','MC_LTTZ','FC_LLLZ',
+                                     'FC_LLTZ','FC_TTLZ','FC_TTTZ','FC_LTLZ','FC_LTTZ','C_LZLZ',
+                                     'C_LZTZ','C_TZTZ'),),
+             MEMB_L          =SIMP(statut='f',typ='R'),
+             MEMB_LT         =SIMP(statut='f',typ='R'),
+             MEMB_T          =SIMP(statut='f',typ='R'),
+             MEMB_G_LT       =SIMP(statut='f',typ='R'),
+             FLEX_L          =SIMP(statut='f',typ='R'),
+             FLEX_LT         =SIMP(statut='f',typ='R'),
+             FLEX_T          =SIMP(statut='f',typ='R'),
+             FLEX_G_LT       =SIMP(statut='f',typ='R'),
+             CISA_L          =SIMP(statut='f',typ='R'),
+             CISA_T          =SIMP(statut='f',typ='R'),
+             M_LLLL          =SIMP(statut='f',typ='R'),
+             M_LLTT          =SIMP(statut='f',typ='R'),
+             M_LLLT          =SIMP(statut='f',typ='R'),
+             M_TTTT          =SIMP(statut='f',typ='R'),
+             M_TTLT          =SIMP(statut='f',typ='R'),
+             M_LTLT          =SIMP(statut='f',typ='R'),
+             F_LLLL          =SIMP(statut='f',typ='R'),
+             F_LLTT          =SIMP(statut='f',typ='R'),
+             F_LLLT          =SIMP(statut='f',typ='R'),
+             F_TTTT          =SIMP(statut='f',typ='R'),
+             F_TTLT          =SIMP(statut='f',typ='R'),
+             F_LTLT          =SIMP(statut='f',typ='R'),
+             MF_LLLL         =SIMP(statut='f',typ='R'),
+             MF_LLTT         =SIMP(statut='f',typ='R'),
+             MF_LLLT         =SIMP(statut='f',typ='R'),
+             MF_TTTT         =SIMP(statut='f',typ='R'),
+             MF_TTLT         =SIMP(statut='f',typ='R'),
+             MF_LTLT         =SIMP(statut='f',typ='R'),
+             MC_LLLZ         =SIMP(statut='f',typ='R'),
+             MC_LLTZ         =SIMP(statut='f',typ='R'),
+             MC_TTLZ         =SIMP(statut='f',typ='R'),
+             MC_TTTZ         =SIMP(statut='f',typ='R'),
+             MC_LTLZ         =SIMP(statut='f',typ='R'),
+             MC_LTTZ         =SIMP(statut='f',typ='R'),
+             FC_LLLZ         =SIMP(statut='f',typ='R'),
+             FC_LLTZ         =SIMP(statut='f',typ='R'),
+             FC_TTLZ         =SIMP(statut='f',typ='R'),
+             FC_TTTZ         =SIMP(statut='f',typ='R'),
+             FC_LTLZ         =SIMP(statut='f',typ='R'),
+             FC_LTTZ         =SIMP(statut='f',typ='R'),
+             C_LZLZ          =SIMP(statut='f',typ='R'),
+             C_LZTZ          =SIMP(statut='f',typ='R'),
+             C_TZTZ          =SIMP(statut='f',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+           ),
+           ELAS_COQUE_FO   =FACT(statut='f',min=0,max=1,
+             regles=(EXCLUS('MEMB_L','M_LLLL',),
+                     PRESENT_PRESENT('MEMB_L','MEMB_LT','MEMB_T','MEMB_G_LT','FLEX_L','FLEX_LT',
+                                     'FLEX_T','FLEX_G_LT','CISA_L','CISA_T',),
+                     PRESENT_PRESENT('M_LLLL','M_LLTT','M_LLLT','M_TTTT','M_TTLT','M_LTLT','F_LLLL',
+                                     'F_LLTT','F_LLLT','F_TTTT','F_TTLT','F_LTLT','MF_LLLL','MF_LLTT',
+                                     'MF_LLLT','MF_TTTT','MF_TTLT','MF_LTLT','MC_LLLZ','MC_LLTZ',
+                                     'MC_TTLZ','MC_TTTZ','MC_LTLZ','MC_LTTZ','FC_LLLZ','FC_LLTZ',
+                                     'FC_TTLZ','FC_TTTZ','FC_LTLZ','FC_LTTZ','C_LZLZ','C_LZTZ','C_TZTZ'),),
+             MEMB_L          =SIMP(statut='f',typ=fonction),
+             MEMB_LT         =SIMP(statut='f',typ=fonction),
+             MEMB_T          =SIMP(statut='f',typ=fonction),
+             MEMB_G_LT       =SIMP(statut='f',typ=fonction),
+             FLEX_L          =SIMP(statut='f',typ=fonction),
+             FLEX_LT         =SIMP(statut='f',typ=fonction),
+             FLEX_T          =SIMP(statut='f',typ=fonction),
+             FLEX_G_LT       =SIMP(statut='f',typ=fonction),
+             CISA_L          =SIMP(statut='f',typ=fonction),
+             CISA_T          =SIMP(statut='f',typ=fonction),
+             M_LLLL          =SIMP(statut='f',typ=fonction),
+             M_LLTT          =SIMP(statut='f',typ=fonction),
+             M_LLLT          =SIMP(statut='f',typ=fonction),
+             M_TTTT          =SIMP(statut='f',typ=fonction),
+             M_TTLT          =SIMP(statut='f',typ=fonction),
+             M_LTLT          =SIMP(statut='f',typ=fonction),
+             F_LLLL          =SIMP(statut='f',typ=fonction),
+             F_LLTT          =SIMP(statut='f',typ=fonction),
+             F_LLLT          =SIMP(statut='f',typ=fonction),
+             F_TTTT          =SIMP(statut='f',typ=fonction),
+             F_TTLT          =SIMP(statut='f',typ=fonction),
+             F_LTLT          =SIMP(statut='f',typ=fonction),
+             MF_LLLL         =SIMP(statut='f',typ=fonction),
+             MF_LLTT         =SIMP(statut='f',typ=fonction),
+             MF_LLLT         =SIMP(statut='f',typ=fonction),
+             MF_TTTT         =SIMP(statut='f',typ=fonction),
+             MF_TTLT         =SIMP(statut='f',typ=fonction),
+             MF_LTLT         =SIMP(statut='f',typ=fonction),
+             MC_LLLZ         =SIMP(statut='f',typ=fonction),
+             MC_LLTZ         =SIMP(statut='f',typ=fonction),
+             MC_TTLZ         =SIMP(statut='f',typ=fonction),
+             MC_TTTZ         =SIMP(statut='f',typ=fonction),
+             MC_LTLZ         =SIMP(statut='f',typ=fonction),
+             MC_LTTZ         =SIMP(statut='f',typ=fonction),
+             FC_LLLZ         =SIMP(statut='f',typ=fonction),
+             FC_LLTZ         =SIMP(statut='f',typ=fonction),
+             FC_TTLZ         =SIMP(statut='f',typ=fonction),
+             FC_TTTZ         =SIMP(statut='f',typ=fonction),
+             FC_LTLZ         =SIMP(statut='f',typ=fonction),
+             FC_LTTZ         =SIMP(statut='f',typ=fonction),
+             C_LZLZ          =SIMP(statut='f',typ=fonction),
+             C_LZTZ          =SIMP(statut='f',typ=fonction),
+             C_TZTZ          =SIMP(statut='f',typ=fonction),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST") ),
+           ),
+           APPUI_ELAS      =FACT(statut='f',min=0,max=1,
+             E_N             =SIMP(statut='o',typ='R'),
+             E_TAN           =SIMP(statut='f',typ='R',defaut= 0.E+0),
+           ),
+           CABLE           =FACT(statut='f',min=0,max=1,
+             E               =SIMP(statut='o',typ='R'),
+             EC_SUR_E        =SIMP(statut='f',typ='R',defaut= 1.E-4 ),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+             AMOR_ALPHA      =SIMP(statut='f',typ='R'),
+             AMOR_BETA       =SIMP(statut='f',typ='R'),
+           ),
+#
+# comportement mécanique non linéaire
+#
+           TRACTION        =FACT(statut='f',min=0,max=1,
+             SIGM            =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P3         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
+             VERI_P4         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
+           ),
+           ECRO_LINE       =FACT(statut='f',min=0,max=1,
+             D_SIGM_EPSI     =SIMP(statut='o',typ='R'),
+             SY              =SIMP(statut='o',typ='R'),
+           ),
+           ECRO_LINE_FO    =FACT(statut='f',min=0,max=1,
+             D_SIGM_EPSI     =SIMP(statut='o',typ=fonction),
+             SY              =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           PRAGER          =FACT(statut='f',min=0,max=1,
+             C               =SIMP(statut='o',typ='R'),
+           ),
+           PRAGER_FO       =FACT(statut='f',min=0,max=1,
+             C               =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           ECRO_FLEJOU     =FACT(statut='f',min=0,max=1,
+             EP              =SIMP(statut='o',typ='R'),
+             SY              =SIMP(statut='o',typ='R'),
+             SU              =SIMP(statut='o',typ='R'),
+             PUISS           =SIMP(statut='o',typ='R'),
+           ),
+           TAHERI          =FACT(statut='f',min=0,max=1,
+             R_0             =SIMP(statut='o',typ='R'),
+             ALPHA           =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             A               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             C1              =SIMP(statut='o',typ='R'),
+             C_INF           =SIMP(statut='o',typ='R'),
+             S               =SIMP(statut='o',typ='R'),
+           ),
+           TAHERI_FO       =FACT(statut='f',min=0,max=1,
+             R_0             =SIMP(statut='o',typ=fonction),
+             ALPHA           =SIMP(statut='o',typ=fonction),
+             M               =SIMP(statut='o',typ=fonction),
+             A               =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             C1              =SIMP(statut='o',typ=fonction),
+             C_INF           =SIMP(statut='o',typ=fonction),
+             S               =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           ROUSSELIER      =FACT(statut='f',min=0,max=1,
+             D               =SIMP(statut='o',typ='R'),
+             SIGM_1          =SIMP(statut='o',typ='R'),
+             PORO_INIT       =SIMP(statut='o',typ='R'),
+             PORO_CRIT       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_ACCE       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_LIMI       =SIMP(statut='f',typ='R',defaut= 0.999 ),
+             D_SIGM_EPSI_NORM=SIMP(statut='f',typ='R',defaut= 1. ),
+             AN              =SIMP(statut='f',typ='R',defaut= 0. ),
+           ),
+           ROUSSELIER_FO   =FACT(statut='f',min=0,max=1,
+             D               =SIMP(statut='o',typ=fonction),
+             SIGM_1          =SIMP(statut='o',typ=fonction),
+             PORO_INIT       =SIMP(statut='o',typ=fonction),
+             PORO_CRIT       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_ACCE       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_LIMI       =SIMP(statut='f',typ='R',defaut= 0.999 ),
+             D_SIGM_EPSI_NORM=SIMP(statut='f',typ='R',defaut= 1. ),
+             AN              =SIMP(statut='f',typ='R',defaut= 0. ),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           ROUSS_VISC      =FACT(statut='f',min=0,max=1,
+             SIGM_0          =SIMP(statut='o',typ='R'),
+             EPSI_0          =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+           ),
+           CHABOCHE        =FACT(statut='f',min=0,max=1,
+             R_I             =SIMP(statut='o',typ='R'),
+             R_0             =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             W               =SIMP(statut='o',typ='R'),
+             A1              =SIMP(statut='o',typ='R'),
+             A2              =SIMP(statut='o',typ='R'),
+             C1              =SIMP(statut='o',typ='R'),
+             C2              =SIMP(statut='o',typ='R'),
+           ),
+           CIN1_CHAB  =FACT(statut='f',min=0,max=1,
+             R_0             =SIMP(statut='o',typ='R'),
+             R_I             =SIMP(statut='f',typ='R'),
+             B               =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+             C_I             =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+             W               =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+             G_0             =SIMP(statut='o',typ='R'),
+             A_I             =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           ),
+           CIN1_CHAB_FO  =FACT(statut='f',min=0,max=1,
+             R_0             =SIMP(statut='o',typ=fonction),
+             R_I             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             C_I             =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             W               =SIMP(statut='o',typ=fonction),
+             G_0             =SIMP(statut='o',typ=fonction),
+             A_I             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           CIN2_CHAB  =FACT(statut='f',min=0,max=1,
+             R_0             =SIMP(statut='o',typ='R'),
+             R_I             =SIMP(statut='f',typ='R'),
+             B               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             C1_I            =SIMP(statut='o',typ='R'),
+             C2_I            =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='f',typ='R',defaut= 1.),
+             W               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             G1_0            =SIMP(statut='o',typ='R'),
+             G2_0            =SIMP(statut='o',typ='R'),
+             A_I             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+           ),
+           CIN2_CHAB_FO  =FACT(statut='f',min=0,max=1,
+             R_0             =SIMP(statut='o',typ=fonction),
+             R_I             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             C1_I            =SIMP(statut='o',typ=fonction),
+             C2_I            =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             W               =SIMP(statut='o',typ=fonction),
+             G1_0            =SIMP(statut='o',typ=fonction),
+             G2_0            =SIMP(statut='o',typ=fonction),
+             A_I             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           VISCOCHAB       =FACT(statut='f',min=0,max=1,
+             K_0             =SIMP(statut='o',typ='R'),
+             A_K             =SIMP(statut='o',typ='R'),
+             A_R             =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             ALP             =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             M_R             =SIMP(statut='o',typ='R'),
+             G_R             =SIMP(statut='o',typ='R'),
+             MU              =SIMP(statut='o',typ='R'),
+             Q_M             =SIMP(statut='o',typ='R'),
+             Q_0             =SIMP(statut='o',typ='R'),
+             QR_0            =SIMP(statut='o',typ='R'),
+             ETA             =SIMP(statut='o',typ='R'),
+             C1              =SIMP(statut='o',typ='R'),
+             M_1             =SIMP(statut='o',typ='R'),
+             D1              =SIMP(statut='o',typ='R'),
+             G_X1            =SIMP(statut='o',typ='R'),
+             G1_0            =SIMP(statut='o',typ='R'),
+             C2              =SIMP(statut='o',typ='R'),
+             M_2             =SIMP(statut='o',typ='R'),
+             D2              =SIMP(statut='o',typ='R'),
+             G_X2            =SIMP(statut='o',typ='R'),
+             G2_0            =SIMP(statut='o',typ='R'),
+             A_I             =SIMP(statut='o',typ='R'),
+           ),
+           VISCOCHAB_FO    =FACT(statut='f',min=0,max=1,
+             K_0             =SIMP(statut='o',typ=fonction),
+             A_K             =SIMP(statut='o',typ=fonction),
+             A_R             =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             N               =SIMP(statut='o',typ=fonction),
+             ALP             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             M_R             =SIMP(statut='o',typ=fonction),
+             G_R             =SIMP(statut='o',typ=fonction),
+             MU              =SIMP(statut='o',typ=fonction),
+             Q_M             =SIMP(statut='o',typ=fonction),
+             Q_0             =SIMP(statut='o',typ=fonction),
+             QR_0            =SIMP(statut='o',typ=fonction),
+             ETA             =SIMP(statut='o',typ=fonction),
+             C1              =SIMP(statut='o',typ=fonction),
+             M_1             =SIMP(statut='o',typ=fonction),
+             D1              =SIMP(statut='o',typ=fonction),
+             G_X1            =SIMP(statut='o',typ=fonction),
+             G1_0            =SIMP(statut='o',typ=fonction),
+             C2              =SIMP(statut='o',typ=fonction),
+             M_2             =SIMP(statut='o',typ=fonction),
+             D2              =SIMP(statut='o',typ=fonction),
+             G_X2            =SIMP(statut='o',typ=fonction),
+             G2_0            =SIMP(statut='o',typ=fonction),
+             A_I             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           POLY_CFC        =FACT(statut='f',min=0,max=1,
+             TEXTURE         =SIMP(statut='o',typ=(tabl_texture) ),
+             DL              =SIMP(statut='f',typ='R'),
+             DA              =SIMP(statut='f',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             TAU_0           =SIMP(statut='o',typ='R'),
+             Q1              =SIMP(statut='o',typ='R'),
+             B1              =SIMP(statut='o',typ='R'),
+             HL              =SIMP(statut='o',typ='R'),
+             Q2              =SIMP(statut='o',typ='R'),
+             B2              =SIMP(statut='o',typ='R'),
+             C1              =SIMP(statut='o',typ='R'),
+             D1              =SIMP(statut='o',typ='R'),
+             C2              =SIMP(statut='o',typ='R'),
+           ),
+           POLY_CFC_FO     =FACT(statut='f',min=0,max=1,
+             TEXTURE         =SIMP(statut='o',typ=(tabl_texture) ),
+             DL              =SIMP(statut='o',typ=fonction),
+             DA              =SIMP(statut='o',typ=fonction),
+             N               =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             TAU_0           =SIMP(statut='o',typ=fonction),
+             Q1              =SIMP(statut='o',typ=fonction),
+             B1              =SIMP(statut='o',typ=fonction),
+             HL              =SIMP(statut='o',typ=fonction),
+             Q2              =SIMP(statut='o',typ=fonction),
+             B2              =SIMP(statut='o',typ=fonction),
+             C1              =SIMP(statut='o',typ=fonction),
+             D1              =SIMP(statut='o',typ=fonction),
+             C2              =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           NORTON_HOFF     =FACT(statut='f',min=0,max=1,
+             SY              =SIMP(statut='o',typ='R'),
+           ),
+           LEMAITRE        =FACT(statut='f',min=0,max=1,
+             N               =SIMP(statut='o',typ='R'),
+             UN_SUR_K        =SIMP(statut='o',typ='R'),
+             UN_SUR_M        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           ZIRC_CYRA2      =FACT(statut='f',min=0,max=1,
+             EPSI_FAB        =SIMP(statut='o',typ=fonction),
+             TEMP_RECUIT     =SIMP(statut='o',typ=fonction),
+             FLUX_PHI        =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
+           ),
+           ZIRC_EPRI       =FACT(statut='f',min=0,max=1,
+             FLUX_PHI        =SIMP(statut='o',typ='R'),
+             R_P             =SIMP(statut='o',typ='R'),
+             THETA_MAX       =SIMP(statut='o',typ='R'),
+           ),
+           LEMAITRE_FO     =FACT(statut='f',min=0,max=1,
+             N               =SIMP(statut='o',typ=fonction),
+             UN_SUR_K        =SIMP(statut='o',typ=fonction),
+             UN_SUR_M        =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           GRAN_IRRA       =FACT(statut='f',min=0,max=1,
+             A               =SIMP(statut='f',typ='R',defaut= 0.E+0),
+             B               =SIMP(statut='f',typ='R',defaut= 0.E+0),
+             S               =SIMP(statut='f',typ='R',defaut= 0.E+0),
+           ),
+           FLU_IRRA       =FACT(statut='f',min=0,max=1,
+             QSR_K           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             BETA            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PHI_ZERO        =SIMP(statut='f',typ='R',defaut= 1.E+20),
+             L               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           OHNO            =FACT(statut='f',min=0,max=1,
+             R_I             =SIMP(statut='o',typ='R'),
+             R_0             =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             PHI             =SIMP(statut='o',typ='R'),
+             A1              =SIMP(statut='o',typ='R'),
+             A2              =SIMP(statut='o',typ='R'),
+             A3              =SIMP(statut='o',typ='R'),
+             A4              =SIMP(statut='o',typ='R'),
+             A5              =SIMP(statut='o',typ='R'),
+             GAMMA1          =SIMP(statut='o',typ='R'),
+             GAMMA2          =SIMP(statut='o',typ='R'),
+             GAMMA3          =SIMP(statut='o',typ='R'),
+             GAMMA4          =SIMP(statut='o',typ='R'),
+             GAMMA5          =SIMP(statut='o',typ='R'),
+             M1              =SIMP(statut='o',typ='R'),
+             M2              =SIMP(statut='o',typ='R'),
+             M3              =SIMP(statut='o',typ='R'),
+             M4              =SIMP(statut='o',typ='R'),
+             M5              =SIMP(statut='o',typ='R'),
+                           ),
+           OHNO_FO         =FACT(statut='f',min=0,max=1,
+             R_I             =SIMP(statut='o',typ=fonction),
+             R_0             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             PHI             =SIMP(statut='o',typ=fonction),
+             A1              =SIMP(statut='o',typ=fonction),
+             A2              =SIMP(statut='o',typ=fonction),
+             A3              =SIMP(statut='o',typ=fonction),
+             A4              =SIMP(statut='o',typ=fonction),
+             A5              =SIMP(statut='o',typ=fonction),
+             GAMMA1          =SIMP(statut='o',typ=fonction),
+             GAMMA2          =SIMP(statut='o',typ=fonction),
+             GAMMA3          =SIMP(statut='o',typ=fonction),
+             GAMMA4          =SIMP(statut='o',typ=fonction),
+             GAMMA5          =SIMP(statut='o',typ=fonction),
+             M1              =SIMP(statut='o',typ=fonction),
+             M2              =SIMP(statut='o',typ=fonction),
+             M3              =SIMP(statut='o',typ=fonction),
+             M4              =SIMP(statut='o',typ=fonction),
+             M5              =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           LMARC           =FACT(statut='f',min=0,max=1,
+             DE_0            =SIMP(statut='o',typ='R'),
+             R_0             =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             Y_I             =SIMP(statut='o',typ='R'),
+             Y_0             =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             A_0             =SIMP(statut='o',typ='R'),
+             RM              =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             P               =SIMP(statut='o',typ='R'),
+             P1              =SIMP(statut='o',typ='R'),
+             P2              =SIMP(statut='o',typ='R'),
+             M11             =SIMP(statut='o',typ='R'),
+             M22             =SIMP(statut='o',typ='R'),
+             M33             =SIMP(statut='o',typ='R'),
+             M66             =SIMP(statut='o',typ='R'),
+             N11             =SIMP(statut='o',typ='R'),
+             N22             =SIMP(statut='o',typ='R'),
+             N33             =SIMP(statut='o',typ='R'),
+             N66             =SIMP(statut='o',typ='R'),
+             Q11             =SIMP(statut='o',typ='R'),
+             Q22             =SIMP(statut='o',typ='R'),
+             Q33             =SIMP(statut='o',typ='R'),
+             Q66             =SIMP(statut='o',typ='R'),
+             R11             =SIMP(statut='o',typ='R'),
+             R22             =SIMP(statut='o',typ='R'),
+             R33             =SIMP(statut='o',typ='R'),
+             R66             =SIMP(statut='o',typ='R'),
+           ),
+           LMARC_FO        =FACT(statut='f',min=0,max=1,
+             DE_0            =SIMP(statut='o',typ=fonction),
+             R_0             =SIMP(statut='o',typ=fonction),
+             N               =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             Y_I             =SIMP(statut='o',typ=fonction),
+             Y_0             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             A_0             =SIMP(statut='o',typ=fonction),
+             RM              =SIMP(statut='o',typ=fonction),
+             M               =SIMP(statut='o',typ=fonction),
+             P               =SIMP(statut='o',typ=fonction),
+             P1              =SIMP(statut='o',typ=fonction),
+             P2              =SIMP(statut='o',typ=fonction),
+             M11             =SIMP(statut='o',typ=fonction),
+             M22             =SIMP(statut='o',typ=fonction),
+             M33             =SIMP(statut='o',typ=fonction),
+             M66             =SIMP(statut='o',typ=fonction),
+             N11             =SIMP(statut='o',typ=fonction),
+             N22             =SIMP(statut='o',typ=fonction),
+             N33             =SIMP(statut='o',typ=fonction),
+             N66             =SIMP(statut='o',typ=fonction),
+             Q11             =SIMP(statut='o',typ=fonction),
+             Q22             =SIMP(statut='o',typ=fonction),
+             Q33             =SIMP(statut='o',typ=fonction),
+             Q66             =SIMP(statut='o',typ=fonction),
+             R11             =SIMP(statut='o',typ=fonction),
+             R22             =SIMP(statut='o',typ=fonction),
+             R33             =SIMP(statut='o',typ=fonction),
+             R66             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           VMIS_POUTRE     =FACT(statut='f',min=0,max=1,
+             NP              =SIMP(statut='o',typ='R'),
+             MEY             =SIMP(statut='o',typ='R'),
+             MPY             =SIMP(statut='o',typ='R'),
+             CAY             =SIMP(statut='o',typ='R'),
+             CBY             =SIMP(statut='o',typ='R'),
+             MEZ             =SIMP(statut='o',typ='R'),
+             MPZ             =SIMP(statut='o',typ='R'),
+             CAZ             =SIMP(statut='o',typ='R'),
+             CBZ             =SIMP(statut='o',typ='R'),
+             MPX             =SIMP(statut='o',typ='R'),
+           ),
+           VMIS_POUTRE_FO  =FACT(statut='f',min=0,max=1,
+             NP              =SIMP(statut='o',typ=fonction),
+             MEY             =SIMP(statut='o',typ=fonction),
+             MPY             =SIMP(statut='o',typ=fonction),
+             CAY             =SIMP(statut='o',typ=fonction),
+             CBY             =SIMP(statut='o',typ=fonction),
+             MEZ             =SIMP(statut='o',typ=fonction),
+             MPZ             =SIMP(statut='o',typ=fonction),
+             CAZ             =SIMP(statut='o',typ=fonction),
+             CBZ             =SIMP(statut='o',typ=fonction),
+             MPX             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           ARME            =FACT(statut='f',min=0,max=1,
+             KYE             =SIMP(statut='o',typ='R'),
+             DLE             =SIMP(statut='o',typ='R'),
+             KYP             =SIMP(statut='o',typ='R'),
+             DLP             =SIMP(statut='o',typ='R'),
+             KYG             =SIMP(statut='o',typ='R'),
+           ),
+           ASSE_CORN       =FACT(statut='f',min=0,max=1,
+             NU_1            =SIMP(statut='o',typ='R'),
+             MU_1            =SIMP(statut='o',typ='R'),
+             DXU_1           =SIMP(statut='o',typ='R'),
+             DRYU_1          =SIMP(statut='o',typ='R'),
+             C_1             =SIMP(statut='o',typ='R'),
+             NU_2            =SIMP(statut='o',typ='R'),
+             MU_2            =SIMP(statut='o',typ='R'),
+             DXU_2           =SIMP(statut='o',typ='R'),
+             DRYU_2          =SIMP(statut='o',typ='R'),
+             C_2             =SIMP(statut='o',typ='R'),
+             KY              =SIMP(statut='o',typ='R'),
+             KZ              =SIMP(statut='o',typ='R'),
+             KRX             =SIMP(statut='o',typ='R'),
+             KRZ             =SIMP(statut='o',typ='R'),
+           ),
+           DIS_CONTACT     =FACT(statut='f',min=0,max=1,
+             RIGI_NOR        =SIMP(statut='f',typ='R' ),
+             DIST_1          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             DIST_2          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             RIGI_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             AMOR_NOR        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             AMOR_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             JEU             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             KT_ULTM         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             EFFO_N_INIT     =SIMP(statut='f',typ='R'),
+             regles=(EXCLUS('RIGI_N_FO','RIGI_N_IRRA',),),
+             RIGI_N_IRRA     =SIMP(statut='f',typ=fonction),
+             RIGI_N_FO       =SIMP(statut='f',typ=fonction),
+             RELA_MZ         =SIMP(statut='f',typ=fonction),
+             C_PRAGER_MZ     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="DRZ",into=("DRZ",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
+           ),
+           NADAI_B         =FACT(statut='f',min=0,max=1,
+             F_C             =SIMP(statut='o',typ='R'),
+             F_T             =SIMP(statut='o',typ='R'),
+             CRIT_E_C        =SIMP(statut='o',typ='R'),
+             EPSP_P_C        =SIMP(statut='o',typ='R'),
+             EPSP_R_C        =SIMP(statut='o',typ='R'),
+             EPSI_R_T        =SIMP(statut='o',typ='R'),
+             FAC_T_C         =SIMP(statut='o',typ='R'),
+           ),
+           BETON_DOUBLE_DP =FACT(statut='f',min=0,max=1,
+             F_C             =SIMP(statut='o',typ=fonction),
+             F_T             =SIMP(statut='o',typ=fonction),
+             COEF_BIAX       =SIMP(statut='o',typ=fonction),
+             ENER_COMP_RUPT  =SIMP(statut='o',typ=fonction),
+             ENER_TRAC_RUPT  =SIMP(statut='o',typ=fonction),
+             COEF_ELAS_COMP  =SIMP(statut='o',typ='R'),
+             LONG_CARA       =SIMP(statut='f',typ='R'),
+             ECRO_COMP_P_PIC =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","PARABOLE") ),
+             ECRO_TRAC_P_PIC =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","EXPONENT") ),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="INST",into=("TEMP","INST",) ),
+             VERI_P3         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
+             VERI_P4         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
+           ),
+           LABORD_1D=FACT(statut='f',min=0 ,max=1,
+             Y01             =SIMP(statut='o',typ='R'),
+             Y02             =SIMP(statut='o',typ='R'),
+             A1              =SIMP(statut='o',typ='R'),
+             A2              =SIMP(statut='o',typ='R'),
+             B1              =SIMP(statut='o',typ='R'),
+             B2              =SIMP(statut='o',typ='R'),
+             BETA1           =SIMP(statut='o',typ='R'),
+             BETA2           =SIMP(statut='o',typ='R'),
+             SIGF            =SIMP(statut='o',typ='R'),
+           ),
+
+           VENDOCHAB       =FACT(statut='f',min=0,max=1,
+             S_VP            =SIMP(statut='o',typ='R'),
+             SEDVP1          =SIMP(statut='o',typ='R'),
+             SEDVP2          =SIMP(statut='o',typ='R'),
+             N_VP            =SIMP(statut='o',typ='R'),
+             M_VP            =SIMP(statut='o',typ='R'),
+             K_VP            =SIMP(statut='o',typ='R'),
+             R_D             =SIMP(statut='o',typ='R'),
+             A_D             =SIMP(statut='o',typ='R'),
+             K_D             =SIMP(statut='o',typ='R'),
+           ),
+           VENDOCHAB_FO    =FACT(statut='f',min=0,max=1,
+             S_VP            =SIMP(statut='o',typ=fonction),
+             SEDVP1          =SIMP(statut='o',typ=fonction),
+             SEDVP2          =SIMP(statut='o',typ=fonction),
+             N_VP            =SIMP(statut='o',typ=fonction),
+             M_VP            =SIMP(statut='o',typ=fonction),
+             K_VP            =SIMP(statut='o',typ=fonction),
+             R_D             =SIMP(statut='o',typ=fonction),
+             A_D             =SIMP(statut='o',typ=fonction),
+             K_D             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="X",into=("X",) ),
+           ),
+           PINTO_MENEGOTTO =FACT(statut='f',min=0,max=1,
+             SY              =SIMP(statut='o',typ='R'),
+             EPSI_ULTM       =SIMP(statut='o',typ='R'),
+             SIGM_ULTM       =SIMP(statut='o',typ='R'),
+             ELAN            =SIMP(statut='f',typ='R',defaut= 4. ),
+             EPSP_HARD       =SIMP(statut='o',typ='R'),
+             R_PM            =SIMP(statut='f',typ='R',defaut= 20. ),
+             EP_SUR_E        =SIMP(statut='f',typ='R'),
+             A1_PM           =SIMP(statut='f',typ='R',defaut= 18.5 ),
+             A2_PM           =SIMP(statut='f',typ='R',defaut= 0.15 ),
+             A6_PM           =SIMP(statut='f',typ='R',defaut= 620. ),
+             C_PM            =SIMP(statut='f',typ='R',defaut= 0.5 ),
+             A_PM            =SIMP(statut='f',typ='R',defaut= 6.0E-3 ),
+           ),
+           BPEL_BETON      =FACT(statut='f',min=0,max=1,
+             PERT_FLUA       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PERT_RETR       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           BPEL_ACIER      =FACT(statut='f',min=0,max=1,
+             RELAX_1000      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             MU0_RELAX       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             SY              =SIMP(statut='o',typ='R'),
+             FROT_COURB      =SIMP(statut='o',typ='R'),
+             FROT_LINE       =SIMP(statut='o',typ='R'),
+           ),
+           CJS             =FACT(statut='f',min=0,max=1,
+             regles=(ENSEMBLE('B_CJS','C_CJS','MU_CJS','PCO',),
+                     ENSEMBLE('N_CJS','KP','RC',),
+                     PRESENT_ABSENT('A_CJS','B_CJS',),
+                     PRESENT_PRESENT('A_CJS','N_CJS',),
+                     PRESENT_PRESENT('B_CJS','N_CJS', ),),
+             BETA_CJS        =SIMP(statut='o',typ='R'),
+             RM              =SIMP(statut='o',typ='R'),
+             N_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             KP              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             RC              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             A_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             B_CJS           =SIMP(statut='f',typ='R',defaut= 1.0E+25 ),
+             C_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             GAMMA_CJS       =SIMP(statut='o',typ='R'),
+             MU_CJS          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PCO             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PA              =SIMP(statut='o',typ='R'),
+             Q_INIT          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             R_INIT          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           ECRO_ASYM_LINE  =FACT(statut='f',min=0,max=1,
+             DC_SIGM_EPSI    =SIMP(statut='o',typ='R'),
+             SY_C            =SIMP(statut='o',typ='R'),
+             DT_SIGM_EPSI    =SIMP(statut='o',typ='R'),
+             SY_T            =SIMP(statut='o',typ='R'),
+           ),
+           GRANGER_FP      =FACT(statut='f',min=0,max=1,
+             J1              =SIMP(statut='f',typ='R'),
+             J2              =SIMP(statut='f',typ='R'),
+             J3              =SIMP(statut='f',typ='R'),
+             J4              =SIMP(statut='f',typ='R'),
+             J5              =SIMP(statut='f',typ='R'),
+             J6              =SIMP(statut='f',typ='R'),
+             J7              =SIMP(statut='f',typ='R'),
+             J8              =SIMP(statut='f',typ='R'),
+             TAUX_1          =SIMP(statut='f',typ='R'),
+             TAUX_2          =SIMP(statut='f',typ='R'),
+             TAUX_3          =SIMP(statut='f',typ='R'),
+             TAUX_4          =SIMP(statut='f',typ='R'),
+             TAUX_5          =SIMP(statut='f',typ='R'),
+             TAUX_6          =SIMP(statut='f',typ='R'),
+             TAUX_7          =SIMP(statut='f',typ='R'),
+             TAUX_8          =SIMP(statut='f',typ='R'),
+             FONC_DESORP     =SIMP(statut='f',typ=fonction),
+             QSR_K           =SIMP(statut='f',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
+           ),
+           V_GRANGER_FP    =FACT(statut='f',min=0,max=1,
+             QSR_VEIL        =SIMP(statut='f',typ='R'),
+             FONC_V          =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
+           ),
+#
+# comportement thermique
+#
+           THER_NL         =FACT(statut='f',min=0,max=1,
+             regles=(UN_PARMI('BETA','RHO_CP', ),),
+             LAMBDA          =SIMP(statut='o',typ=fonction),
+             BETA            =SIMP(statut='f',typ=fonction),
+             RHO_CP          =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           THER_HYDR       =FACT(statut='f',min=0,max=1,
+             LAMBDA          =SIMP(statut='o',typ=fonction),
+             BETA            =SIMP(statut='f',typ=fonction),
+             AFFINITE        =SIMP(statut='o',typ=fonction),
+             CHALHYDR        =SIMP(statut='o',typ='R'),
+             QSR_K           =SIMP(statut='o',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("HYDR",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
+           ),
+           THER            =FACT(statut='f',min=0,max=1,
+             LAMBDA          =SIMP(statut='o',typ='R'),
+             RHO_CP          =SIMP(statut='f',typ='R'),
+           ),
+           THER_FO         =FACT(statut='f',min=0,max=1,
+             LAMBDA          =SIMP(statut='o',typ=fonction),
+             RHO_CP          =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
+           ),
+           THER_ORTH       =FACT(statut='f',min=0,max=1,
+             LAMBDA_L        =SIMP(statut='o',typ='R'),
+             LAMBDA_T        =SIMP(statut='o',typ='R'),
+             LAMBDA_N        =SIMP(statut='f',typ='R'),
+             RHO_CP          =SIMP(statut='f',typ='R'),
+           ),
+           THER_COQUE      =FACT(statut='f',min=0,max=1,
+             COND_LMM        =SIMP(statut='o',typ='R'),
+             COND_TMM        =SIMP(statut='o',typ='R'),
+             COND_LMP        =SIMP(statut='o',typ='R'),
+             COND_TMP        =SIMP(statut='o',typ='R'),
+             COND_LPP        =SIMP(statut='o',typ='R'),
+             COND_TPP        =SIMP(statut='o',typ='R'),
+             COND_LSI        =SIMP(statut='o',typ='R'),
+             COND_TSI        =SIMP(statut='o',typ='R'),
+             COND_NMM        =SIMP(statut='o',typ='R'),
+             COND_NMP        =SIMP(statut='o',typ='R'),
+             COND_NPP        =SIMP(statut='o',typ='R'),
+             COND_NSI        =SIMP(statut='o',typ='R'),
+             CMAS_MM         =SIMP(statut='f',typ='R'),
+             CMAS_MP         =SIMP(statut='f',typ='R'),
+             CMAS_PP         =SIMP(statut='f',typ='R'),
+             CMAS_SI         =SIMP(statut='f',typ='R'),
+           ),
+           THER_COQUE_FO   =FACT(statut='f',min=0,max=1,
+             COND_LMM        =SIMP(statut='o',typ=fonction),
+             COND_TMM        =SIMP(statut='o',typ=fonction),
+             COND_LMP        =SIMP(statut='o',typ=fonction),
+             COND_TMP        =SIMP(statut='o',typ=fonction),
+             COND_LPP        =SIMP(statut='o',typ=fonction),
+             COND_TPP        =SIMP(statut='o',typ=fonction),
+             COND_LSI        =SIMP(statut='o',typ=fonction),
+             COND_TSI        =SIMP(statut='o',typ=fonction),
+             COND_NMM        =SIMP(statut='o',typ=fonction),
+             COND_NMP        =SIMP(statut='o',typ=fonction),
+             COND_NPP        =SIMP(statut='o',typ=fonction),
+             COND_NSI        =SIMP(statut='o',typ=fonction),
+             CMAS_MM         =SIMP(statut='f',typ=fonction),
+             CMAS_MP         =SIMP(statut='f',typ=fonction),
+             CMAS_PP         =SIMP(statut='f',typ=fonction),
+             CMAS_SI         =SIMP(statut='f',typ=fonction),
+           ),
+           SECH_GRANGER    =FACT(statut='f',min=0,max=1,
+             A               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             QSR_K           =SIMP(statut='o',typ='R'),
+             TEMP_0_C        =SIMP(statut='o',typ='R'),
+           ),
+           SECH_MENSI      =FACT(statut='f',min=0,max=1,
+             A               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+           ),
+           SECH_BAZANT     =FACT(statut='f',min=0,max=1,
+             D1              =SIMP(statut='o',typ='R'),
+             ALPHA_BAZANT    =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             FONC_DESORP     =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           SECH_NAPPE      =FACT(statut='f',min=0,max=1,
+             FONCTION        =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TSEC",into=("TSEC",) ),
+           ),
+#
+# comportement métallurgique
+#
+           META_ACIER      =FACT(statut='f',min=0,max=1,
+             TRC             =SIMP(statut='o',typ=(tabl_trc) ),
+             AR3             =SIMP(statut='o',typ='R'),
+             ALPHA           =SIMP(statut='o',typ='R'),
+             MS0             =SIMP(statut='o',typ='R'),
+             AC1             =SIMP(statut='o',typ='R'),
+             AC3             =SIMP(statut='o',typ='R'),
+             TAUX_1          =SIMP(statut='o',typ='R'),
+             TAUX_3          =SIMP(statut='o',typ='R'),
+             LAMBDA0         =SIMP(statut='f',typ='R'),
+             QSR_K           =SIMP(statut='f',typ='R'),
+             D10             =SIMP(statut='f',typ='R'),
+             WSR_K           =SIMP(statut='f',typ='R'),
+           ),
+           META_ZIRC       =FACT(statut='f',min=0,max=1,
+             TDEQ            =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             TDC             =SIMP(statut='o',typ='R'),
+             AC              =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             QSR_K           =SIMP(statut='f',typ='R'),
+             TDR             =SIMP(statut='o',typ='R'),
+             AR              =SIMP(statut='o',typ='R'),
+             BR              =SIMP(statut='o',typ='R'),
+           ),
+           DURT_META       =FACT(statut='f',min=0,max=1,
+             F1_DURT         =SIMP(statut='o',typ='R'),
+             F2_DURT         =SIMP(statut='o',typ='R'),
+             F3_DURT         =SIMP(statut='o',typ='R'),
+             F4_DURT         =SIMP(statut='o',typ='R'),
+             C_DURT          =SIMP(statut='o',typ='R'),
+           ),
+           ELAS_META       =FACT(statut='f',min=0,max=1,
+             E               =SIMP(statut='o',typ='R'),
+             NU              =SIMP(statut='o',typ='R'),
+             F_ALPHA         =SIMP(statut='o',typ='R'),
+             C_ALPHA         =SIMP(statut='o',typ='R'),
+             PHASE_REFE      =SIMP(statut='o',typ='TXM',into=("CHAUD","FROID")),
+             EPSF_EPSC_TREF  =SIMP(statut='o',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+             F1_SY           =SIMP(statut='f',typ='R'),
+             F2_SY           =SIMP(statut='f',typ='R'),
+             F3_SY           =SIMP(statut='f',typ='R'),
+             F4_SY           =SIMP(statut='f',typ='R'),
+             C_SY            =SIMP(statut='f',typ='R'),
+             SY_MELANGE      =SIMP(statut='f',typ=fonction),
+             F1_S_VP         =SIMP(statut='f',typ='R'),
+             F2_S_VP         =SIMP(statut='f',typ='R'),
+             F3_S_VP         =SIMP(statut='f',typ='R'),
+             F4_S_VP         =SIMP(statut='f',typ='R'),
+             C_S_VP          =SIMP(statut='f',typ='R' ),
+             S_VP_MELANGE    =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",)),
+           ),
+           ELAS_META_FO    =FACT(statut='f',min=0,max=1,
+             E               =SIMP(statut='o',typ=fonction),
+             NU              =SIMP(statut='o',typ=fonction),
+             F_ALPHA         =SIMP(statut='o',typ=fonction),
+             C_ALPHA         =SIMP(statut='o',typ=fonction),
+             PHASE_REFE      =SIMP(statut='o',typ='TXM',into=("CHAUD","FROID")),
+             EPSF_EPSC_TREF  =SIMP(statut='o',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+             F1_SY           =SIMP(statut='f',typ=fonction),
+             F2_SY           =SIMP(statut='f',typ=fonction),
+             F3_SY           =SIMP(statut='f',typ=fonction),
+             F4_SY           =SIMP(statut='f',typ=fonction),
+             C_SY            =SIMP(statut='f',typ=fonction),
+             SY_MELANGE      =SIMP(statut='f',typ=fonction),
+             F1_S_VP         =SIMP(statut='f',typ=fonction),
+             F2_S_VP         =SIMP(statut='f',typ=fonction),
+             F3_S_VP         =SIMP(statut='f',typ=fonction),
+             F4_S_VP         =SIMP(statut='f',typ=fonction),
+             C_S_VP          =SIMP(statut='f',typ=fonction),
+             S_VP_MELANGE    =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",)),
+           ),
+           META_ECRO_LINE  =FACT(statut='f',min=0,max=1,
+             F1_D_SIGM_EPSI  =SIMP(statut='f',typ=fonction),
+             F2_D_SIGM_EPSI  =SIMP(statut='f',typ=fonction),
+             F3_D_SIGM_EPSI  =SIMP(statut='f',typ=fonction),
+             F4_D_SIGM_EPSI  =SIMP(statut='f',typ=fonction),
+             C_D_SIGM_EPSI   =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           META_TRACTION   =FACT(statut='f',min=0,max=1,
+             SIGM_F1         =SIMP(statut='f',typ=fonction),
+             SIGM_F2         =SIMP(statut='f',typ=fonction),
+             SIGM_F3         =SIMP(statut='f',typ=fonction),
+             SIGM_F4         =SIMP(statut='f',typ=fonction),
+             SIGM_C          =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",)),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           META_VISC_FO    =FACT(statut='f',min=0,max=1,
+             F1_ETA          =SIMP(statut='f',typ=fonction),
+             F1_N            =SIMP(statut='f',typ=fonction),
+             F1_C            =SIMP(statut='f',typ=fonction),
+             F1_M            =SIMP(statut='f',typ=fonction),
+             F2_ETA          =SIMP(statut='f',typ=fonction),
+             F2_N            =SIMP(statut='f',typ=fonction),
+             F2_C            =SIMP(statut='f',typ=fonction),
+             F2_M            =SIMP(statut='f',typ=fonction),
+             F3_ETA          =SIMP(statut='f',typ=fonction),
+             F3_N            =SIMP(statut='f',typ=fonction),
+             F3_C            =SIMP(statut='f',typ=fonction),
+             F3_M            =SIMP(statut='f',typ=fonction),
+             F4_ETA          =SIMP(statut='f',typ=fonction),
+             F4_N            =SIMP(statut='f',typ=fonction),
+             F4_C            =SIMP(statut='f',typ=fonction),
+             F4_M            =SIMP(statut='f',typ=fonction),
+             C_ETA           =SIMP(statut='f',typ=fonction),
+             C_N             =SIMP(statut='f',typ=fonction),
+             C_C             =SIMP(statut='f',typ=fonction),
+             C_M             =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           META_PT         =FACT(statut='f',min=0,max=1,
+             F1_K            =SIMP(statut='f',typ='R'),
+             F2_K            =SIMP(statut='f',typ='R'),
+             F3_K            =SIMP(statut='f',typ='R'),
+             F4_K            =SIMP(statut='f',typ='R'),
+             F1_D_F_META     =SIMP(statut='f',typ=fonction),
+             F2_D_F_META     =SIMP(statut='f',typ=fonction),
+             F3_D_F_META     =SIMP(statut='f',typ=fonction),
+             F4_D_F_META     =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",) ),
+           ),
+           META_RE         =FACT(statut='f',min=0,max=1,
+             C_F1_THETA      =SIMP(statut='f',typ='R'),
+             C_F2_THETA      =SIMP(statut='f',typ='R'),
+             C_F3_THETA      =SIMP(statut='f',typ='R'),
+             C_F4_THETA      =SIMP(statut='f',typ='R'),
+             F1_C_THETA      =SIMP(statut='f',typ='R'),
+             F2_C_THETA      =SIMP(statut='f',typ='R'),
+             F3_C_THETA      =SIMP(statut='f',typ='R'),
+             F4_C_THETA      =SIMP(statut='f',typ='R'),
+           ),
+#
+# comportement fluide
+#
+           FLUIDE          =FACT(statut='f',min=0,max=1,
+             regles=(EXCLUS('CELE_C','CELE_R'),),
+             RHO             =SIMP(statut='o',typ='R'),
+             CELE_C          =SIMP(statut='f',typ='C'),
+             CELE_R          =SIMP(statut='f',typ='R'),
+           ),
+           PORO_JOINT      =FACT(statut='f',min=0,max=1,
+             RHO_FLUI        =SIMP(statut='o',typ='R'),
+             ENTRO_FLUI      =SIMP(statut='o',typ='R'),
+             BIOT_M          =SIMP(statut='o',typ='R'),
+             C_0             =SIMP(statut='o',typ='R'),
+             T_R             =SIMP(statut='o',typ='R'),
+             ALPHA_M         =SIMP(statut='o',typ='R'),
+             LAMBDA_T        =SIMP(statut='o',typ='R'),
+             LAMBDA_H        =SIMP(statut='o',typ='R'),
+             SOURCE_INIT     =SIMP(statut='o',typ='R'),
+             OMEGA_0         =SIMP(statut='o',typ='R'),
+           ),
+           THM_LIQU        =FACT(statut='f',min=0,max=1,
+             RHO             =SIMP(statut='o',typ='R'),
+             UN_SUR_K        =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=fonction),
+             D_VISC_TEMP     =SIMP(statut='f',typ=fonction),
+             LAMBDA          =SIMP(statut='f',typ=fonction),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=fonction),
+             COEF_HENRY      =SIMP(statut='f',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           THM_GAZ         =FACT(statut='f',min=0,max=1,
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=fonction),
+             D_VISC_TEMP     =SIMP(statut='f',typ=fonction),
+             LAMBDA          =SIMP(statut='f',typ=fonction),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           THM_VAPE_GAZ    =FACT(statut='f',min=0,max=1,
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=fonction),
+             D_VISC_TEMP     =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           THM_INIT        =FACT(statut='f',min=0,max=1,
+             TEMP            =SIMP(statut='o',typ='R'),
+             PRE1            =SIMP(statut='o',typ='R'),
+             PRE2            =SIMP(statut='o',typ='R'),
+             PORO            =SIMP(statut='o',typ='R'),
+             PRES_VAPE       =SIMP(statut='o',typ='R'),
+             DEGR_SATU       =SIMP(statut='f',typ='R'),
+             PRES_ATMO       =SIMP(statut='f',typ='R'),
+           ),
+           THM_DIFFU       =FACT(statut='f',min=0,max=1,
+             R_GAZ           =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             BIOT_COEF       =SIMP(statut='f',typ='R'),
+             SATU_PRES       =SIMP(statut='f',typ=fonction),
+             D_SATU_PRES     =SIMP(statut='f',typ=fonction),
+             PESA_X          =SIMP(statut='f',typ='R'),
+             PESA_Y          =SIMP(statut='f',typ='R'),
+             PESA_Z          =SIMP(statut='f',typ='R'),
+             PERM_IN         =SIMP(statut='f',typ=fonction),
+             PERM_LIQU       =SIMP(statut='f',typ=fonction),
+             D_PERM_LIQU_SATU=SIMP(statut='f',typ=fonction),
+             PERM_GAZ        =SIMP(statut='f',typ=fonction),
+             D_PERM_SATU_GAZ =SIMP(statut='f',typ=fonction),
+             D_PERM_PRES_GAZ =SIMP(statut='f',typ=fonction),
+             FICK            =SIMP(statut='f',typ=fonction),
+             D_FICK_TEMP     =SIMP(statut='f',typ=fonction),
+             D_FICK_GAZ_PRES =SIMP(statut='f',typ=fonction),
+             LAMBDA          =SIMP(statut='f',typ=fonction),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=fonction),
+             SIGMA_T         =SIMP(statut='f',typ=fonction),
+             D_SIGMA_T       =SIMP(statut='f',typ=fonction),
+             PERM_G_INTR     =SIMP(statut='f',typ=fonction),
+             CHAL_VAPO       =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="SAT",into=("SAT",) ),
+             VERI_P3         =SIMP(statut='c',typ='TXM',defaut="PORO",into=("PORO",) ),
+             VERI_P4         =SIMP(statut='c',typ='TXM',defaut="PGAZ",into=("PGAZ",) ),
+             VERI_P5         =SIMP(statut='c',typ='TXM',defaut="PGAP",into=("PGAP",) ),
+           ),
+#
+# courbes et coefficients associés à la fatigue et au dommage
+#
+           FATIGUE         =FACT(statut='f',min=0,max=1,
+             regles=(PRESENT_ABSENT('WOHLER','A_BASQUIN','BETA_BASQUIN'),
+                     PRESENT_ABSENT('WOHLER','A0','A1','A2','A3','SL'),
+                     PRESENT_ABSENT('A_BASQUIN','A0','A1','A2','A3','SL'),
+                     ENSEMBLE('A_BASQUIN','BETA_BASQUIN'),
+                     ENSEMBLE('A0','A1','A2','A3','SL'),
+                     PRESENT_PRESENT('A0','E_REFE'),
+                     ENSEMBLE('D0','TAU0'),),
+             WOHLER          =SIMP(statut='f',typ=fonction),
+             A_BASQUIN       =SIMP(statut='f',typ='R'),
+             BETA_BASQUIN    =SIMP(statut='f',typ='R'),
+             A0              =SIMP(statut='f',typ='R'),
+             A1              =SIMP(statut='f',typ='R'),
+             A2              =SIMP(statut='f',typ='R'),
+             A3              =SIMP(statut='f',typ='R'),
+             SL              =SIMP(statut='f',typ='R'),
+             MANSON_COFFIN   =SIMP(statut='f',typ=fonction),
+             E_REFE          =SIMP(statut='f',typ='R'),
+             D0              =SIMP(statut='f',typ='R'),
+             TAU0            =SIMP(statut='f',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="SIGM",into=("SIGM",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",) ),
+           ),
+           DOMMA_LEMAITRE  =FACT(statut='f',min=0,max=1,
+             S               =SIMP(statut='o',typ=fonction),
+             EPSP_SEUIL      =SIMP(statut='o',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+#
+# autres comportements ...
+#
+           WEIBULL         =FACT(statut='f',min=0,max=1,
+             M               =SIMP(statut='o',typ='R'),
+             VOLU_REFE       =SIMP(statut='o',typ='R'),
+             SIGM_REFE       =SIMP(statut='o',typ='R'),
+             SEUIL_EPSP_CUMU =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ),
+           WEIBULL_FO      =FACT(statut='f',min=0,max=1,
+             M               =SIMP(statut='o',typ='R'),
+             VOLU_REFE       =SIMP(statut='o',typ='R'),
+             SIGM_CNV        =SIMP(statut='o',typ='R'),
+             SIGM_REFE       =SIMP(statut='o',typ=fonction),
+             SEUIL_EPSP_CUMU =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           CONTACT         =FACT(statut='f',min=0,max=1,
+             E_N             =SIMP(statut='o',typ='R'),
+             E_T             =SIMP(statut='f',typ='R',defaut= 0.E+0),
+             COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0),
+           ),
+           NON_LOCAL       =FACT(statut='f',min=0,max=1,
+             LONG_CARA       =SIMP(statut='o',typ='R'),
+             COEF_RIGI_MINI  =SIMP(statut='f',typ='R'),
+           ),
+           RUPT_FRAG       =FACT(statut='f',min=0,max=1,
+             GC              =SIMP(statut='o',typ='R'),
+           ),
+           RCCM            =FACT(statut='f',min=0,max=1,
+             SY_02           =SIMP(statut='f',typ='R'),
+             SM              =SIMP(statut='f',typ='R'),
+             SU              =SIMP(statut='f',typ='R'),
+             SC              =SIMP(statut='f',typ='R'),
+             SH              =SIMP(statut='f',typ='R'),
+             N_KE            =SIMP(statut='f',typ='R'),
+             M_KE            =SIMP(statut='f',typ='R'),
+           ),
+           RCCM_FO         =FACT(statut='f',min=0,max=1,
+             SY_02           =SIMP(statut='f',typ=fonction),
+             SM              =SIMP(statut='f',typ=fonction),
+             SU              =SIMP(statut='f',typ=fonction),
+             S               =SIMP(statut='f',typ=fonction),
+             N_KE            =SIMP(statut='f',typ=fonction),
+             M_KE            =SIMP(statut='f',typ=fonction),
+           ),
+           INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene,
+                      docu="U4.65.02-d",reentrant='n',
+         SOUS_STRUC      =FACT(statut='o',min=01,max='**',
+           NOM             =SIMP(statut='o',typ='TXM' ),
+           MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+           TRANS           =SIMP(statut='f',typ='R',max=03),
+         ),
+         LIAISON         =FACT(statut='o',min=01,max='**',
+           SOUS_STRUC_1    =SIMP(statut='o',typ='TXM' ),
+           INTERFACE_1     =SIMP(statut='o',typ='TXM' ),
+           SOUS_STRUC_2    =SIMP(statut='o',typ='TXM' ),
+           INTERFACE_2     =SIMP(statut='o',typ='TXM' ),
+         ),
+         VERIF           =FACT(statut='f',min=01,max='**',
+#  dans la doc U stop_erreur est obligatoire         
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=   4,sd_prod=fonction,
+                fr="Définition des valeurs d une fonction de deux variables réelles",
+                docu="U4.31.03-f1",reentrant='n',
+         regles=(UN_PARMI('FONCTION','DEFI_FONCTION'),
+                 EXCLUS('FONCTION','NOM_PARA_FONC',),
+                 ENSEMBLE('NOM_PARA_FONC','DEFI_FONCTION'),),
+         NOM_PARA        =SIMP(statut='o',typ='TXM',into=("TEMP","INST","X","Y","Z","FREQ","PULS",
+                                                          "AMOR","EPAIS","TSEC","HYDR","SECH") ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),       
+         PARA            =SIMP(statut='o',typ='R',max='**'),
+         FONCTION        =SIMP(statut='f',typ=fonction,max='**' ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',into=("TEMP","INST","X","Y","Z","EPSI","FREQ",
+                                                          "PULS","AMOR","EPAIS") ),
+         DEFI_FONCTION   =FACT(statut='f',max='**',
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+           PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',into=("CROISSANT",) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op=  73,sd_prod=obstacle
+                    ,fr="Définition d un obstacle plan perpendiculaire à une structure filaire",
+                     docu="U4.44.21-e",reentrant='n',
+         TYPE            =SIMP(statut='o',typ='TXM',defaut="CERCLE",
+                             into=("CERCLE","PLAN_Y","PLAN_Z","DISCRET",
+                             "BI_CERCLE","BI_PLAN_Y","BI_PLAN_Z","BI_CERC_INT",
+                             "CRAYON_900","CRAYON_1300","GUID_A_CARTE_900",
+                             "GUID_B_CARTE_900","GUID_C_CARTE_900",
+                             "GUID_D_CARTE_900","GUID_E_CARTE_900",
+                             "GUID_F_CARTE_900","GUID_A_CARTE_1300",
+                             "GUID_B_CARTE_1300","GUID_C_CARTE_1300",
+                             "GUID_D_CARTE_1300","GUID_E_CARTE_1300",
+                             "GUID_F_CARTE_1300","GUID_A_CARSP_900",
+                             "GUID_B_CARSP_900","GUID_C_CARSP_900",
+                             "GUID_D_CARSP_900","GUID_E_CARSP_900",
+                             "GUID_F_CARSP_900","GUID_A_CARSP_1300",
+                             "GUID_B_CARSP_1300","GUID_C_CARSP_1300",
+                             "GUID_D_CARSP_1300","GUID_E_CARSP_1300",
+                             "GUID_F_CARSP_1300","GUID_A_GCONT_900",
+                             "GUID_B_GCONT_900","GUID_C_GCONT_900",
+                             "GUID_D_GCONT_900","GUID_E_GCONT_900",
+                             "GUID_F_GCONT_900","GUID_A_GCONT_1300",
+                             "GUID_B_GCONT_1300","GUID_C_GCONT_1300",
+                             "GUID_D_GCONT_1300","GUID_E_GCONT_1300",
+                             "GUID_F_GCONT_1300","GUID_A_GCOMB_900",
+                             "GUID_B_GCOMB_900","GUID_C_GCOMB_900",
+                             "GUID_D_GCOMB_900","GUID_E_GCOMB_900",
+                             "GUID_F_GCOMB_900","GUID_A_GCOMB_1300",
+                             "GUID_B_GCOMB_1300","GUID_C_GCOMB_1300",
+                             "GUID_D_GCOMB_1300","GUID_E_GCOMB_1300",
+                             "GUID_F_GCOMB_1300",) ),
+         VALE            =SIMP(statut='f',typ='R',max='**'),
+         VERIF           =SIMP(statut='f',typ='TXM',defaut="FERME"),
+)  ;
+#& MODIF COMMANDE  DATE 10/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+DEFI_PARA_SENSI=OPER(nom="DEFI_PARA_SENSI",op=   2,sd_prod=para_sensi,
+                    fr="Définition d'un paramètre de sensibilité",
+                    ang="Definition of a sensitive parameter",
+                    docu="U4.31.xx-a",reentrant='n',
+         NOM_RESU        =SIMP(statut='c',typ='TXM',into=("TOUTRESU",),defaut="TOUTRESU",
+                               fr="Nom du concept créé",
+                               ang="Name of the concept"),
+         VALE            =SIMP(statut='o',typ='R',max=01,
+                               fr="Valeur du parametre",
+                               ang="Value of the parameter"),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 07/03/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre,
+                    fr="Définition d'un spectre d'excitation turbulente",
+                    docu="U4.44.31-c",reentrant='n',
+         regles=(UN_PARMI('SPEC_LONG_COR_1','SPEC_LONG_COR_2','SPEC_LONG_COR_3',
+                          'SPEC_LONG_COR_4','SPEC_CORR_CONV_1','SPEC_CORR_CONV_2',
+                          'SPEC_FONC_FORME','SPEC_EXCI_POINT'),),
+         SPEC_LONG_COR_1 =FACT(statut='f',min=00,max=01,
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           VISC_CINE       =SIMP(statut='o',typ='R' ),
+         ),
+         SPEC_LONG_COR_2 =FACT(statut='f',min=00,max=01,
+           regles=(ENSEMBLE('FREQ_COUP','PHI0','BETA' ),),
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           FREQ_COUP       =SIMP(statut='f',typ='R',defaut= 0.1 ),
+           PHI0            =SIMP(statut='f',typ='R',defaut= 1.5E-3 ),
+           BETA            =SIMP(statut='f',typ='R',defaut= 2.7 ),
+         ),
+         SPEC_LONG_COR_3 =FACT(statut='f',min=00,max=01,
+           regles=(ENSEMBLE('PHI0_1','BETA_1','PHI0_2','BETA_2','FREQ_COUP'),),
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           FREQ_COUP       =SIMP(statut='f',typ='R',defaut= 0.2 ),
+           PHI0_1          =SIMP(statut='f',typ='R',defaut= 5.E-3 ),
+           BETA_1          =SIMP(statut='f',typ='R',defaut= 0.5 ),
+           PHI0_2          =SIMP(statut='f',typ='R',defaut= 4.E-5 ),
+           BETA_2          =SIMP(statut='f',typ='R',defaut= 3.5 ),
+         ),
+         SPEC_LONG_COR_4 =FACT(statut='f',min=00,max=01,
+           regles=(ENSEMBLE('BETA','GAMMA'),),
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           TAUX_VIDE       =SIMP(statut='o',typ='R' ),
+           BETA            =SIMP(statut='f',typ='R',defaut= 2. ),
+           GAMMA           =SIMP(statut='f',typ='R',defaut= 4. ),
+         ),
+         SPEC_CORR_CONV_1=FACT(statut='f',min=00,max=01,
+           LONG_COR_1      =SIMP(statut='o',typ='R' ),
+           LONG_COR_2      =SIMP(statut='f',typ='R' ),
+           VITE_FLUI       =SIMP(statut='o',typ='R' ),
+           RHO_FLUI        =SIMP(statut='o',typ='R' ),
+           FREQ_COUP       =SIMP(statut='f',typ='R' ),
+           K               =SIMP(statut='f',typ='R',defaut= 5.8E-3 ),
+           D_FLUI          =SIMP(statut='o',typ='R' ),
+           COEF_VITE_FLUI_A=SIMP(statut='f',typ='R' ),
+           COEF_VITE_FLUI_O=SIMP(statut='f',typ='R' ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="GENERALE",
+                                 into=("AU_YANG","GENERALE","CORCOS") ),
+         ),
+         SPEC_CORR_CONV_2=FACT(statut='f',min=00,max=01,
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           VITE_FLUI       =SIMP(statut='o',typ='R' ),
+           FREQ_COUP       =SIMP(statut='f',typ='R' ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="GENERALE",
+                                 into=("AU_YANG","GENERALE","CORCOS",) ),
+           COEF_VITE_FLUI_A=SIMP(statut='f',typ='R' ),
+           COEF_VITE_FLUI_O=SIMP(statut='f',typ='R' ),
+         ),
+         SPEC_FONC_FORME =FACT(statut='f',min=00,max=01,
+           regles=(UN_PARMI('INTE_SPEC','GRAPPE_1'),
+                   ENSEMBLE('INTE_SPEC','FONCTION'),),
+           INTE_SPEC       =SIMP(statut='f',typ=tabl_intsp ),
+           FONCTION        =SIMP(statut='f',typ=fonction,max='**'),
+           GRAPPE_1        =SIMP(statut='f',typ='TXM',into=("DEBIT_180","DEBIT_300",) ),
+           NOEUD           =SIMP(statut='o',typ=no),
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           MODELE          =SIMP(statut='o',typ=modele ),
+         ),
+         SPEC_EXCI_POINT =FACT(statut='f',min=00,max=01,
+           regles=(UN_PARMI('INTE_SPEC','GRAPPE_2'),),
+           INTE_SPEC       =SIMP(statut='f',typ=tabl_intsp ),
+           GRAPPE_2        =SIMP(statut='f',typ='TXM',
+                                 into=("ASC_CEN","ASC_EXC","DES_CEN","DES_EXC",) ),
+#  Quels sont les statuts des mots cles à l interieur des deux blocs qui suivent
+           b_inte_spec =BLOC(condition = "INTE_SPEC != None",
+             NATURE          =SIMP(statut='o',typ='TXM',max='**',into=("FORCE","MOMENT",) ),
+             ANGL            =SIMP(statut='o',typ='R',max='**'),
+             NOEUD           =SIMP(statut='o',typ=no,max='**'),
+           ),
+           b_grappe_2      =BLOC(condition = "GRAPPE_2 != None",
+             RHO_FLUI        =SIMP(statut='o',typ='R' ),
+             NOEUD           =SIMP(statut='o',typ=no),
+           ),
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           MODELE          =SIMP(statut='o',typ=modele ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
+                    fr="Définition d un maillage de visualisation",
+                    docu="U4.24.01-e",reentrant='n',
+         regles=(UN_PARMI('MODE_CYCL','MODELE_GENE','MAILLAGE'),
+                 PRESENT_PRESENT('MODE_CYCL','SECTEUR'),
+                 EXCLUS('SOUS_STRUC','SECTEUR'),
+                 PRESENT_PRESENT('NOM_GROUP_MA','MODELE_GENE'),
+                 PRESENT_PRESENT('NOM_GROUP_MA','SOUS_STRUC'),),
+         MODE_CYCL       =SIMP(statut='f',typ=mode_cycl ),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         SQUELETTE       =SIMP(statut='f',typ=squelette ),
+         RECO_GLOBAL     =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('TOUT','GROUP_NO_1'),
+                   PRESENT_PRESENT('GROUP_NO_1','GROUP_NO_2'),
+                   PRESENT_PRESENT('GROUP_NO_1','SOUS_STRUC_1'),
+                   PRESENT_PRESENT('GROUP_NO_2','SOUS_STRUC_2'),
+                   PRESENT_PRESENT('SOUS_STRUC_1','SOUS_STRUC_2'),),
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           SOUS_STRUC_1    =SIMP(statut='f',typ='TXM' ),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           SOUS_STRUC_2    =SIMP(statut='f',typ='TXM' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           DIST_REFE       =SIMP(statut='f',typ='R' ),
+         ),
+         NOM_GROUP_MA    =FACT(statut='f',min=01,max='**',
+           NOM             =SIMP(statut='o',typ='TXM' ),
+           SOUS_STRUC      =SIMP(statut='o',typ='TXM' ),
+           GROUP_MA        =SIMP(statut='o',typ=grma),
+         ),
+         EXCLUSIF        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         MAILLAGE        =SIMP(statut='f',typ=maillage ),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         TRANS           =SIMP(statut='f',typ='R',min=3,max=3),
+         ANGL_NAUT       =SIMP(statut='f',typ='R',min=3,max=3),
+         SOUS_STRUC      =FACT(statut='f',min=01,max='**',
+           NOM             =SIMP(statut='f',typ='TXM' ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         ),
+         SECTEUR         =FACT(statut='f',min=01,max='**',
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_TEXTURE=OPER(nom="DEFI_TEXTURE",op= 181,sd_prod=tabl_texture,
+                  fr=" ",docu="U4.43.05-a",reentrant='n',
+         SYST_GLISSEMENT =FACT(statut='o',min=3,max=3,
+           N               =SIMP(statut='o',typ='R',min=12,max=12 ),  
+           L               =SIMP(statut='o',typ='R',max='**' ),  
+         ),
+         PLAN            =FACT(statut='o',min=40,max=40,
+           ANGL_NAUT       =SIMP(statut='o',typ='R',max='**' ),  
+           PROPORTION      =SIMP(statut='o',typ='R' ),  
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_THER_JOULE=OPER(nom="DEFI_THER_JOULE",op= 121,sd_prod=fonction,docu="U4.MK.20-d",reentrant='n',
+                    fr="Calculer la fonction d évolution temporelle de température due à l effet JOULE dans un cable",
+         LIST_INST       =SIMP(statut='o',typ=listr8),
+         INST_CC_INIT    =SIMP(statut='f',typ='R',defaut= 0.0E+0 ),
+         INST_CC_FIN     =SIMP(statut='f',typ='R',defaut= 1.0E+10),
+         INST_RENC_INIT  =SIMP(statut='f',typ='R',defaut= 1.0E+10),
+         INST_RENC_FIN   =SIMP(statut='f',typ='R',defaut= 1.0E+10),
+         TEMP_EXT_POSE   =SIMP(statut='f',typ='R',defaut= 15.0E+0),
+         TEMP_EXT        =SIMP(statut='f',typ='R',defaut= 15.0E+0),
+         TEMP_RESI_REF   =SIMP(statut='f',typ='R',defaut= 20.0E+0),
+         PARA_COND_1D    =FACT(statut='f',min=01,max='**',
+           INTE_CC         =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+           INTE_RENC       =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+           A               =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           SECTION         =SIMP(statut='f',typ='TXM',defaut="CERCLE",into=("CERCLE",) ),
+           RESI_R0         =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+           RESI_R1         =SIMP(statut='f',typ='R',defaut= 0.E+0),
+           RHO_CP          =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           COEF_H          =SIMP(statut='f',typ='R',defaut= 40.0E+0),
+           TEMP_INIT       =SIMP(statut='f',typ='R',defaut= 15.0E+0),
+         ),
+)  ;
+
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=tabl_trc,docu="U4.43.04-e",reentrant='n',
+              fr="Définition d un diagramme de transformations en refroidissement continu d un acier",
+         HIST_EXP        =FACT(statut='o',min=01,max='**',
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+         ),
+         TEMP_MS         =FACT(statut='o',min=01,max='**',
+           SEUIL           =SIMP(statut='o',typ='R'),
+           AKM             =SIMP(statut='o',typ='R'),
+           BKM             =SIMP(statut='o',typ='R'),
+           TPLM            =SIMP(statut='o',typ='R'),
+         ),
+         GRAIN_AUST      =FACT(statut='f',min=01,max='**',
+           DREF           =SIMP(statut='f',typ='R'),
+           A              =SIMP(statut='f',typ='R'),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 12/09/2001   AUTEUR MCOURTOI M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def defi_valeur_prod(self,IS=None,R8=None,TX=None,C8=None,LS=None):
+  if IS != None  : return entier
+  if R8 != None  : return reel
+  if TX != None  : return chaine
+  if C8 != None  : return complexe
+  if LS != None  : return liste
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_VALEUR=MACRO(nom="DEFI_VALEUR",op=-4,sd_prod=defi_valeur_prod,
+                 fr="Affectation d une valeur à une variable Superviseur",
+                 docu="U4.31.04-e1",reentrant='f',
+         regles=(UN_PARMI('IS','R8','TX','C8','LS'),),
+         IS              =SIMP(statut='f',typ='I',max='**'),
+         R8              =SIMP(statut='f',typ='R',max='**'),
+         TX              =SIMP(statut='f',typ='TXM',max='**'),
+         C8              =SIMP(statut='f',typ='C',max='**'),
+         LS              =SIMP(statut='f',typ='L',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFUFI=PROC(nom="DEFUFI",op=21,docu="U4.12.01-d",
+            fr="Modification / ajout d une unité logique en sortie en complément de celles définies dans DEBUT",
+         IMPRESSION      =FACT(statut='o',min=01,max='**',
+           NOM             =SIMP(statut='o',typ='TXM',max='**'),
+           UNITE           =SIMP(statut='o',typ='I' ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEPL_INTERNE=OPER(nom="DEPL_INTERNE",op=89,sd_prod=cham_no_depl_r,docu="U4.62.02-e",reentrant='n',
+                  fr="Récupération du champ de déplacement interne à une sous-structure",
+         DEPL_GLOBAL     =SIMP(statut='o',typ=cham_no_depl_r),
+         MAILLE          =SIMP(statut='o',typ=ma,max=1),
+         NOM_CAS         =SIMP(statut='f',typ='TXM',defaut=" "),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DETRUIRE=PROC(nom="DETRUIRE",op=-7,docu="U4.14.01-d",
+              fr="Destruction d un concept utilisateur dans la base GLOBALE",
+             op_init=ops.detruire,
+            CONCEPT     =FACT(statut='o',min=01,
+            NOM         =SIMP(statut='o',typ=assd,max='**'),
+        ),
+);
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DIST_LIGN_3D=OPER(nom="DIST_LIGN_3D",op= 133,sd_prod=fonction,docu="U4.MK.30-d",reentrant='n', 
+                  fr="Calcul sous forme d une fonction du temps de la distance minimale entre deux structures filaires",
+      regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),
+              UN_PARMI('GROUP_MA_2','POIN_FIXE'),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,evol_noli) ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         GROUP_MA_1      =SIMP(statut='o',typ=grma,max='**'),
+         GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+         POIN_FIXE       =SIMP(statut='f',typ='R',min=3,max=3),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/03/2001   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=tabl_intsp
+                    ,fr="Calcule la réponse spectrale d une structure linéaire sous une excitation connue par sa DSP",
+                     docu="U4.53.22-d",reentrant='n',
+         BASE_MODALE     =FACT(statut='o',min=01,max=01,
+           regles=(UN_PARMI('NUME_ORDRE','BANDE'),),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+           BANDE           =SIMP(statut='f',typ='R',max=02),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           b_bande =BLOC(condition = "BANDE != None",
+             AMOR_UNIF       =SIMP(statut='o',typ='R' ),
+           ),
+           b_nume_ordre =BLOC(condition = "NUME_ORDRE != None",
+             AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           ),
+         ),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,)),
+         EXCIT           =FACT(statut='o',min=01,max=01,
+           regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I'), 
+                   EXCLUS('CHAM_NO','NOEUD'),),
+           DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
+           MODAL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+#  dans la doc U il y a plus de choix pour GRANDEUR
+           GRANDEUR        =SIMP(statut='f',typ='TXM',defaut="DEPL_R",
+                                 into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
+           INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
+           NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG",) ),
+#  Toutes les regles ne semblent pas avoir été ecrites dans la doc U
+           NUME_ORDRE_I    =SIMP(statut='f',typ='I',max='**'),
+           NOEUD_I         =SIMP(statut='f',typ=no,max='**'),
+           b_nume_ordre_i  =BLOC(condition = "NUME_ORDRE_I != None",
+             NUME_ORDRE_J    =SIMP(statut='o',typ='I',max='**'),
+           ),
+           b_noeud_i       =BLOC(condition = "NOEUD_I != None",
+             NOEUD_J         =SIMP(statut='o',typ=no,max='**'),
+             NOM_CMP_I       =SIMP(statut='o',typ='TXM',max='**'),
+             NOM_CMP_J       =SIMP(statut='o',typ='TXM',max='**'),
+           ),
+           CHAM_NO         =SIMP(statut='f',typ=cham_no),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           b_noeud         =BLOC(condition = "NOEUD != None",
+             NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+           ),           
+         ),
+         REPONSE         =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('FREQ_MIN','NB_POIN_MODE'),
+                   EXCLUS('FREQ_MIN','FREQ_EXCIT'),
+                   ENSEMBLE('FREQ_MIN','FREQ_MAX'),),
+#  Toutes les regles ne semblent pas avoir été ecrites dans la doc U
+           DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ,) ),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
+           FREQ_MIN        =SIMP(statut='f',typ='R' ),
+           FREQ_MAX        =SIMP(statut='f',typ='R' ),
+           PAS             =SIMP(statut='f',typ='R' ),
+           FREQ_EXCIT      =SIMP(statut='f',typ='TXM',defaut="AVEC",into=("AVEC","SANS") ),
+           NB_POIN_MODE    =SIMP(statut='f',typ='I',defaut= 50 ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 10/07/2001   AUTEUR ACBHHCD G.DEVESA 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def dyna_line_harm_prod(MATR_MASS,**args):
+  if AsType(MATR_MASS) == matr_asse_depl_r : return dyna_harmo
+  if AsType(MATR_MASS) == matr_asse_depl_c : return dyna_harmo
+  if AsType(MATR_MASS) == matr_asse_pres_c : return acou_harmo
+  if AsType(MATR_MASS) == matr_asse_gene_r : return harm_gene
+  raise AsException("type de concept resultat non prevu")
+
+DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
+                    fr="Réponse dynamique complexe d un système à une excitation harmonique",
+                    docu="U4.53.11-e",reentrant='n',
+         regles=(PRESENT_ABSENT('AMOR_REDUIT','MATR_AMOR'),
+                 PRESENT_ABSENT('AMOR_REDUIT','LIST_AMOR'),
+                 PRESENT_ABSENT('MATR_AMOR','LIST_AMOR'),
+                 UN_PARMI('FREQ','LIST_FREQ'),),
+         MODELE          =SIMP(statut='f',typ=modele ),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+         MATR_MASS       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_pres_c,matr_asse_gene_r ) ),
+         MATR_RIGI       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_pres_c
+                                              ,matr_asse_gene_r,matr_asse_gene_c ) ),
+         MATR_AMOR       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_pres_c,matr_asse_gene_r ) ),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         LIST_AMOR       =SIMP(statut='f',typ=listr8 ),
+         MATR_IMPE_PHI   =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',max=03,into=("DEPL","VITE","ACCE") ),
+         EXCIT           =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('VECT_ASSE','CHARGE'),
+                   UN_PARMI('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+           VECT_ASSE       =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_pres_c,vect_asse_gene ) ),
+           CHARGE          =SIMP(statut='f',typ=char_meca ),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+           FONC_MULT_C     =SIMP(statut='f',typ=fonction_c ),
+           COEF_MULT_C     =SIMP(statut='f',typ='C' ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           PHAS_DEG        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           PUIS_PULS       =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 28/03/2001   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
+                    fr="Réponse temporelle d un système à une excitation transitoire",
+                    docu="U4.53.02-f",reentrant='f',
+         regles=(UN_PARMI('NEWMARK','WILSON','DIFF_CENTRE','ADAPT'),),
+         MODELE          =SIMP(statut='f',typ=modele ),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+         MATR_MASS       =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_RIGI       =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,) ),
+         NEWMARK         =FACT(statut='f',min=01,max=01,
+           ALPHA           =SIMP(statut='f',typ='R',defaut= 0.25 ),
+           DELTA           =SIMP(statut='f',typ='R',defaut= 0.5 ),
+         ),
+         WILSON          =FACT(statut='f',min=01,max=01,
+           THETA           =SIMP(statut='f',typ='R',defaut= 1.4 ),
+         ),
+         DIFF_CENTRE     =FACT(statut='f',min=01,max=01,
+         ),
+         ADAPT           =FACT(statut='f',min=01,max=01,
+         ),
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('DYNA_TRANS','DEPL_INIT'),
+                   EXCLUS('DYNA_TRANS','VITE_INIT'),),
+           DYNA_TRANS      =SIMP(statut='f',typ=dyna_trans ),
+#  j ai interprete la doc U : est-ce bon           
+           b_dyna_trans    =BLOC(condition = "DYNA_TRANS != None",
+             regles=(EXCLUS('NUME_INIT','INST_INIT' ),),
+             NUME_INIT       =SIMP(statut='f',typ='I' ),
+             INST_INIT       =SIMP(statut='f',typ='R' ),
+             b_inst_init     =BLOC(condition = "INST_INIT != None",
+               PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+           ),
+           DEPL_INIT       =SIMP(statut='f',typ=(cham_no_depl_r) ),
+           VITE_INIT       =SIMP(statut='f',typ=(cham_no_depl_r) ),
+         ),
+         EXCIT           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('CHARGE','VECT_ASSE'),
+                   EXCLUS('CHARGE','COEF_MULT'),
+                   EXCLUS('FONC_MULT','COEF_MULT'),
+                   EXCLUS('ACCE','COEF_MULT'),
+                   PRESENT_ABSENT('ACCE','FONC_MULT'),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
+                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+           CHARGE          =SIMP(statut='f',typ=char_meca ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+           ACCE            =SIMP(statut='f',typ=fonction ),
+           VITE            =SIMP(statut='f',typ=fonction ),
+           DEPL            =SIMP(statut='f',typ=fonction ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         ),
+         AMOR_MODAL      =FACT(statut='f',min=01,max=01,
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+           REAC_VITE       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+#  ce n est pas le mot clesolveur standard
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+           STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+           NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         INCREMENT       =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('LIST_INST','FONC_INST','PAS'),),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ), 
+           FONC_INST       =SIMP(statut='f',typ=fonction ),       
+           PAS             =SIMP(statut='f',typ='R' ),
+           b_pas           =BLOC(condition = "PAS != None",
+               INST_INIT       =SIMP(statut='f',typ='R' ),
+               INST_FIN        =SIMP(statut='f',typ='R' ),    
+           ),
+           b_list_fonc     =BLOC(condition = "LIST_INST != None or FONC_INST != None",
+               regles=(EXCLUS('INST_FIN','NUME_FIN'),),
+               NUME_FIN        =SIMP(statut='f',typ='I' ), 
+               INST_FIN        =SIMP(statut='f',typ='R' ),   
+           ),
+           VITE_MIN        =SIMP(statut='f',typ='TXM',defaut="NORM",into=("MAXI","NORM") ),
+           COEF_MULT_PAS   =SIMP(statut='f',typ='R',defaut= 1.1 ),
+           COEF_DIVI_PAS   =SIMP(statut='f',typ='R',defaut= 1.33334 ),
+           PAS_LIMI_RELA   =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+           NB_POIN_PERIODE =SIMP(statut='f',typ='I',defaut= 50 ),
+           NMAX_ITER_PAS   =SIMP(statut='f',typ='I',defaut= 16 ),
+           PAS_CALCUL      =SIMP(statut='f',typ='I',defaut= 1 ),
+         ),
+         ARCHIVAGE       =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH', ),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',into=("DEPL","VITE","ACCE") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR VABHHTS J.TESELET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
+                   fr="Analyse mécanique dynamique non linéaire",docu="U4.53.01-e1",
+         regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS',),
+                 UN_PARMI('NEWMARK','HHT', ),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,)),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='o',min=1,max='**',
+           regles=(PRESENT_ABSENT('FONC_MULT','ACCE'),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
+                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
+           CHARGE          =SIMP(statut='o',typ=char_meca),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           DEPL            =SIMP(statut='f',typ=fonction),
+           ACCE            =SIMP(statut='f',typ=fonction),
+           VITE            =SIMP(statut='f',typ=fonction),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         ),
+         AMOR_MODAL      =FACT(statut='f',min=1,max=1,
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**' ),
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+           REAC_VITE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         COMP_INCR       =FACT(statut='f',min=1,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="VMIS_ISOT_TRAC",
+                                 into=( "ELAS",
+                                        "VMIS_ISOT_TRAC",
+                                        "VMIS_ISOT_LINE",
+                                        "VMIS_ECMI_TRAC",
+                                        "VMIS_ECMI_LINE",
+                                        "LABORD_1D",
+                                        "ENDO_LOCAL",
+                                        "ENDO_FRAGILE",
+                                        "BETON_ENDO_LOCAL",
+                                        "RUPT_FRAG",
+                                        "PLAS_GRAD_LINE",
+                                        "PLAS_GRAD_TRAC",
+                                        "DURC_GRAD",
+                                        "META_P_IL",
+                                        "META_P_IL_PT",
+                                        "META_P_IL_RE",
+                                        "META_P_IL_PT_RE",
+                                        "META_V_IL",
+                                        "META_V_IL_PT",
+                                        "META_V_IL_RE",
+                                        "META_V_IL_PT_RE",
+                                        "META_P_INL",
+                                        "META_P_INL_PT",
+                                        "META_P_INL_RE",
+                                        "META_P_INL_PT_RE",
+                                        "META_V_INL",
+                                        "META_V_INL_PT",
+                                        "META_V_INL_RE",
+                                        "META_V_INL_PT_RE",
+                                        "META_P_CL",
+                                        "META_P_CL_PT",
+                                        "META_P_CL_RE",
+                                        "META_P_CL_PT_RE",
+                                        "META_V_CL",
+                                        "META_V_CL_PT",
+                                        "META_V_CL_RE",
+                                        "META_V_CL_PT_RE",
+                                        "VMIS_CINE_LINE",
+                                        "VISC_TAHERI",
+                                        "CHABOCHE",
+                                        "VISCOCHAB",
+                                        "VMIS_CIN1_CHAB",
+                                        "VMIS_CIN2_CHAB",
+                                        "POLY_CFC",
+                                        "LMARC",
+                                        "ROUSSELIER",
+                                        "ROUSS_PR",
+                                        "ROUSS_VISC",
+                                        "VMIS_POU_LINE",
+                                        "VMIS_POU_FLEJOU",
+                                        "COULOMB",
+                                        "ARME",
+                                        "ASSE_CORN",
+                                        "NORTON_HOFF",
+                                        "LEMAITRE",
+                                        "ZIRC_CYRA2",
+                                        "ZIRC_EPRI",
+                                        "ASSE_COMBU",
+                                        "VENDOCHAB",
+                                        "NADAI_B",
+                                        "DIS_CONTACT",
+                                        "DIS_CHOC",
+                                        "DIS_GOUJ2E_PLAS",
+                                        "DIS_GOUJ2E_ELAS",
+                                        "GRILLE_ISOT_LINE",
+                                        "GRILLE_CINE_LINE",
+                                        "GRILLE_PINTO_MEN",
+                                        "PINTO_MENEGOTTO",
+                                        "CJS",
+                                        "OHNO",
+                                        "GRANGER_FP",
+                                        "GRANGER_FP_V",
+                                        "BETON_DOUBLE_DP",
+                                        "KIT_HM",
+                                        "KIT_HHM",
+                                        "KIT_THH",
+                                        "KIT_THM",
+                                        "KIT_THHM",
+                                        "VMIS_ASYM_LINE",
+                                        "ELAS_THM",
+                                        "SURF_ETAT_NSAT",
+                                        "SURF_ETAT_SATU",
+                                        "CAM_CLAY_THM",
+                                        "KIT_DDI",
+                                     ) ),
+           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           VMIS_ISOT_LINE  =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           VMIS_ECMI_TRAC  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           VMIS_ECMI_LINE  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           LABORD_1D   =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           ENDO_LOCAL      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ENDO_FRAGILE    =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           BETON_ENDO_LOCAL=SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           RUPT_FRAG       =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           PLAS_GRAD_LINE  =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           PLAS_GRAD_TRAC  =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           DURC_GRAD       =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           META_P_IL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_PT       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_RE       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_PT_RE    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL          =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_PT       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_RE       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_PT_RE    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_PT      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_RE      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_PT_RE   =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_PT      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_RE      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_PT_RE   =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_CL          =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_PT       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_RE       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_PT_RE    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL          =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_PT       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_RE       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_PT_RE    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+           VMIS_CINE_LINE  =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+           CHABOCHE        =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
+           VISCOCHAB       =SIMP(statut='c',typ='I',defaut=28,into=(28,)),
+           VMIS_CIN1_CHAB  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           VMIS_CIN2_CHAB  =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
+           POLY_CFC        =SIMP(statut='c',typ='I',defaut=1688,into=(1688,)),
+           LMARC           =SIMP(statut='c',typ='I',defaut=20,into=(20,)),
+           VISC_TAHERI     =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+           ROUSSELIER      =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+           ROUSS_PR        =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           ROUSS_VISC      =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           VMIS_POU_LINE   =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+           VMIS_POU_FLEJOU =SIMP(statut='c',typ='I',defaut=9 ,into=(9,)),
+           COULOMB         =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           ASSE_CORN       =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           ARME            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           NORTON_HOFF     =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           LEMAITRE        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ZIRC_CYRA2      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ZIRC_EPRI       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ASSE_COMBU      =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           NADAI_B         =SIMP(statut='c',typ='I',defaut=34,into=(34,)),
+           VENDOCHAB       =SIMP(statut='c',typ='I',defaut=10,into=(10,)),
+           GRILLE_ISOT_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           GRILLE_CINE_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           GRILLE_PINTO_MEN=SIMP(statut='c',typ='I',defaut=16,into=(16,)),
+           DIS_CONTACT     =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+           DIS_CHOC        =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+           DIS_GOUJ2E_PLAS =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           DIS_GOUJ2E_ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           PINTO_MENEGOTTO =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           CJS             =SIMP(statut='c',typ='I',defaut=16,into=(16,)),
+           OHNO            =SIMP(statut='c',typ='I',defaut=32,into=(32,)),
+           GRANGER_FP      =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
+           GRANGER_FP_V    =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
+           BETON_DOUBLE_DP =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           KIT_HM          =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_HHM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THH         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THHM        =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           VMIS_ASYM_LINE  =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+
+           RELATION_KIT    =SIMP(statut='f',typ='TXM',max='**',
+                                 into=(
+# MECA
+                                       "ELAS",
+                                       "CJS",
+                                       "ELAS_THM",
+                                       "SURF_ETAT_NSAT",
+                                       "SURF_ETAT_SATU",
+                                       "CAM_CLAY_THM",
+# THMC
+                                       "GAZ",
+                                       "LIQU_SATU",
+                                       "LIQU_SATU_GAT",
+                                       "LIQU_GAZ_ATM",
+                                       "LIQU_VAPE_GAZ",
+                                       "LIQU_NSAT_GAT",
+                                       "LIQU_GAZ",
+# THER
+                                       "THER_HOMO",
+                                       "THER_POLY",
+# HYDR
+                                       "HYDR_UTIL",
+                                       "HYDR",
+# MECA_META
+                                       "ACIER",
+                                       "ZIRC",
+# MECA KIT_DDI
+                                       "VMIS_ISOT_TRAC",
+                                       "VMIS_ISOT_LINE",
+                                       "VMIS_ISOT_CINE",
+                                       "GRANGER_FP",
+                                       "GRANGER_FP_V",
+                                       "ROUSSELIER",
+                                       "CHABOCHE",
+                                       "OHNO",
+                                       "NADAI_B",
+                                       "BETON_DOUBLE_DP",
+                                       ) ),
+           ELAS_THM        =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           SURF_ETAT_NSAT  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           SURF_ETAT_SATU  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           CAM_CLAY_THM    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+           GAZ             =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           LIQU_SATU       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_SATU_GAT   =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_GAZ_ATM    =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_VAPE_GAZ   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_NSAT_GAT   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_GAZ        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           THER_HOMO       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           THER_POLY       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           HYDR_UTIL       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           HYDR            =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           ACIER           =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           ZIRC            =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC","SIMO_MIEHE","GREEN_GR","GREEN",)),
+           ALGO_C_PLAN     =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         COMP_ELAS       =FACT(statut='f',min=1,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
+                                       "ELAS_POUTRE_GR","CABLE")),
+           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_VMIS_LINE  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_POUTRE_GR  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           CABLE           =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GREEN","GREEN_GR",) ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+#-------------------------------------------------------------------
+         ETAT_INIT       =FACT(statut='f',min=1,max=1,
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','SIGM','VARI','VARI_NON_LOCAL',),
+                   EXCLUS('EVOL_NOLI','DEPL',),
+                   EXCLUS('EVOL_NOLI','VITE'),
+                   EXCLUS('EVOL_NOLI','SIGM',),
+                   EXCLUS('EVOL_NOLI','VARI',),
+                   EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',),
+                   EXCLUS('NUME_ORDRE','INST'), ),
+           DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+           VITE            =SIMP(statut='f',typ=cham_no_depl_r),
+           SIGM            =SIMP(statut='f',typ=(cham_elem_sief_r,carte_sief_r)),
+           VARI            =SIMP(statut='f',typ=cham_elem_vari_r),
+           VARI_NON_LOCAL  =SIMP(statut='f',typ=cham_no_vanl_r),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           NUME_DIDI       =SIMP(statut='f',typ='I'),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),
+#-------------------------------------------------------------------
+         INCREMENT       =FACT(statut='o',min=1,max=1,
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=listr8),
+           EVOLUTION       =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE",
+                                 into=("CHRONOLOGIQUE","RETROGRADE","SANS",) ),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+           SUBD_PAS        =SIMP(statut='f',typ='I',defaut=1),
+           SUBD_PAS_MINI   =SIMP(statut='f',typ='R'),
+           COEF_SUBD_PAS_1 =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+         ),
+#-------------------------------------------------------------------
+         NEWMARK         =FACT(statut='f',min=1,max=1,
+           ALPHA           =SIMP(statut='f',typ='R',defaut= 0.25),
+           DELTA           =SIMP(statut='f',typ='R',defaut= 0.5),
+         ),
+         HHT             =FACT(statut='f',min=1,max=1,
+           ALPHA           =SIMP(statut='f',typ='R'
+                                ,defaut= -0.29999999999999999 ),
+         ),
+         NEWTON          =FACT(statut='d',min=1,max=1,
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),
+           PREDICTION      =SIMP(statut='f',typ='TXM',into=("TANGENTE","ELASTIQUE") ),
+           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0),
+           PAS_MINI_ELAS   =SIMP(statut='f',typ='R',defaut=0.0E+0),
+         ),
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition= "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition= "METHODE == 'LDLT'",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult     =BLOC(condition="METHODE == 'LDLT' or METHODE == 'MULT_FRONT'",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","DECOUPE") ),
+           ),
+           b_gcpc          =BLOC(condition="METHODE == 'GCPC'",fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut=0),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+#-------------------------------------------------------------------
+         RECH_LINEAIRE   =FACT(statut='f',min=1,max=1,
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),
+         ),
+         PILOTAGE        =FACT(statut='f',min=1,max=1,
+           regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","PRED_ELAS_INCR","DEFORMATION") ),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           ETA_PILO_MAX    =SIMP(statut='f',typ='R'),
+           ETA_PILO_MIN    =SIMP(statut='f',typ='R'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),
+                         ),
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
+           ITER_GLOB_ELAS  =SIMP(statut='f',typ='I',defaut=25),
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R'
+                                ,defaut= 1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+           TYPE_MATR_COMP  =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+#-------------------------------------------------------------------
+         OPTION          =SIMP(statut='f',typ='TXM',max='**',defaut="ELNO",
+                               into=("SIEF_ELNO_ELGA","VARI_ELNO_ELGA","EFGE_ELNO_CART","ELNO","SANS") ),
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
+           regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
+                   EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+           ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',
+           into=("DEPL","SIEF_ELGA","VARI_ELGA","ACCE","VITE","VARI_NON_LOCAL","LANL_ELGA")),
+         ),
+         OBSERVATION     =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO','MAILLE'),
+                   PRESENT_PRESENT('MAILLE','POINT'),),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+
+into=("DEPL","VITE","ACCE","SIEF_ELGA","VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU") ),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),
+           LIST_ARCH       =SIMP(statut='f',typ=listis),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PAS_OBSE        =SIMP(statut='f',typ='I'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           POINT           =SIMP(statut='f',typ='I',max='**'),
+         ),
+#-------------------------------------------------------------------
+         MODELE_NON_LOCAL=SIMP(statut='f',typ=(modele) ),
+         b_non_local = BLOC ( condition = "MODELE_NON_LOCAL != None",
+                              fr="Données spécifiques au modèle non local",
+           SOLV_NON_LOCAL  =FACT(statut='f',min=1,max=1,
+             METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+             b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+               RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+             ),
+             b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+               RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             ),
+             b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                    fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+               NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+               STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+             ),
+             b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+               PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+               NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+               RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+               NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+             ),
+             EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           LAGR_NON_LOCAL  =FACT(statut='f',max=1,
+             ITER_DUAL_MAXI  =SIMP(statut='f',typ='I',defaut= 50),
+             RESI_DUAL_ABSO  =SIMP(statut='o',typ='R'),
+             RESI_PRIM_ABSO  =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='f',typ='R',defaut= 1000.),
+             ITER_PRIM_MAXI  =SIMP(statut='f',typ='I',defaut= 10),
+           ),
+         ),
+#-------------------------------------------------------------------
+         PARM_THETA      =SIMP(statut='f',typ='R'
+                              ,defaut= 1. ),
+#-------------------------------------------------------------------
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=tabl_intsp,
+                     fr="Calcul de la réponse par recombinaison modale d'une structure linéaire pour une excitation aléatoire",
+                     docu="U4.53.23-c",reentrant='n',
+         BASE_ELAS_FLUI  =SIMP(statut='o',typ=melasflu ),
+         EXCIT           =FACT(statut='o',min=00,max=01,
+           INTE_SPEC_GENE  =SIMP(statut='o',typ=tabl_intsp ),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
+                     fr="Réponse dynamique transitoire en coordonnées généralisées par recombinaison modale",
+                     docu="U4.53.21-e",reentrant='f',
+      regles=(EXCLUS('AMOR_REDUIT','AMOR_GENE','LIST_AMOR'), 
+              PRESENT_ABSENT('MODE_STAT','MODE_CORR'),),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="EULER",
+                               into=("EULER","NEWMARK","DEVOGE","ADAPT","ITMI") ),
+         MASS_GENE       =SIMP(statut='o',typ=matr_asse_gene_r ),
+         RIGI_GENE       =SIMP(statut='o',typ=matr_asse_gene_r ),
+         AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r ),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         LIST_AMOR       =SIMP(statut='f',typ=listr8 ),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc) ),
+         MODE_CORR       =SIMP(statut='f',typ=(mult_elas,mode_stat_acce) ,),
+         
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('RESU_GENE','DEPL_INIT_GENE'),
+                   EXCLUS('RESU_GENE','VITE_INIT_GENE'),),
+           RESU_GENE       =SIMP(statut='f',typ=tran_gene ),
+           b_resu_gene     =BLOC(condition = "RESU_GENE != None",
+             INST_INIT       =SIMP(statut='f',typ='R' ),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           ),
+           DEPL_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+           VITE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+         ),
+         INCREMENT       =FACT(statut='o',min=01,max='**',
+           INST_INIT       =SIMP(statut='f',typ='R' ),
+           INST_FIN        =SIMP(statut='o',typ='R' ),
+           PAS             =SIMP(statut='f',typ='R' ),
+           VERI_PAS        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           VITE_MIN        =SIMP(statut='f',typ='TXM',defaut="NORM",into=("MAXI","NORM") ),
+           COEF_MULT_PAS   =SIMP(statut='f',typ='R',defaut= 1.1 ),
+           COEF_DIVI_PAS   =SIMP(statut='f',typ='R',defaut= 1.3333334 ),
+           PAS_LIMI_RELA   =SIMP(statut='f',typ='R',defaut= 1.0E-6 ),
+           NB_POIN_PERIODE =SIMP(statut='f',typ='I',defaut= 50 ),
+           NMAX_ITER_PAS   =SIMP(statut='f',typ='I',defaut= 16 ),
+         ),
+         ARCHIVAGE       =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH'),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+         ),
+         
+         NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 20 ),
+         RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         LAMBDA          =SIMP(statut='f',typ='R',defaut= 10. ),
+         
+         EXCIT           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('FONC_MULT','COEF_MULT','ACCE'),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
+                   PRESENT_PRESENT('D_FONC_DT','D_FONC_DT2'),
+                   PRESENT_ABSENT('NUME_MODE','VECT_GENE','COEF_MULT'),
+                   PRESENT_ABSENT('MULT_APPUI','CORR_STAT'),
+                   PRESENT_ABSENT('MULT_APPUI','COEF_MULT'),
+                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+           VECT_GENE       =SIMP(statut='f',typ=vect_asse_gene ),
+           NUME_MODE       =SIMP(statut='f',typ='I' ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           ACCE            =SIMP(statut='f',typ=fonction ),
+           VITE            =SIMP(statut='f',typ=fonction ),
+           DEPL            =SIMP(statut='f',typ=fonction ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           b_loca          =BLOC(condition= "DIRECTION != None",
+             regles=(EXCLUS('NOEUD','GROUP_NO'),),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           ),
+           CORR_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           D_FONC_DT       =SIMP(statut='f',typ=fonction ),
+           D_FONC_DT2      =SIMP(statut='f',typ=fonction ),
+         ),
+         CHOC            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1' ),
+                   PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
+           INTITULE        =SIMP(statut='f',typ='TXM' ),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           OBSTACLE        =SIMP(statut='o',typ=obstacle ),
+           ORIG_OBST       =SIMP(statut='f',typ='R',min=3,max=3),
+           NORM_OBST       =SIMP(statut='o',typ='R',min=3,max=3),
+           ANGL_VRIL       =SIMP(statut='f',typ='R' ),
+           JEU             =SIMP(statut='f',typ='R',defaut= 1. ),
+           DIST_1          =SIMP(statut='f',typ='R',val_min=0.E+0 ),
+           DIST_2          =SIMP(statut='f',typ='R',val_min=0.E+0 ),
+           SOUS_STRUC_1    =SIMP(statut='f',typ='TXM' ),
+           SOUS_STRUC_2    =SIMP(statut='f',typ='TXM' ),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL"),
+           RIGI_NOR        =SIMP(statut='f',typ='R' ),
+           AMOR_NOR        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           RIGI_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           AMOR_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+
+           LAME_FLUIDE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           b_lame          =BLOC(condition="LAME_FLUIDE=='OUI'",
+               ALPHA           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               BETA            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               CHI             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               DELTA           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+         ),
+         VERI_CHOC       =FACT(statut='f',min=01,max='**',
+           STOP_CRITERE    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 0.5 ),
+         ),
+         FLAMBAGE        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           OBSTACLE        =SIMP(statut='o',typ=obstacle ),
+           ORIG_OBST       =SIMP(statut='f',typ='R',max='**'),
+           NORM_OBST       =SIMP(statut='o',typ='R',max='**'),
+           ANGL_VRIL       =SIMP(statut='f',typ='R' ),
+           JEU             =SIMP(statut='f',typ='R',defaut= 1. ),
+           DIST_1          =SIMP(statut='f',typ='R' ),
+           DIST_2          =SIMP(statut='f',typ='R' ),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL"),
+           RIGI_NOR        =SIMP(statut='f',typ='R' ),
+           FNOR_CRIT       =SIMP(statut='f',typ='R' ),
+           FNOR_POST_FL    =SIMP(statut='f',typ='R' ),
+           RIGI_NOR_POST_FL=SIMP(statut='f',typ='R' ),
+         ),
+         ANTI_SISM       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+                   UN_PARMI('NOEUD_2','GROUP_NO_2'),
+                   PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           RIGI_K1         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           RIGI_K2         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SEUIL_FX        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           C               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           PUIS_ALPHA      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           DX_MAX          =SIMP(statut='f',typ='R',defaut= 1. ),
+         ),
+         RELA_EFFO_DEPL  =FACT(statut='f',min=01,max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=fonction ),
+         ),
+         RELA_TRANSIS    =FACT(statut='f',min=01,max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=fonction ),
+         ),
+         RELA_EFFO_VITE  =FACT(statut='f',min=01,max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=fonction ),
+         ),
+         b_itmi          =BLOC(condition = "METHODE=='ITMI'",
+                regles=(ENSEMBLE('BASE_ELAS_FLUI','NUME_VITE_FLUI'),),
+                BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu ),
+                NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+                ETAT_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                PREC_DUREE      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+                CHOC_FLUI       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                NB_MODE         =SIMP(statut='f',typ='I' ),
+                NB_MODE_FLUI    =SIMP(statut='f',typ='I' ),
+                NB_MODE_DIAG    =SIMP(statut='f',typ='I' ),
+                TS_REG_ETAB     =SIMP(statut='f',typ='R' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         IMPRESSION      =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('TOUT','NIVEAU'),),
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           NIVEAU          =SIMP(statut='f',typ='TXM',into=("DEPL_LOC","VITE_LOC","FORC_LOC","TAUX_CHOC") ),
+           INST_INIT       =SIMP(statut='f',typ='R' ),
+           INST_FIN        =SIMP(statut='f',typ='R' ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+ )  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,docu="U4.92.11-b",
+      regles=(UN_PARMI('TOUT','CO'),),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         CO              =SIMP(statut='f',typ=assd,max='**'),
+         TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut="SOMME",into=("SOMME","RESUME") ),
+         FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5"),
+         PREC_R          =SIMP(statut='f',typ='TXM',defaut="1.E-5"),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+EXEC_LOGICIEL=PROC(nom="EXEC_LOGICIEL",op= 183,fr="",docu="U7.00.01-a",
+         LOGICIEL        =SIMP(statut='f',typ='TXM' ),  
+         ARGUMENT        =FACT(statut='f',min=01,max='**',
+           NOM_PARA        =SIMP(statut='f',typ='TXM' ),  
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+#def extr_mode_prod(FILTRE_MODE,TITRE,IMPRESSION ):
+#  Sait-on faire  
+def extr_mode_prod(FILTRE_MODE,**args):
+  vale=FILTRE_MODE[0]['MODE']
+  if AsType(vale) == mode_meca   : return mode_meca
+  if AsType(vale) == mode_meca_c : return mode_meca_c
+  if AsType(vale) == mode_gene   : return mode_gene
+  raise AsException("type de concept resultat non prevu")
+
+EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod,
+               docu="U4.52.12-c",reentrant='n',
+         FILTRE_MODE     =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','NUME_MODE','NUME_MODE_EXCLU','FREQ_MIN','CRIT_EXTR',),),
+           MODE            =SIMP(statut='o',typ=(mode_meca,mode_meca_c,mode_gene ) ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+           NUME_MODE_EXCLU =SIMP(statut='f',typ='I',max='**'),
+           FREQ_MIN        =SIMP(statut='f',typ='R' ),
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN"
+                                  ,into=("MASS_EFFE_UN","MASS_GENE") ),
+           b_freq_min      =BLOC(condition = "FREQ_MIN != None",  
+             FREQ_MAX        =SIMP(statut='o',typ='R' ),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),
+           b_crit_extr     =BLOC(condition = "CRIT_EXTR != None",
+             SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),    
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           CUMUL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",into=("MASS_EFFE_UN","MASS_GENE") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 23/01/2002   AUTEUR CIBHHAB N.RAHNI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def extr_resu_prod(RESULTAT,**args):
+  if AsType(RESULTAT) == evol_elas    : return evol_elas
+  if AsType(RESULTAT) == evol_noli    : return evol_noli
+  if AsType(RESULTAT) == evol_ther    : return evol_ther
+  if AsType(RESULTAT) == dyna_trans   : return dyna_trans
+  if AsType(RESULTAT) == dyna_harmo   : return dyna_harmo
+  if AsType(RESULTAT) == acou_harmo   : return acou_harmo
+  if AsType(RESULTAT) == mode_meca    : return mode_meca
+  if AsType(RESULTAT) == mode_acou    : return mode_acou
+  if AsType(RESULTAT) == mode_stat :    return mode_stat
+  if AsType(mode_stat) == mode_stat_depl :    return mode_stat_depl
+  if AsType(mode_stat) == mode_stat_acce :    return mode_stat_acce
+  if AsType(mode_stat) == mode_stat_forc :    return mode_stat_forc
+  if AsType(RESULTAT) == mult_elas    : return mult_elas
+  if AsType(RESULTAT) == fourier_elas : return fourier_elas
+  raise AsException("type de concept resultat non prevu")
+
+EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,docu="U4.71.04-b1",reentrant='f',
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,acou_harmo,mode_meca,          
+                                               mode_acou,mode_stat_depl,mode_stat_acce,mode_stat_forc,evol_ther,evol_noli,   
+                                               mult_elas,fourier_elas ) ),
+
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
+           regles=(  UN_PARMI('NUME_ORDRE', 'INST', 'FREQ', 'NUME_MODE',
+                        'NOEUD_CMP', 'LIST_INST', 'LIST_FREQ', 'LIST_ORDRE',
+                        'NOM_CAS', 'LIST_ARCH', 'PAS_ARCH' ),
+                     EXCLUS( 'CHAM_EXCLU','NOM_CHAM' ),   ),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**'),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',max='**'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',into=("RELATIF","ABSOLU"),defaut="RELATIF"),
+           LIST_ARCH       =SIMP(statut='f',typ=listis),
+           PAS_ARCH        =SIMP(statut='f',typ='I'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8),
+           NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+           NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+           NOM_CAS         =SIMP(statut='f',typ='TXM'),
+                               ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def fact_grad_prod(MATR_ASSE,**args):
+  if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_depl_r
+  if AsType(MATR_ASSE) == matr_asse_temp_r : return matr_asse_temp_r
+  if AsType(MATR_ASSE) == matr_asse_pres_r : return matr_asse_pres_r
+  raise AsException("type de concept resultat non prevu")
+
+FACT_GRAD=OPER(nom="FACT_GRAD",op=85,sd_prod=fact_grad_prod,docu="U4.55.03-e",
+               fr="Préconditionnement pour résolution par gradient conjugué",
+               reentrant='n',
+         MATR_ASSE       =SIMP(statut='o',
+                               typ=(matr_asse_depl_r,matr_asse_temp_r,
+                                    matr_asse_pres_r) ),
+         PRE_COND        =SIMP(statut='f',typ='TXM',defaut="LDLT_INC",into=("LDLT_INC",) ),
+         NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),  
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+FACT_INTE_SPEC=OPER(nom="FACT_INTE_SPEC",op= 117,sd_prod=interspfact,
+                    fr="Factorisation d une matrice interspectrale hermitienne",
+                    docu="U4.36.04-e",reentrant='n',
+         regles=(ENSEMBLE('FREQ_FIN','NB_POIN'),),
+#  regle non indiquée dans la doc U         
+         INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
+         NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+         FREQ_INIT       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         FREQ_FIN        =SIMP(statut='f',typ='R' ),
+         NB_POIN         =SIMP(statut='f',typ='I',defaut= 0 ),
+         SUR_ECHAN       =SIMP(statut='f',typ='R',defaut= 1. ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def fact_ldlt_prod(MATR_ASSE,**args):
+  if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_depl_r
+  if AsType(MATR_ASSE) == matr_asse_depl_c : return matr_asse_depl_c
+  if AsType(MATR_ASSE) == matr_asse_temp_r : return matr_asse_temp_r
+  if AsType(MATR_ASSE) == matr_asse_temp_c : return matr_asse_temp_c
+  if AsType(MATR_ASSE) == matr_asse_pres_r : return matr_asse_pres_r
+  if AsType(MATR_ASSE) == matr_asse_pres_c : return matr_asse_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+FACT_LDLT=OPER(nom="FACT_LDLT",op=14,sd_prod=fact_ldlt_prod,fr="Factorisation en place ou hors place",
+               docu="U4.55.01-f",reentrant='f',
+         regles=(EXCLUS('BLOC_DEBUT','DDL_DEBUT'),
+                 EXCLUS('BLOC_FIN','DDL_FIN'),),
+         MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,
+                                               matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ),
+         STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         NPREC           =SIMP(statut='f',typ='I',defaut=8,val_min=0,),
+         PRE_COND        =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","DIAG") ),
+         BLOC_DEBUT      =SIMP(statut='f',typ='I',val_min=1,),
+         DDL_DEBUT       =SIMP(statut='f',typ='I',val_min=1,),
+         BLOC_FIN        =SIMP(statut='f',typ='I',val_min=1,),
+         DDL_FIN         =SIMP(statut='f',typ='I',val_min=1,),
+#
+         EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+#
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# NEW 5.3.23
+FERMER=PROC(nom="FERMER",op=  10,fr=" ",
+            docu="U4.12.02-a",
+         UNITE           =SIMP(statut='o',typ='I',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude",
+         docu="U4.11.02-f",
+         RETASSAGE       =SIMP(fr="provoque le retassage de la base GLOBALE",
+                               statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         PERFORMANCE     =SIMP(fr="provoque l'impression d'un résumé des mesures de temps ",
+                               statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+         INFO_RESU       =SIMP(fr="provoque l'impression des informations sur les structures de données",
+                               statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="MESSAGE"),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+FONC_FLUI_STRU=OPER(nom="FONC_FLUI_STRU",op= 169,sd_prod=fonction,
+                    docu="U4.35.02-c",reentrant='n',
+         TYPE_FLUI_STRU  =SIMP(statut='o',typ=(type_flui_stru) ),
+)  ;
+#& MODIF COMMANDE  DATE 17/09/2001   AUTEUR MCOURTOI M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+FORMULE = FORM( nom='FORMULE',op=-5,sd_prod=fonction,
+                fr="Définition d une fonction",reentrant = 'n',
+                regles=(UN_PARMI('REEL','ENTIER','COMPLEXE'),),
+                REEL = SIMP(typ = 'shell',max=1),
+                ENTIER = SIMP(typ = 'shell',max=1),
+                COMPLEXE = SIMP(typ = 'shell',max=1),
+) ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=tabl_fonc,
+                    fr="Génération de la fonction temporelle à partir d une matrice interspectrale factorisée",
+                    docu="U4.36.05-e",reentrant='n',
+         INTE_SPEC_FACT  =SIMP(statut='o',typ=interspfact ),
+         INIT_ALEA       =SIMP(statut='f',typ='I',defaut= 12312745 ),
+         NB_TIRAGE       =SIMP(statut='f',typ='I',defaut= 1 ),
+         NB_POIN         =SIMP(statut='f',typ='I' ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_CHARGE=PROC(nom="IMPR_CHARGE",op= 158,
+                 fr="Impression des charges mécaniques de type ddl imposés et relations linéaires entre les ddl",
+                 docu="U7.04.31-c",
+         FICHIER         =SIMP(statut='f',typ='TXM' ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",) ),
+         VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+         CHARGE          =SIMP(statut='o',typ=char_meca,max='**', ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_CLASSI=PROC(nom="IMPR_CLASSI",op= 114,docu="U7.04.21-a",
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','FREQ','NUME_MODE','LIST_FREQ',
+                        'LIST_ORDRE' ),),
+         UNITE_CLASSI    =SIMP(statut='o',typ='I' ),
+         MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+         b_prec_crit     =BLOC(condition = "LIST_FREQ != None or FREQ != None",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
+                                   into=("RELATIF","ABSOLU") ),
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO', ),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         AMOR            =SIMP(statut='o',typ='R',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+IMPR_CO=PROC(nom="IMPR_CO",op=17,docu="U4.91.11-f",
+             fr="Impression du contenu d un concept utilisateur (pour développeur)",
+         regles=(UN_PARMI('CO','CHAINE', ),),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         NIVEAU          =SIMP(statut='f',typ='I',defaut=2,into=(0,1,2) ),
+         ATTRIBUT        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","OUI") ),
+         CONTENU         =SIMP(statut='f',typ='TXM',defaut="OUI",into=("NON","OUI") ),
+         BASE            =SIMP(statut='f',typ='TXM',defaut="G",into=("","G","V","L") ),
+         CO              =SIMP(statut='f',typ=assd,max='**'),
+         CHAINE          =SIMP(statut='f',typ='TXM'),
+         POSITION        =SIMP(statut='f',typ='I',defaut=1),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE MCOURTOI M.COURTOIS
+IMPR_COURBE=PROC(nom="IMPR_COURBE",op= 141,fr="Impression, sur fichiers",
+                 docu="U4.33.01-d1",
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         FORMAT          =SIMP(statut='f',typ='TXM',position='global'
+                              ,into=("AGRAF","EXCEL","POSTSCRIPT","RESULTAT","COMMANDE","SEISME") ),
+         b_agraf_post =BLOC(condition = "(FORMAT=='AGRAF') or (FORMAT=='POSTSCRIPT')",fr="Mots-clés communs AGRAF et POSTCRIPT",
+           BORNE_X         =SIMP(statut='f',typ='R',min=2,max=2,fr="Intervalles de variation des abcisses"),
+           ECHELLE_X       =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),fr="Type d'échelle pour les abcisses" ),
+           BORNE_Y         =SIMP(statut='f',typ='R',min=2,max=2,fr="Intervalles de variation des ordonnées"),
+           ECHELLE_Y       =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),fr="Type d'échelle pour les ordonnées" ),
+         ),
+         b_agraf =BLOC(condition = "(FORMAT=='AGRAF')",fr="Mots-clés propres à AGRAF",
+           TITRE_GRAPHIQUE =SIMP(statut='f',typ='TXM',fr="Titre associé au graphique" ),
+           COMMENTAIRE     =SIMP(statut='f',typ='TXM',max='**',fr="Commentaires associés au graphique"),
+           LEGENDE_X       =SIMP(statut='f',typ='TXM',fr="Légende associée à l axe des abcisses" ),
+           LEGENDE_Y       =SIMP(statut='f',typ='TXM',fr="Légende associée à l axe des ordonnées" ),
+           FREQ_GRILLE_X   =SIMP(statut='f',typ='I',defaut= 0,fr="Fréquence de tracage du quadrillage vertical" ),
+           FREQ_GRILLE_Y   =SIMP(statut='f',typ='I',defaut= 0,fr="Fréquence de tracage du quadrillage horizontal" ),
+         ), 
+         b_excel = BLOC(condition = "(FORMAT=='EXCEL')",fr="Mots-clés propres au format Excel",
+           BORNE_X         =SIMP(statut='f',typ='R',min=2,max=2,fr="Intervalles de variation des abcisses"),
+           BORNE_Y         =SIMP(statut='f',typ='R',min=2,max=2,fr="Intervalles de variation des ordonnées"),
+         ),
+         b_post = BLOC (  condition = "(FORMAT=='POSTSCRIPT')",fr="Mots-clés propres à POSTCRIPT",
+           TITRE           =SIMP(statut='f',typ='TXM',fr="Titre associé au graphique" ),
+           LABEL_X         =SIMP(statut='f',typ='TXM',fr="Légende associée à l axe des abcisses" ),
+           LABEL_Y         =SIMP(statut='f',typ='TXM',fr="Légende associée à l axe des ordonnées" ),
+           SORTIE          =SIMP(statut='f',typ='TXM',defaut="COULEUR",into=("MONOCHROME","COULEUR"),fr="Type d impression" ),
+           DATE            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),fr="Impression de la date" ),
+           GRILLE          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),fr="Impression du quadrillage" ),
+           AXE_ZERO_X      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),fr="Impression de l axe x égal zéro" ),
+           AXE_ZERO_Y      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),fr="Impression de l axe y égal zéro" ),
+           PRESENTATION    =SIMP(statut='f',typ='TXM',defaut="PAYSAGE",into=("PAYSAGE","PORTRAIT"),
+                                 fr="Disposition du graphique sur la feuille" ),
+           FENETRE         =SIMP(statut='f',typ='TXM',defaut="RECTANGLE",into=("CARREE","RECTANGLE"),
+                                 fr="Forme de la fenetre contenant le graphique" ),
+         ),  
+         COURBE          =FACT(statut='o',min=01,max='**',fr="Définition de la courbe à tracer",
+           regles=(UN_PARMI('FONCTION','LIST_RESU','TABLE','FONC_X','RESU_GENE'),),
+           FONCTION        =SIMP(statut='f',typ=(fonction, fonction_c),
+                                 fr="Fonction réelle ou complexe", ),
+           LIST_RESU       =SIMP(statut='f',typ=listr8,
+                                 fr="Liste des ordonnees d une fonction réelle définie par deux listes", ),
+#  creer le type table            
+           TABLE           =SIMP(statut='f',typ=table,
+                                 fr="Nom de la table dont 2 colonnes définissent la fonction",),
+           FONC_X          =SIMP(statut='f',typ=fonction,
+                                 fr="Fonction abscisses d une fonction paramétrique",),
+           RESU_GENE       =SIMP(statut='f',typ=tran_gene, ), 
+           b_fonction      =BLOC(condition = "FONCTION != None",                          
+             LIST_PARA       =SIMP(statut='f',typ=listr8 ),
+           ),   
+           b_fonction_c  =BLOC(condition = "AsType(FONCTION) == fonction_c",
+                                 fr="Fonction complexe définie par le mot-clé fonction",
+             PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),           
+           ),
+           b_list_resu     =BLOC(condition = "LIST_RESU != None",                                
+             LIST_PARA       =SIMP(statut='o',typ=listr8 ),
+           ),  
+           b_table         =BLOC(condition = "TABLE != None",                                         
+             PARA_X          =SIMP(statut='o',typ='TXM',
+                                   fr="Paramètre de la table associé aux abcisses de la fonction à tracer" ),
+             PARA_Y          =SIMP(statut='o',typ='TXM',
+                                   fr="Paramètre de la table associé aux ordonnées de la fonction à tracer" ),        
+           ), 
+           b_fonc_x        =BLOC(condition = "FONC_X != None",                                          
+             FONC_Y          =SIMP(statut='o',typ=fonction,fr="Fonction ordonnées d une fonction paramétrique" ),
+             PARA            =SIMP(statut='f',typ='TXM',defaut="FONC_X",into=("FONC_X","FONC_Y"),
+                                   fr="Permutation des roles des deux fonctions" ),
+             LIST_PARA       =SIMP(statut='f',typ=listr8 ),                
+           ),
+           b_resu_gene     =BLOC(condition = "RESU_GENE != None",                                
+             regles=(UN_PARMI('NOEUD_CHOC','GROUP_NO_CHOC'),),                      
+             NOEUD_CHOC      =SIMP(statut='f',typ=no),
+             GROUP_NO_CHOC   =SIMP(statut='f',typ=grno),
+             PARA_X          =SIMP(statut='o',typ='TXM'),
+             PARA_Y          =SIMP(statut='o',typ='TXM'),
+             LIST_PARA       =SIMP(statut='f',typ=listr8 ),   
+             SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+             INTITULE        =SIMP(statut='f',typ='TXM' ),               
+           ), 
+                 
+               
+           LEGENDE         =SIMP(statut='f',typ='TXM',fr="Légende associée à la courbe" ),
+           STYLE           =SIMP(statut='f',typ='TXM',defaut="LIGNE",fr="Style de la ligne représentant la courbe",
+                                 into=("LIGNE","POINTILLE","POINT","POINT_RELIE") ),
+           COULEUR         =SIMP(statut='f',typ='TXM',fr="Couleur associée à la courbe",
+                                 into=("NOIR","ROUGE","VERT_FONCE","BLEU",
+                                       "MAGENTA","CYAN","VERT","SIENNE","ORANGE",
+                                       "POURPRE","JAUNE","DAIM","TURQUOISE","VIOLET",
+                                       "BRUN","CORAIL","MARRON","MAUVE","MARRON_CLAIR") ),
+           MARQUEUR        =SIMP(statut='f',typ='TXM',fr="Type du marqueur associé à la courbe",
+                                 into=("POINT_F","CARRE_F","TRIANGLE_F",
+                                       "LOSANGE_F","ETOILE_F","FUSEE_F","POINT",
+                                       "CARRE","TRIANGLE","LOSANGE","ETOILE","FUSEE",
+                                       "PLUS","X","CERCLE","CERCLE_P","CARRE_P",
+                                       "LOSANGE_P","CERCLE_P_X","LOSANGE_P_X",
+                                       "CERCLE_X","CARRE_X","LOSANGE_X") ),
+            b_agraf =BLOC(condition = "(FORMAT=='AGRAF')",fr="Mots-clés propres à AGRAF",
+              TRI             =SIMP(statut='f',typ='TXM',defaut="N",
+                                    fr="Choix du tri effectué sur les abcisses ou sur les ordonnées",
+                                    into=("N","X","Y","XY","YX") ),
+              FREQ_MARQUEUR   =SIMP(statut='f',typ='I',defaut= 0,
+                                    fr="Fréquence d impression du marqueur associé à la courbe", ),          
+            ), 
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 25/01/2002   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-a",
+                    fr="Imprime le fichier de configuration de HOMARD.",
+                    ang="Writes the configuration file for HOMARD.",
+#
+# 1. Le niveau d'information
+#
+         INFO           = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+#
+# 2. LE REPERTOIRE OU AURA LIEU LE CALCUL HOMARD
+#
+         REP             =SIMP(statut='f',typ='TXM'),  
+#
+# 3. Langue des messages issus de HOMARD
+#
+         LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
+                               into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
+                           fr="Langue des messages issus de HOMARD.",
+                           ang="Language for HOMARD messages." ),
+#
+# 4. L'UNITE LOGIQUE D'ECRITURE DU FICHIER DE CONFIGURATION HOMARD
+#
+         UNITE           =SIMP(statut='f',typ='I',defaut= 71 ),  
+#
+# 5. LE TYPE DE TRAITEMENT :
+#
+         TRAITEMENT      =FACT(statut='o',min=01,max=01,
+#
+# 5.1. QUATRE CHOIX EXCLUSIFS :
+#
+# 5.1.1.
+#      A. ADAPTATION PAR UN INDICATEUR D'ERREUR, AVEC TROIS VARIANTES :
+#         . RAFFINEMENT ET DERAFFINEMENT
+#         . RAFFINEMENT SEUL
+#         . DERAFFINEMENT SEUL
+#      B. ADAPTATION UNIFORME, AVEC DEUX VARIANTES :
+#         . RAFFINEMENT SEUL
+#         . DERAFFINEMENT SEUL
+#         . RIEN : LE MAILLAGE EST LE MEME A LA SORTIE ET A L'ENTREE
+#      C. INFORMATION SUR UN MAILLAGE
+#      D. MISE A JOUR DE SOLUTIONS
+#
+           regles=( UN_PARMI('ADAPTATION','UNIFORME','INFORMATION','MAJSOLUTION'),),
+           ADAPTATION      =SIMP(statut='f',typ='TXM',     
+                                 fr="Adaptation libre",
+                                 ang="Free adaptation",
+                                 into=("RAFFINEMENT","DERAFFINEMENT","RAFF_DERA") ),
+           UNIFORME        =SIMP(statut='f',typ='TXM',     
+                                 fr="Adaptation uniforme",
+                                 ang="Uniforme adaptation",
+                                 into=("RAFFINEMENT","DERAFFINEMENT","RIEN") ),
+           INFORMATION     =SIMP(statut='f',typ='TXM',
+                                 fr="Adaptation libre",
+                                 ang="Free adaptation",
+                                 into=("OUI",) ),
+           MAJSOLUTION     =SIMP(statut='f',typ='TXM',
+                                 fr="Mise à jour de solutions",
+                                 ang="Solution updating",
+                                 into=("OUI",) ),
+#
+# 5.1.2. LES CONTRAINTES :
+#
+# 5.1.2.1. POUR DE L'ADAPTATION LIBRE, IL FAUT :
+#      A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
+#      B. LE NOM MED DU MAILLAGE D'ENTREE
+#      C. LE NOM MED DE L'INDICATEUR D'ERREUR
+#      D. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
+#      E. LA MISE A JOUR DE SOLUTION
+#      F. LE NOM MED DU MAILLAGE DE SORTIE
+#      REMARQUE : IL FAUT DES CRITERES, MAIS ON NE SAIT PAS LESQUELS
+#
+# 5.1.2.2. POUR DE L'ADAPTATION UNIFORME
+#          IL FAUT :
+#      A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
+#      B. LE NOM MED DU MAILLAGE DE SORTIE
+#          IL NE FAUT PAS :
+#      A. LE NOM MED DE L'INDICATEUR D'ERREUR
+#      B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR
+#      C. LES CRITERES
+#      REMARQUE : A L'ITERATION 0, OU AUX ITERATIONS SUIVANTES SI MAJ DE SOLUTION,
+#                 IL FAUT LE NOM MED DU MAILLAGE D'ENTREE
+#
+# 5.1.2.3. POUR DE LA MISE A JOUR DE SOLUTION :
+#          IL FAUT :
+#      A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
+#      B. LE NOM MED DU MAILLAGE D'ENTREE
+#          IL NE FAUT PAS :
+#      A. LE NOM MED DE L'INDICATEUR D'ERREUR
+#      B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR
+#      C. LES CRITERES
+#
+#
+# 5.1.2.4. POUR DE L'INFORMATION :
+#          IL FAUT :
+#      A. LE NOM MED DU MAILLAGE D'ENTREE
+#          IL NE FAUT PAS :
+#      A. LE NOM MED DE L'INDICATEUR D'ERREUR
+#      B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR
+#      C. LES CRITERES
+#      D. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
+#      E. LA MISE A JOUR DE SOLUTION
+#
+           b_maillage_initial =BLOC(condition = "( INFORMATION != None ) or ( ADAPTATION != None ) or "+
+                                                   "( MAJSOLUTION != None ) ",
+                           fr="Nom MED du maillage en entrée",
+                           ang="MED name of the in-mesh",
+                           NOM_MED_MAILLAGE_N   =SIMP(statut='o',typ='TXM',),
+                           ) ,
+#
+           b_maillage_initial_uniforme =BLOC(condition = "( UNIFORME != None ) ",
+                           fr="Nom MED du maillage en entrée",
+                           ang="MED name of the in-mesh",
+                           NOM_MED_MAILLAGE_N   =SIMP(statut='f',typ='TXM',),
+                           ) ,
+#
+           b_iteration_maj_champ =BLOC(condition = "( UNIFORME != None ) or ( ADAPTATION != None ) or "+
+                                                   "( MAJSOLUTION != None ) ",
+                           fr="Nom MED du maillage en sortie, numero d'iteration et mise à jour de champs",
+                           ang="MED name of the out-mesh, iteration rank and field updating",
+                           NITER                =SIMP(statut='o',typ='I',
+                           fr="Numéro d'itération.",
+                           ang="Iteration #." ),
+                           NOM_MED_MAILLAGE_NP1 =SIMP(statut='o',typ='TXM'),
+                           MAJ_CHAM             =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                           ) ,
+#
+           b_indicateur_d_erreur  =BLOC(condition = "ADAPTATION != None",
+                           fr="Indicateur d'erreur",
+                           ang="Error indicator",
+                           NOM_MED_INDICA  =SIMP(statut='o',typ='TXM',
+                           fr="Nom MED de l'indicateur d'erreur.",
+                           ang="MED name of error indicator.",),
+                           NOM_CMP_INDICA  =SIMP(statut='o',typ='TXM',
+                           fr="Nom de la composante de l'indicateur d'erreur retenue.",
+                           ang="Name of the selected component of the error indicator.",),
+                           NUMDT_INDICA  =SIMP(statut='o',typ='I',
+                           fr="Numero du pas de temps de l'indicateur.",
+                           ang="Time step # of the error indicator.",),
+                           NUMORD_INDICA  =SIMP(statut='o',typ='I',
+                           fr="Numero d'ordre de l'indicateur.",
+                           ang="Rank # of the error indicator.",),
+                           ) ,
+#
+           b_critere_de_raffinement =BLOC( condition = "( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'RAFFINEMENT' )" ,
+                           fr="Critère de raffinement.",
+                           ang="Refinement threshold.",
+                           regles=(UN_PARMI ( 'CRIT_RAFF_ABS', 'CRIT_RAFF_REL', 'CRIT_RAFF_PE' ),),
+                           CRIT_RAFF_ABS   =SIMP(statut='f',typ='R',
+                                                 fr="Critère absolu",
+                                                 ang="Absolute threshold"  ),
+                           CRIT_RAFF_REL   =SIMP(statut='f',typ='R',
+                                                 fr="Critère relatif",
+                                                 ang="Relative threshold" ),
+                           CRIT_RAFF_PE    =SIMP(statut='f',typ='R',
+                                                 fr="Pourcentage d'éléments",
+                                                 ang="Percentage of elements" ),
+                           ) ,
+#
+           b_critere_de_deraffinement =BLOC ( condition = "( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'DERAFFINEMENT' )" ,
+                           fr="Critère de déraffinement.",
+                           ang="Unrefinement threshold.",
+                           regles=(UN_PARMI ( 'CRIT_DERA_ABS', 'CRIT_DERA_REL', 'CRIT_DERA_PE' ),),
+                           CRIT_DERA_ABS   =SIMP(statut='f',typ='R' ,
+                                                 fr="Critère absolu",
+                                                 ang="Absolute threshold" ),
+                           CRIT_DERA_REL   =SIMP(statut='f',typ='R',
+                                                 fr="Critère relatif",
+                                                 ang="Relative threshold" ),
+                           CRIT_DERA_PE    =SIMP(statut='f',typ='R',
+                                                 fr="Pourcentage d'éléments",
+                                                 ang="Percentage of elements" ),
+                           ) ,
+#
+           b_niveau_maximum =BLOC ( condition = " ( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'RAFFINEMENT' ) or "+
+                                                " ( UNIFORME == 'RAFFINEMENT' )" ,
+                             fr="Niveau maximum de profondeur de raffinement",
+                             ang="Maximum level for refinement",
+                             NIVE_MAX        =SIMP(statut='f',typ='I' ),
+                           ) ,
+#
+           b_niveau_minimum =BLOC ( condition = " ( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'DERAFFINEMENT' ) or"+
+                                                " ( UNIFORME == 'DERAFFINEMENT' )" ,
+                             fr="Niveau minimum de déraffinement",
+                             ang="Minimum level for unrefinement",
+                             NIVE_MIN        =SIMP(statut='f',typ='I' ),
+                           ) ,
+#
+         ),
+#
+# 6. L'ANALYSE DU MAILLAGE
+#
+         ANALYSE         =FACT(statut='f',min=01,max=01,
+                               fr="Analyse du maillage.",
+                               ang="Mesh analysis.",
+#
+# 6.1. CHOIX NON EXCLUSIFS, AVEC DEUX VARIANTES (OUI/NON) :
+#    A. NOMBRE DES ELEMENTS
+#    B. QUALITE DES ELEMENTS
+#    C. INTERPENETRATION DES ELEMENTS
+#    D. CONNEXITE DU MAILLAGE
+#    E. TAILLE DES DIFFERENTS SOUS-DOMAINES
+#
+           regles=(AU_MOINS_UN('NOMBRE','QUALITE','INTERPENETRATION','CONNEXITE','TAILLE'),),
+#
+         NOMBRE          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                          fr="Nombre de noeuds et éléments du maillage",
+                          ang="Number of nodes and elements in the mesh" ),
+#
+         QUALITE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Qualité du maillage",
+                          ang="Mesh quality" ),
+#
+         INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Controle de la non interpénétration des éléments.",
+                          ang="Overlapping checking." ),
+#
+         CONNEXITE       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Connexité du maillage.",
+                          ang="Mesh connexity." ),
+#
+         TAILLE          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Tailles des sous-domaines du maillage.",
+                          ang="Sizes of mesh sub-domains." ),
+#
+         ),
+#
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
+               fr="Calcul du dommage subi par une structure soumise à une sollicitation de type aléatoire",
+               docu="U4.91.02-c",
+         GENE            =FACT(statut='o',min=01,max='**',
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                          'LIST_INST','LIST_FREQ','TOUT_MODE','TOUT_INST','LIST_ORDRE'),
+                   EXCLUS('TOUT_MODE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                          'LIST_INST','LIST_FREQ','TOUT_ORDRE','TOUT_INST','LIST_ORDRE'),
+                   EXCLUS('TOUT_INST','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                          'LIST_INST','LIST_FREQ','TOUT_ORDRE','LIST_ORDRE'),
+                   EXCLUS('TOUT_CMP_GENE','NUME_CMP_GENE'),
+                   EXCLUS('TOUT_CHAM','NOM_CHAM'),
+                   EXCLUS('TOUT_PARA','NOM_PARA'),),
+#  faut-il faire des blocs selon le type de RESU_GENE                   
+           RESU_GENE       =SIMP(statut='o',typ=(vect_asse_gene, tran_gene, mode_gene, harm_gene)),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",into=("RESULTAT",) ),
+           FICHIER         =SIMP(statut='f',typ='TXM' ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+           TOUT_MODE       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ),
+           TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+           b_prec_crit     =BLOC(condition = "LIST_FREQ != None or FREQ != None",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
+                                   into=("RELATIF","ABSOLU") ),
+           ),
+           TOUT_CMP_GENE   =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NUME_CMP_GENE   =SIMP(statut='f',typ='I',max='**'),
+           TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',max='**'),
+           TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           INFO_CMP_GENE   =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           INFO_GENE       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,docu="U4.91.21-f",
+                 fr="Impression de caractéristiques d'objets JEVEUX (pour développeur)",
+         ENTITE          =SIMP(fr="choix de l'observation",statut='o',typ='TXM',
+                               into=("DISQUE","MEMOIRE","REPERTOIRE",    
+                                     "OBJET","ATTRIBUT","SYSTEME") ),
+         b_objet      =BLOC(condition = "(ENTITE=='OBJET')",
+            NOMOBJ          =SIMP(fr="nom d'objet",statut='f',typ='TXM' ),  
+            NUMOC           =SIMP(fr="numéro d objet de collection",statut='f',typ='I' ),  
+            NOMOC           =SIMP(fr="nom d'objet de collection",statut='f',typ='TXM' ),  
+         ),
+         b_attribut   =BLOC(condition = "(ENTITE=='ATTRIBUT')",
+            NOMOBJ          =SIMP(fr="nom de collection",statut='f',typ='TXM' ),  
+            NOMATR          =SIMP(fr="nom d attribut de collection",statut='f',typ='TXM',
+                                  into=('$$DESO','$$IADD','$$IADM','$$NOM','$$LONG',
+                                      '$$LONO','$$LUTI','$$NUM') ),
+         ),
+         b_systeme    =BLOC(condition = "(ENTITE=='SYSTEME')",
+            CLASSE          =SIMP(statut='o',typ='TXM',into=('G','V','L') ),  
+            NOMATR          =SIMP(fr="nom d attribut systeme",statut='f',typ='TXM',   
+                                  into=('$$CARA','$$IADD','$$GENR','$$TYPE','$$ETAT',
+                                      '$$DOCU','$$ORIG','$$RNOM','$$LTYP','$$LONG',
+                                      '$$LONO','$$DATE','$$LUTI','$$HCOD','$$INDX',
+                                      '$$TLEC','$$TECR','$$IADM','$$ACCE') ),
+         ),
+         b_repertoire =BLOC(condition = "(ENTITE=='REPERTOIRE')",
+            CLASSE          =SIMP(statut='f',typ='TXM',into=('G','V','L',' '),defaut=' '),  
+         ),
+         b_disque     =BLOC(condition = "(ENTITE=='DISQUE')",
+            CLASSE          =SIMP(statut='f',typ='TXM' ,into=('G','V','L',' '),defaut=' '),  
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           NOM             =SIMP(statut='f',typ='TXM' ),  
+           UNITE           =SIMP(statut='f',typ='I'),  
+         ),
+         COMMENTAIRE     =SIMP(statut='f',typ='TXM' ),  
+)  ;
+#& MODIF COMMANDE  DATE 19/12/2001   AUTEUR CIBHHPD D.NUNEZ 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
+                    docu="U7.04.33-c",
+         MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+         FICHIER         =SIMP(statut='f',typ='TXM' ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
+                               into=("MISS_3D","IDEAS","CADYRO","PLEXUS") ),
+         b_ideas         =BLOC(condition = "FORMAT == 'PLEXUS'",
+           VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+         ),                      
+         b_plexus         =BLOC(condition = "FORMAT == 'IDEAS'",
+           VERSION          =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+         ),             
+         b_miss_3d       =BLOC(condition = "FORMAT == 'MISS_3D'",
+           UNITE           =SIMP(statut='f',typ='I',defaut= 26 ),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           GROUP_MA_INTERF =SIMP(statut='o',typ=grma,max='**'),
+#  Ces trois mots cles sont-ils dans le bon bloc et avec le bon statut        
+           GROUP_MA_FLU_STR=SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA_FLU_SOL=SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA_SOL_SOL=SIMP(statut='f',typ=grma,max='**'),
+           IMPR_MODE_MECA  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           IMPR_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         b_cadyro        =BLOC(condition = "FORMAT == 'CADYRO'",
+           SQUELETTE       =SIMP(statut='f',typ=squelette ),
+           UNITE_MODE_MECA =SIMP(statut='f',typ='I',defaut= 26 ),
+           UNITE_MODE_STAT =SIMP(statut='f',typ='I',defaut= 27 ),
+           UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut= 28 ),
+           IMPR_MODE_MECA  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           IMPR_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
+                  fr="Impression des matrices élémentaires et des matrices assemblées",
+                  docu="U7.04.32-c",
+         regles=(AU_MOINS_UN('MATR_ELEM','MATR_ASSE'),),
+         
+         MATR_ELEM       =FACT(statut='f',min=01,max='**',
+           FICHIER         =SIMP(statut='f',typ='TXM' ),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
+                                 into=("IDEAS","RESULTAT") ),
+           b_format      =BLOC(condition = "FORMAT == 'IDEAS'",
+             VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+           ),
+#  créer les types matr_elem  et vect_elem        
+           MATRICE         =SIMP(statut='o',typ=(matr_elem, vect_elem)),
+#  Quelle regle pour TOUT, NOEUD, GROUP_NO, MAILLE, GROUP_MA           
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           GRAIN           =SIMP(statut='f',typ='TXM',defaut="VALEUR",
+                                 into=("VALEUR","NOEUD","MAILLE") ),
+           NB_CHIFFRE      =SIMP(statut='f',typ='I',defaut= 4 ),
+         ),
+         MATR_ASSE       =FACT(statut='f',min=01,max='**',
+           FICHIER         =SIMP(statut='f',typ='TXM' ),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
+                                 into=("IDEAS","RESULTAT") ),
+           VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+#  créer le type matr_elem           
+           MATRICE         =SIMP(statut='o',typ=matr_asse),
+#  Quelle regle pour TOUT, NOEUD, GROUP_NO, MAILLE, GROUP_MA                      
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="SOUS_MATRICE",
+                                 into=("SOUS_MATRICE","LIGNE","COLONNE") ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           GRAIN           =SIMP(statut='f',typ='TXM',defaut="VALEUR",
+                                 into=("VALEUR","NOEUD") ),
+           NB_CHIFFRE      =SIMP(statut='f',typ='I',defaut= 4 ),
+           VALE_ZERO       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
+                  docu="U7.04.11-c",
+         regles=(UN_PARMI('INST_INIT','FREQ_INIT'),
+                 PRESENT_PRESENT('INST_INIT','INST_FIN'),
+                 PRESENT_PRESENT('FREQ_INIT','FREQ_FIN'),),
+         MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+         EXCIT           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('FONC_MULT','COEF_MULT' ),),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+         ),
+         EXCIT_SOL       =FACT(statut='f',min=01,max='**',
+           DIRECTION       =SIMP(statut='o',typ='R',max='**'),
+           FONC_SIGNAL     =SIMP(statut='f',typ=fonction ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",
+                                 into=("DEPL","VITE","ACCE","FORC",) ),
+         ),
+         INST_INIT       =SIMP(statut='f',typ='R' ),
+         INST_FIN        =SIMP(statut='f',typ='R' ),
+         FREQ_INIT       =SIMP(statut='f',typ='R' ),
+         FREQ_FIN        =SIMP(statut='f',typ='R' ),
+         PAS             =SIMP(statut='o',typ='R' ),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 26 ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_RESU=PROC(nom="IMPR_RESU",op=39,docu="U4.91.01-f1",
+               fr="Impression du résultat d un calcul (différents formats)",
+         MODELE          =SIMP(statut='f',typ=modele),
+         RESU            =FACT(statut='o',min=01,max='**',
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
+                                 into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED","GMSH") ),
+
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),
+
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+
+           regles=(AU_MOINS_UN('CHAM_GD','RESULTAT','MAILLAGE'),
+                   EXCLUS('CHAM_GD','RESULTAT'),),
+           MAILLAGE        =SIMP(statut='f',typ=(maillage,squelette)),
+           INFO_MAILLAGE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CHAM_GD         =SIMP(statut='f',typ=cham_gd),
+           RESULTAT        =SIMP(statut='f',typ=resultat),# CO() sd a creer !!!
+
+           b_sensibilite   =BLOC(condition="RESULTAT != None",
+                                 fr="Définition des paramètres de sensibilité",
+                                 ang="Definition of sensitivity parameters",
+             SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
+                                   fr="Liste des paramètres de sensibilité.",
+                                   ang="List of sensitivity parameters"),),
+
+           b_extrac        =BLOC(condition="RESULTAT != None",
+                                 fr="extraction d un champ de grandeur",
+             regles=(EXCLUS('TOUT_CHAM','NOM_CHAM'),
+                     EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP',
+                            'LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS','ANGL'),),
+             TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',max='**'),
+
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+             NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis),
+             NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+             NOM_CAS         =SIMP(statut='f',typ='TXM',max='**'),
+             ANGL            =SIMP(statut='f',typ='R',max='**'),
+             FREQ            =SIMP(statut='f',typ='R',max='**'),
+             LIST_FREQ       =SIMP(statut='f',typ=listr8),
+             INST            =SIMP(statut='f',typ='R',max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8),
+
+             b_acce_reel     =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
+               PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+           ),
+
+           b_parametres    =BLOC(condition="""(RESULTAT != None)and(FORMAT == 'RESULTAT')""",
+             regles=(EXCLUS('TOUT_PARA','NOM_PARA'),),
+             INFO_RESU       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+             TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI","NON",) ),
+             NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),
+             FORM_TABL       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON","EXCEL") ),
+           ),
+
+           b_cmp=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and((FORMAT == 'RESULTAT')or(FORMAT == 'ENSIGHT'))""",
+                                 fr="sélection des composantes",
+             regles=(EXCLUS('TOUT_CMP','NOM_CMP'),),
+             TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           ),
+
+           b_gmsh=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and((FORMAT == 'GMSH'))""",
+                                 fr="sélection des composantes et des entités toplogiques",
+             NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ),
+
+           b_topologie=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and((FORMAT == 'RESULTAT')or(FORMAT == 'IDEAS'))""",
+                                   fr="sélection des entités toplogiques",
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ),
+
+           b_valeurs         =BLOC(condition="(FORMAT == 'RESULTAT')",
+                                   fr="sélection sur les valeurs",
+             VALE_MAX        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             VALE_MIN        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             BORNE_SUP       =SIMP(statut='f',typ='R'),
+             BORNE_INF       =SIMP(statut='f',typ='R'),
+             IMPR_COOR       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+             FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5"),
+           ),
+
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           FICHIER         =SIMP(statut='f',typ='TXM'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de valeurs propres dans un intervalle donné",
+                docu="U4.52.01-f",
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="DYNAMIQUE",into=("MODE_FLAMB","DYNAMIQUE"),
+                               fr="Type d analyse" ),
+         b_dynamique  =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+                            fr="Recheche du nombre de fréquences propres",
+             FREQ_MIN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ,fr="Borne inférieure de l intervalle" ),
+             FREQ_MAX        =SIMP(statut='o',typ='R',fr="Borne supérieure de l intervalle" ),
+         ),
+         b_mode_flamb =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+                            fr="Recherche du nombre de charges critiques",
+             CHAR_CRIT_MIN   =SIMP(statut='o',typ='R',fr="Borne inférieure de l intervalle" ),
+             CHAR_CRIT_MAX   =SIMP(statut='o',typ='R',fr="Borne supérieure de l intervalle" ),
+         ),
+         NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8 ),
+         NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+         SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+IMPR_TABLE=PROC(nom="IMPR_TABLE",op=155,docu="U4.91.03-c1",
+                fr="Impression d un concept de type table",
+         TABLE           =SIMP(statut='o',typ=table),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT", ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="EXCEL",
+                               into=("EXCEL","AGRAF","MOT_CLE","TABLEAU") ),
+         FILTRE          =FACT(statut='f',min=1,max='**',
+           NOM_PARA        =SIMP(statut='o',typ='TXM'),
+           CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",
+                                 into=("EQ","LT","GT","NE","LE","GE","VIDE",
+                                       "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI") ),
+           b_vale          =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+              regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+              VALE            =SIMP(statut='f',typ='R'),
+              VALE_I          =SIMP(statut='f',typ='I'),
+              VALE_C          =SIMP(statut='f',typ='C'),
+              VALE_K          =SIMP(statut='f',typ='TXM'),),
+
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         ),
+         TRI             =FACT(statut='f',min=1,max=1,
+           NOM_PARA        =SIMP(statut='o',typ='TXM',max='**'),
+           ORDRE           =SIMP(statut='f',typ='TXM',max='**',defaut="CROISSANT",
+                                 into=("CROISSANT","DECROISSANT") ),
+         ),
+         PAGINATION      =SIMP(statut='f',typ='TXM',max='**'),
+         FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5"),
+         FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",
+                                    into=("MODULE_PHASE","REEL_IMAG") ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),
+         TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         IMPR_FONCTION   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+INCLUDE=MACRO(nom="INCLUDE",op=-1,docu="U4.13.01-e",
+             fr="Débranchement vers un fichier de commandes secondaires",
+             sd_prod=ops.INCLUDE,op_init=ops.INCLUDE_context,fichier_ini=1,
+         UNITE = SIMP(statut='o',typ='I'),
+         INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+);
+#& MODIF COMMANDE  DATE 14/02/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,docu="U4.43.02-a",
+                       fr=" ",
+         sd_prod=ops.INCLUDE_MATERIAU,op_init=ops.INCLUDE_context,fichier_ini=0,
+         NOM_AFNOR       =SIMP(statut='o',typ='TXM' ),  
+         TYPE_MODELE     =SIMP(statut='o',typ='TXM',into=("REF","PAR") ),
+         VARIANTE        =SIMP(statut='o',typ='TXM',     
+                               into=("A","B","C","D","E","F","G","H","I","J",    
+                                     "K","L","M","N","O","P","Q","R","S","T","U","V",   
+                                     "W","X","Y","Z",) ),
+         TYPE_VALE       =SIMP(statut='o',typ='TXM',into=("NOMI","MINI","MAXI") ),
+         NOM_MATER       =SIMP(statut='o',typ='TXM' ),  
+         UNITE           =SIMP(statut='f',typ='I',defaut= 32 ),  
+         EXTRACTION      =FACT(statut='f',min=01,max=99,
+           COMPOR          =SIMP(statut='o',typ='TXM' ),  
+           TEMP_EVAL       =SIMP(statut='o',typ='R' ),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe,docu="U4.81.11-e",
+                  fr="Définition d une courbe sur un maillage 2D",reentrant='n',
+
+         MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
+
+         regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                 AU_MOINS_UN('DEFI_SEGMENT','DEFI_ARC','DEFI_CHEMIN'),
+                 PRESENT_ABSENT('DEFI_CHEMIN','DEFI_SEGMENT','DEFI_ARC'),
+                 PRESENT_ABSENT('DEFI_SEGMENT','NOEUD_ORIG','GROUP_NO_ORIG'),
+                 PRESENT_ABSENT('DEFI_ARC','NOEUD_ORIG','GROUP_NO_ORIG'),
+                 EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+                 EXCLUS('DEFI_CHEMIN','DEFI_SEGMENT'),
+                 EXCLUS('DEFI_CHEMIN','DEFI_ARC'),),
+
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+         DEFI_SEGMENT    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+                   UN_PARMI('EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),),
+           ORIGINE         =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+           EXTREMITE       =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
+         ),
+
+         DEFI_ARC        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+                   UN_PARMI('RAYON','ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+                   UN_PARMI('RAYON','EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),               
+                   PRESENT_PRESENT('RAYON','SECTEUR'),),
+           CENTRE          =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,max=1),
+           RAYON           =SIMP(statut='f',typ='R',max=1,val_min=0.E+0),  
+           SECTEUR         =SIMP(statut='f',typ='R',min=2,max=2,
+                                 val_min=-180.E+0,val_max=180E+0),  
+           ORIGINE         =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+           EXTREMITE       =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",    
+                                 into=("RELATIF","ABSOLU",) ),
+         ),
+
+         DEFI_CHEMIN     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+         GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface,docu="U4.81.12-e",
+                  fr="Définition d un chemin sur un maillage 3D",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         DEFI_SEGMENT    =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+                   UN_PARMI('EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),),
+           ORIGINE         =SIMP(statut='f',typ='R',min=3,max=3),  
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+           EXTREMITE       =SIMP(statut='f',typ='R',min=3,max=3),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
+         ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 25/01/2002   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def lire_champ_prod(TYPE_CHAM=None,**args):
+  if TYPE_CHAM == "CHAM_NO_TEMP_R" : return cham_no_temp_r
+  if TYPE_CHAM == "CHAM_NO_DEPL_R" : return cham_no_depl_r
+  raise AsException("type de concept resultat non prevu")
+
+LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
+                fr="Lire un champ dans un fichier et le stocker dans un concept.",
+                ang="To read a field in a file and to save it in a concept.",
+                docu="U7.02.02-a1",reentrant='n',
+#
+# 1. Le maillage support du champ
+#
+         MAILLAGE        =SIMP(statut='o',typ=maillage,
+                          fr="Nom du maillage support du champ",
+                          ang="Name of the mesh on which the field is defined" ),
+#
+# 2. Format de lecture
+#    Remarque : seul MED est operationnel dans cette version.
+#
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="MED",into=("MED",),
+                          fr="Format du fichier : MED seulement",
+                          ang="Format of the file : MED only" ),
+#
+# 3. L'unite logique du fichier.
+#
+         UNITE           =SIMP(statut='f',typ='I',defaut= 81,
+                          fr="Le fichier est : fort.n.",
+                          ang="File is : fort.n" ),  
+#
+# 4. Pour le format MED, il faut preciser le nom sous lequel le champ est connu dans le fichier
+#    et les composantes a lire
+#
+         b_format =BLOC(condition = "FORMAT == 'MED'",
+                        fr="Nom du champ dans le fichier MED",
+         regles=(UN_PARMI('NOM_CMP_IDEM','NOM_CMP'),
+          PRESENT_PRESENT('NOM_CMP','NOM_CMP_MED' ),),
+#
+            NOM_MED      =SIMP(statut='o',typ='TXM',
+                          fr="Nom du champ dans le fichier MED.",
+                          ang="Name of the field in the MED file." ),
+#
+            NOM_CMP_IDEM =SIMP(statut='f',typ='TXM',into=("OUI",),
+                          fr="Les composantes ont le meme nom dans MED et ASTER.",
+                          ang="The names of the components are the same in ASTER and MED." ),
+            NOM_CMP      =SIMP(statut='f',typ='TXM',max='**',
+                          fr="Nom des composantes dans ASTER.",
+                          ang="Names of the components in ASTER" ),
+            NOM_CMP_MED  =SIMP(statut='f',typ='TXM',max='**',
+                          fr="Nom des composantes dans MED.",
+                          ang="Names of the components in MED" ),
+#
+            NUME_ORDRE   =SIMP(statut='f',typ='I',max='**',
+                          fr="Numero d'ordre du champ à lire.",
+                          ang="Rank number of the field to read."),
+#
+# Pour une lecture dans un fichier MED, on peut préciser le nom sous lequel
+# le maillage associé au champ y a été enregistré. Par défaut, on prendra le premier maillage.
+#
+            NOM_MAIL_MED = SIMP(statut='f',typ='TXM',
+                           fr="Nom du maillage dans le fichier MED.",
+                           ang="Name of the mesh into the MED file.",),
+#
+                  ),
+#
+# 5. Le type du concept lu
+#
+         TYPE_CHAM       =SIMP(statut='o',typ='TXM',into=("CHAM_NO_TEMP_R","CHAM_NO_DEPL_R"),
+                          fr="Type de champ à créer.",
+                          ang="Type of the field to create." ),
+#
+# 6. Le niveau d'information
+#
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+LIRE_FONCTION=OPER(nom="LIRE_FONCTION",op=  83,sd_prod=fonction,
+                   fr="Lecture d une fonction dans un fichier ",
+                   docu="U4.32.02-e1",reentrant='n',
+         UNITE           =SIMP(statut='o',typ='I' ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC",) ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC",) ),
+         INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 2,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+LIRE_INTE_SPEC=OPER(nom="LIRE_INTE_SPEC",op= 116,sd_prod=tabl_intsp,
+                    fr="Lecture sur un fichier externe de  fonctions complexes pour créer une matrice interspectrale",
+                    docu="U4.36.01-e1",reentrant='n',
+         UNITE           =SIMP(statut='o',typ='I' ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",into=("REEL_IMAG","MODULE_PHASE") ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC",) ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 10/10/2001   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage,
+                   fr="Lecture d'un fichier de maillage",
+                   ang="Readings of a mesh file",
+                   docu="U4.21.01-f",reentrant='n',
+#
+         UNITE           =SIMP(statut='f',typ='I',defaut= 20 ),
+#
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","MED"),
+                            fr="Format du fichier : ASTER ou MED.",
+                            ang="Format of the file : ASTER or MED.",),
+#
+         ABSC_CURV       =FACT(statut='f',min=00,max=01,
+               TOUT          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+#
+         VERI_MAIL       =FACT(statut='d',min=01,max=01,
+               APLAT         =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+         ),
+#
+         b_format_med =BLOC( condition = " ( FORMAT == 'MED' ) " ,
+                           fr="Informations complémentaires pour la lecture MED.",
+                           ang="Further information for MED readings.",
+#
+# Pour une lecture dans un fichier MED, on peut préciser le nom sous lequel
+# le maillage y a été enregistré. Par défaut, on va le chercher sous le nom du concept à créer.
+#
+              NOM_MED    = SIMP(statut='f',typ='TXM',
+                            fr="Nom du maillage dans le fichier MED.",
+                            ang="Name of the mesh into the MED file.",),
+#
+              INFO_MED   = SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#
+                           ) ,
+#
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def lire_miss_3d_prod(TYPE_RESU,**args):
+  if TYPE_RESU == "TRANS" : return dyna_trans
+  if TYPE_RESU == "HARMO" : return dyna_harmo
+  raise AsException("type de concept resultat non prevu")
+
+LIRE_MISS_3D=OPER(nom="LIRE_MISS_3D",op= 163,sd_prod=lire_miss_3d_prod,
+                  fr="Restitution au format MISS3D d une évolution harmonique ou transitoire",
+                  docu="U7.02.31-c",reentrant='n',
+         MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 27 ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="TRANS",into=("TRANS","HARMO") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
+                 fr=" ",
+                 docu="U7.02.11-a",reentrant='n',
+         regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 19 ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",)),
+         MAIL_PLEXUS     =SIMP(statut='o',typ=maillage ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage ),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8 ),
+         b_prec_crit     =BLOC(condition = "LIST_INST != None or INST != None",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
+                                   into=("RELATIF","ABSOLU") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 12/09/2001   AUTEUR MCOURTOI M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def lire_resu_prod(TYPE_RESU,**args):
+  if TYPE_RESU == "EVOL_CHAR" :  return evol_char
+  if TYPE_RESU == "EVOL_THER" :  return evol_ther
+  if TYPE_RESU == "EVOL_ELAS" :  return evol_elas
+  if TYPE_RESU == "EVOL_NOLI" :  return evol_noli
+  if TYPE_RESU == "DYNA_TRANS" : return dyna_trans
+  if TYPE_RESU == "DYNA_HARMO" : return dyna_harmo
+  if TYPE_RESU == "HARM_GENE" :  return harm_gene
+  raise AsException("type de concept resultat non prevu")
+
+LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,docu="U7.02.01-c1",reentrant='n',
+               fr="Lecture de champs aux noeuds ou par éléments aux noeuds sur un fichier IDEAS ou EnSight",
+         regles=(UN_PARMI('MAILLAGE','MODELE'),),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS","ENSIGHT","MED") ),
+         b_unite         =BLOC(condition="FORMAT=='IDEAS'",
+           UNITE           =SIMP(statut='f',typ='I',defaut= 19 ),
+         ),
+         b_nom_fichier     =BLOC(condition="FORMAT=='ENSIGHT'",
+           NOM_FICHIER     =SIMP(statut='f',typ='TXM'),
+         ),
+         TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_THER","EVOL_ELAS","EVOL_NOLI",
+                                                          "DYNA_TRANS","DYNA_HARMO","HARM_GENE","EVOL_CHAR") ),
+         b_evol_elas     =BLOC(condition="TYPE_RESU=='EVOL_ELAS'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("DEPL",) ),
+         ),
+         b_evol_ther     =BLOC(condition="TYPE_RESU=='EVOL_THER'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("TEMP","TEMP_PEAU") ),
+         ),
+         b_evol_char     =BLOC(condition="TYPE_RESU=='EVOL_CHAR'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("PRES","VITE_VENT",
+                                       "FVOL_3D","FVOL_2D",
+                                       "FSUR_3D","FSUR_2D") ),
+         ),
+         b_evol_noli     =BLOC(condition="TYPE_RESU=='EVOL_NOLI'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("DEPL","VITE","ACCE","VARI_ELNO",
+                                       "SIEF_ELNO","EPSA_ELNO") ),
+         ),
+         b_dyna          =BLOC(condition="(TYPE_RESU=='DYNA_TRANS') or (TYPE_RESU=='DYNA_HARMO') or\
+                                          (TYPE_RESU=='HARM_GENE')",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("DEPL","VITE","ACCE",) ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+         MAILLAGE        =SIMP(statut='f',typ=maillage),
+         MODELE          =SIMP(statut='f',typ=modele),
+         NB_VARI         =SIMP(statut='f',typ='I' ),
+         FORMAT_IDEAS    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('POSI_INST','POSI_FREQ'),),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',into=("TEMP","DEPL","VITE","ACCE","PRES","VARI_ELNO",
+                                                                     "SIEF_ELNO","EPSA_ELNO","TEMP_PEAU","VITE_VENT",
+                                                                     "FVOL_3D","FVOL_2D","FSUR_3D","FSUR_2D") ),
+           NUME_DATASET    =SIMP(statut='f',typ='I',into=(55,57,2414) ),
+           RECORD_3        =SIMP(statut='f',typ='I',max='**'),
+           RECORD_6        =SIMP(statut='f',typ='I',max='**'),
+           RECORD_9        =SIMP(statut='f',typ='I',max='**'),
+           POSI_ORDRE      =SIMP(statut='o',typ='I',max='**'),
+           POSI_INST       =SIMP(statut='f',typ='I',max='**'),
+           POSI_FREQ       =SIMP(statut='f',typ='I',max='**'),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+         ),
+         b_extrac        =BLOC(condition="1",fr="accès à un champ dans la structure de données résultat",
+           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST','FREQ','LIST_FREQ'),),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8),
+             
+           b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 25/01/2002   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+def macr_adap_mail_prod(self,MAJ_CHAM,ADAPTATION,**args):
+  mail1=ADAPTATION['MAILLAGE_N']
+  self.type_sdprod(mail1,maillage)
+  mail2=ADAPTATION['MAILLAGE_NP1']
+  self.type_sdprod(mail2,maillage)
+  if MAJ_CHAM == None:return None
+  for ch in MAJ_CHAM:
+    t=ch['TYPE_CHAM']
+    if t == 'CHAM_NO_TEMP_R':self.type_sdprod(ch['CHAM_MAJ'],cham_no_temp_r)
+    if t == 'CHAM_NO_DEPL_R':self.type_sdprod(ch['CHAM_MAJ'],cham_no_depl_r)
+  return None
+
+MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=-24,sd_prod=macr_adap_mail_prod,
+                     fr="Adapter un maillage avec le logiciel HOMARD.",
+                     ang="Mesh adaptation with HOMARD software.",
+                     docu="U7.03.01-a",
+#
+# 1. Le niveau d'information
+#
+         INFO           = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+#
+# 2. Version de HOMARD
+#
+         VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V5_1",
+                               into=("V5_1", "V5_N", "V5_N_PERSO"),
+                           fr="Version de HOMARD",
+                           ang="HOMARD release"),
+#
+# 3. Langue des messages issus de HOMARD
+#
+         LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
+                               into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
+                           fr="Langue des messages issus de HOMARD.",
+                           ang="Language for HOMARD messages." ),
+#
+# 4. LE TYPE DE TRAITEMENT :
+#
+         ADAPTATION      =FACT(statut='o',min=01,max=01,
+                           fr="Type d'adaptation",
+                           ang="Type of adaptation",
+#
+# 4.1. DEUX CHOIX D'ADAPTATION EXCLUSIFS :
+#
+# 4.1.
+#      A. SELON UN INDICATEUR D'ERREUR, AVEC TROIS VARIANTES :
+#         . RAFFINEMENT ET DERAFFINEMENT
+#         . RAFFINEMENT SEUL
+#         . DERAFFINEMENT SEUL
+#      B. UNIFORME, AVEC TROIS VARIANTES :
+#         . RAFFINEMENT SEUL
+#         . DERAFFINEMENT SEUL
+#         . RIEN : LE MAILLAGE EST LE MEME A LA SORTIE ET A L'ENTREE
+#
+           regles=(
+                   UN_PARMI('LIBRE','UNIFORME'),
+                  ),
+           LIBRE          = SIMP(statut='f',typ='TXM',
+                                 into=("RAFF_DERA","RAFFINEMENT","DERAFFINEMENT"),    
+                           fr="Adaptation selon un indicateur d'erreur.",
+                           ang="Adaptation among an error indicator" ),
+           UNIFORME       = SIMP(statut='f',typ='TXM',
+                                 into=("RAFFINEMENT","DERAFFINEMENT","RIEN"),    
+                           fr="Adaptation uniforme.",
+                           ang="Uniform adaptation" ),
+#
+# 4.2. QUEL QUE SOIT LE TYPE DE TRAITEMENT, IL FAUT DONNER  :
+#      A. LE CONCEPT DU MAILLAGE INITIAL
+#      B. LE CONCEPT DU MAILLAGE FINAL
+#
+           MAILLAGE_N     = SIMP(statut='o',typ=(CO,maillage),
+                           fr="Maillage avant adaptation",
+                           ang="Mesh before adaptation" ),
+           MAILLAGE_NP1   = SIMP(statut='o',typ=(CO,maillage),
+                           fr="Maillage apres adaptation",
+                           ang="Mesh after adaptation" ),
+#
+# 4.3. POUR DE L'ADAPTATION LIBRE, IL FAUT L'INDICATEUR D'ERREUR
+#
+#
+           b_indicateur_d_erreur   =BLOC( condition = " LIBRE != None " ,
+                           fr="Indicateur d'erreur",
+                           ang="Error indicator",
+#
+# 4.3.1. LE NOM DU CONCEPT RESULTAT
+#
+                           RESULTAT_N     = SIMP(statut='o',typ=(evol_elas,evol_noli,evol_ther) ,
+                           fr="Resultat contenant l'indicateur d'erreur",
+                           ang="Result with error indicator" ),
+#
+# 4.3.2. LE CHAMP D'INDICATEUR D'ERREUR
+#
+                           INDICATEUR     = SIMP(statut='o',typ='TXM',     
+                           fr="Champ de l'indicateur d'erreur",
+                           ang="Error indicator field" ),
+#
+# 4.3.3. LA COMPOSANTE RETENUE
+#
+                           NOM_CMP_INDICA = SIMP(statut='o',typ='TXM',
+                           fr="Composante retenue",
+                           ang="Selected component" ),
+#
+# 4.3.4. LE NUMERO D'ORDRE
+#
+                           NUME_ORDRE     = SIMP(statut='f',typ='I' ,
+                           fr="Numero d ordre",
+                           ang="Rank" ),  
+                           ) ,
+#
+# 4.4. LES CRITERES POUR DE L'ADAPTATION LIBRE :
+#        ABSOLU, RELATIF, EN PROPORTION D'ENTITE
+# 4.4.1. POUR LE RAFFINEMENT :
+#
+           b_critere_de_raffinement =BLOC( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'RAFFINEMENT' ) " ,
+                           fr="Critère de raffinement.",
+                           ang="Refinement threshold.",
+                           regles=(UN_PARMI ( 'CRIT_RAFF_ABS', 'CRIT_RAFF_REL', 'CRIT_RAFF_PE' ),),
+                           CRIT_RAFF_ABS  = SIMP(statut='f',typ='R',
+                                                   fr="Critère absolu",
+                                                   ang="Absolute threshold" ),  
+                           CRIT_RAFF_REL  = SIMP(statut='f',typ='R',
+                                                   fr="Critère relatif",
+                                                   ang="Relative threshold" ),  
+                           CRIT_RAFF_PE   = SIMP(statut='f',typ='R',
+                                                   fr="Pourcentage d'éléments",
+                                                   ang="Percentage of elements" ),  
+                           ) ,
+#
+# 4.4.2. POUR LE DERAFFINEMENT :
+#
+           b_critere_de_deraffinement =BLOC ( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'DERAFFINEMENT' ) " ,
+                           fr="Critère de déraffinement.",
+                           ang="Unrefinement threshold.",
+                           regles=(UN_PARMI ( 'CRIT_DERA_ABS', 'CRIT_DERA_REL', 'CRIT_DERA_PE' ),),
+                           CRIT_DERA_ABS  = SIMP(statut='f',typ='R' ,
+                                                 fr="Critère absolu",
+                                                 ang="Absolute threshold" ),  
+                           CRIT_DERA_REL  = SIMP(statut='f',typ='R',
+                                                 fr="Critère relatif",
+                                                 ang="Relative threshold" ),  
+                           CRIT_DERA_PE   = SIMP(statut='f',typ='R',
+                                                 fr="Pourcentage d'éléments",
+                                                 ang="Percentage of elements" ),  
+                           ) ,
+#
+# 4.5. LES NIVEAUX EXTREMES POUR LE MAILLAGE ADAPTE
+# 4.5.1. POUR LE RAFFINEMENT :
+#
+           b_niveau_maximum =BLOC ( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'RAFFINEMENT' ) or "+
+                                                " ( UNIFORME == 'RAFFINEMENT' ) " ,
+                             fr="Niveau maximum de profondeur de raffinement",
+                             ang="Maximum level for refinement",
+                             NIVE_MAX       = SIMP(statut='f',typ='I' ),  
+                           ) ,
+#
+# 4.5.2. POUR LE DERAFFINEMENT :
+#
+           b_niveau_minimum =BLOC ( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'DERAFFINEMENT' ) or "+
+                                                " ( UNIFORME == 'DERAFFINEMENT' ) " ,
+                             fr="Niveau minimum de profondeur de déraffinement",
+                             ang="Minimum level for unrefinement",
+                             NIVE_MIN       = SIMP(statut='f',typ='I' ),
+                           ) ,
+         ),
+#
+# 5. LA MISE A JOUR DE CHAMPS.
+#    PAR DEFAUT, RIEN NE SE FAIT
+#
+         MAJ_CHAM        =FACT(statut='f',min=01,max='**',
+                           fr="Mise à jour de champs sur le nouveau maillage.",
+                           ang="Updationg of fields over the new mesh.",
+#
+# 5.1. LE NOM DU RESULTAT DU CHAMP A INTERPOLER
+#
+           RESULTAT       = SIMP(statut='o',
+                                 typ=(evol_elas,evol_noli,evol_ther),
+                           fr="Resultat contenant le champ à mettre à jour",
+                           ang="Result with field to be updated" ),
+#
+# 5.2. LE NOM DU CHAMP A INTERPOLER
+#
+           NOM_CHAM       = SIMP(statut='o',typ='TXM',
+                           fr="Nom du champ à mettre à jour",
+                           ang="Name of the field to be updated" ),  
+#
+# 5.3. LE NUMERO D'ORDRE POUR LE CHAMP A INTERPOLER
+#
+           NUME_ORDRE     = SIMP(statut='f',typ='I',
+                           fr="Numero d ordre du champ à mettre à jour",
+                           ang="Rank of the field to be updated" ),  
+#
+# 5.4. LE NOM DU CHAMP QUI CONTIENDRA LE RESULTAT DE LA MISE A JOUR
+#
+           CHAM_MAJ       = SIMP(statut='o',typ=(CO,cham_gd),
+                           fr="Nom du champ qui contiendra le champ mis à jour",
+                           ang="Name of the field for the updated field"),
+#
+# 5.5. LE TYPE DU CHAMP QUI CONTIENDRA LE RESULTAT DE LA MISE A JOUR
+#
+           TYPE_CHAM      = SIMP(statut='o',typ='TXM',     
+                                 into=("CHAM_NO_TEMP_R","CHAM_NO_DEPL_R"),
+                           fr="Type du champ qui contiendra le champ mis à jour",
+                           ang="Type of the field for the updated field" ),
+         ),
+#
+# 6. INFORMATION SUR LE MAILLAGE : par defaut, on ne fait que les nombres
+#    A. NOMBRE DE NOEUDS ET ELEMENTS DU MAILLAGE
+#    B. QUALITE DES ELEMENTS DU MAILLAGE
+#    C. CONTROLE DE LA NON INTERPENETRATION DES ELEMENTS DU MAILLAGE
+#    D. CONNEXITE DU MAILLAGE
+#    E. TAILLE DES DIFFERENTS SOUS-DOMAINES
+#
+         NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                          fr="Nombre de noeuds et éléments du maillage",
+                          ang="Number of nodes and elements in the mesh" ),
+#
+         QUALITE        = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Qualité du maillage",
+                          ang="Mesh quality" ),
+#
+         INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Controle de la non interpénétration des éléments.",
+                          ang="Overlapping checking." ),
+#
+         CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Connexité du maillage.",
+                          ang="Mesh connexity." ),
+#
+         TAILLE         = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Tailles des sous-domaines du maillage.",
+                          ang="Sizes of mesh sub-domains." ),
+#
+         MENAGE         = SIMP(statut='f',typ='TXM',into=("MAILLAGE","SOLUTION","TOUT") ),
+#
+)  ;
+#& MODIF COMMANDE  DATE 20/12/2001   AUTEUR F1BHHAJ J.ANGLES 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE F1BHHAJ J.ANGLES
+def macr_ascouf_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS,CHARGE,RESU_THER,**args):
+  self.type_sdprod(MODELE,modele)
+  if CHAM_MATER != None:self.type_sdprod(CHAM_MATER,cham_mater)
+  if CARA_ELEM  != None:self.type_sdprod(CARA_ELEM,cara_elem)
+  if FOND_FISS  != None:self.type_sdprod(FOND_FISS,fond_fiss)
+  if CHARGE     != None:self.type_sdprod(CHARGE,char_meca)
+  if RESU_THER  != None:self.type_sdprod(RESU_THER,evol_ther)
+  return evol_noli
+
+MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_prod,
+                      fr=" ",
+                      docu="U4.CF.20-a",reentrant='n',
+         regles=(UN_PARMI('COMP_INCR','COMP_ELAS'),),
+
+         TYPE_MAILLAGE   =SIMP(statut='o',typ='TXM',
+                               into=("SAIN",
+                                     "FISS_COUDE",
+                                     "SOUS_EPAIS_COUDE"
+                                     ) ),
+
+         CL_BOL_P2_GV    =FACT(statut='f',min=1,max=1,
+           ANGLE           =SIMP(statut='o',typ='R' ),
+           AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),
+         ),
+
+         MAILLAGE        =SIMP(statut='o',typ=maillage ),
+         MODELE          =SIMP(statut='o',typ=(CO,modele)),
+         CHAM_MATER      =SIMP(statut='f',typ=(CO,cham_mater)),
+         CARA_ELEM       =SIMP(statut='f',typ=(CO,cara_elem)),
+         FOND_FISS       =SIMP(statut='f',typ=(CO,fond_fiss)),
+         CHARGE          =SIMP(statut='f',typ=(CO,char_meca)),
+         RESU_THER       =SIMP(statut='f',typ=(CO,evol_ther)),
+
+         AFFE_MATERIAU   =FACT(statut='o',min=1,max=3,
+           regles=(UN_PARMI('TOUT','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ='TXM',into=("COUDE","BOL") ),
+           MATER           =SIMP(statut='o',typ=mater ),
+           TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+
+         PRES_REP        =FACT(statut='f',min=1,max=1,
+           PRES            =SIMP(statut='o',typ='R' ),
+           EFFE_FOND_P1    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+         ),
+
+         ECHANGE         =FACT(statut='f',min=1,max=1,
+           COEF_H          =SIMP(statut='f',typ=fonction ),
+           TEMP_EXT        =SIMP(statut='f',typ=fonction ),
+         ),
+
+         TORS_P1         =FACT(statut='f',min=1,max=6,
+           regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           FX              =SIMP(statut='f',typ='R' ),
+           FY              =SIMP(statut='f',typ='R' ),
+           FZ              =SIMP(statut='f',typ='R' ),
+           MX              =SIMP(statut='f',typ='R' ),
+           MY              =SIMP(statut='f',typ='R' ),
+           MZ              =SIMP(statut='f',typ='R' ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+         ),
+
+         COMP_INCR       =FACT(statut='f',min=1,max=1,
+           RELATION        =SIMP(statut='o',typ='TXM',into=("VMIS_ISOT_TRAC",) ),
+           VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut= 2,into=( 2 ,) ),
+         ),
+
+         COMP_ELAS       =FACT(statut='f',min=1,max=1,
+           RELATION        =SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC") ),
+           ELAS            =SIMP(statut='c',typ='I',defaut= 1,into=( 1 ,) ),
+           ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut= 1,into=( 1 ,) ),
+         ),
+
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R'
+                                ,defaut= 1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+           TYPE_MATR_COMP  =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+
+         NEWTON          =FACT(statut='d',min=1,max=1,
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),
+           PREDICTION      =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
+           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut=0),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+         ),
+
+         RECH_LINEAIRE   =FACT(statut='f',min=1,max=1,
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),
+         ),
+
+         INCREMENT       =FACT(statut='o',min=1,max=1,
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=listr8),
+           EVOLUTION       =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE",
+                                 into=("CHRONOLOGIQUE","RETROGRADE","SANS",) ),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+           SUBD_PAS        =SIMP(statut='f',typ='I',defaut=1),
+           SUBD_PAS_MINI   =SIMP(statut='f',typ='R'),
+           COEF_SUBD_PAS_1 =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+         ),
+
+         THETA_3D        =FACT(statut='f',min=1,max='**',
+           R_INF           =SIMP(statut='o',typ='R' ),
+           R_SUP           =SIMP(statut='o',typ='R' ),
+         ),
+
+         IMPR_TABLE      =FACT(statut='f',min=1,max=1,
+           regles=(UN_PARMI('TOUT_PARA','NOM_PARA', ),
+            PRESENT_PRESENT('TOUT_PARA','ANGLE',    ),
+                   UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL',),),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',max=4,
+                                 into=("TRESCA_MEMBRANE",
+                                       "TRESCA_MFLE",
+                                       "TRESCA",
+                                       "SI_LONG"
+                                       ) ),
+           TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           ANGLE           =SIMP(statut='f',typ='R',max='**' ),
+           R_CINTR         =SIMP(statut='f',typ='R',max='**' ),
+           POSI_CURV_LONGI =SIMP(statut='f',typ='R',max='**' ),
+           POSI_ANGUL      =SIMP(statut='f',typ='R',max='**' ),
+         ),
+
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
+                                 into=("RESULTAT","ASTER","IDEAS","CASTEM") ),
+                                 
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),  
+
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM' ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 20/12/2001   AUTEUR F1BHHAJ J.ANGLES 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE F1BHHAJ J.ANGLES
+MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op= -19,sd_prod=maillage,
+                      fr=" ",docu="U4.CF.10-a",reentrant='n',
+
+         regles=(EXCLUS('SOUS_EPAIS_COUDE','FISS_COUDE','SOUS_EPAIS_MULTI'),),
+
+         EXEC_MAILLAGE   =FACT(statut='o',min=1,max=1,
+           LOGICIEL        =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000") ),
+           UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
+           UNITE_MGIB      =SIMP(statut='f',typ='I',defaut=19),  
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10,11)),
+         ),
+
+         TYPE_ELEM       =SIMP(statut='f',typ='TXM',defaut="CU20",into=("CU20","CUB8") ),
+
+         COUDE           =FACT(statut='o',min=1,max=1,
+           ANGLE           =SIMP(statut='o',typ='R' ),  
+           R_CINTR         =SIMP(statut='o',typ='R' ),  
+           L_TUBE_P1       =SIMP(statut='o',typ='R' ),  
+           L_TUBE_P2       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           NB_ELEM_EPAIS   =SIMP(statut='f',typ='I',defaut= 3 ),  
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           TRANSFORMEE     =SIMP(statut='o',typ='TXM',defaut="COUDE",into=("COUDE","TUBE") ),
+           b_transf_coude  =BLOC(condition = "TRANSFORMEE == 'COUDE' ",
+              DEXT            =SIMP(statut='o',typ='R' ),  
+              EPAIS           =SIMP(statut='o',typ='R' ),  
+              SUR_EPAIS       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+              BOL_P2          =SIMP(statut='f',typ='TXM',into=("ASP_MPP","CUVE","GV") ),
+           ),
+           b_transf_tube   =BLOC(condition = "TRANSFORMEE == 'TUBE' ",
+              TRAN_EPAIS      =SIMP(statut='o',typ='TXM',defaut="NON",into=("OUI","NON") ),
+              b_trans_epais_oui    =BLOC(condition = "TRAN_EPAIS == 'OUI' ",
+                      regles=(ENSEMBLE('ANGL_TETA2','EPAIS_TI'),
+                              UN_PARMI('ABSC_CURV_TRAN','POSI_ANGU_TRAN'),),
+                      DEXT_T1         =SIMP(statut='o',typ='R' ),  
+                      EPAIS_T1        =SIMP(statut='o',typ='R' ),  
+                      EPAIS_T2        =SIMP(statut='o',typ='R' ),  
+                      EPAIS_TI        =SIMP(statut='f',typ='R' ),  
+                      ANGL_TETA1      =SIMP(statut='o',typ='R' ),  
+                      ANGL_TETA2      =SIMP(statut='f',typ='R' ),  
+                      ABSC_CURV_TRAN  =SIMP(statut='f',typ='R' ),  
+                      POSI_ANGU_TRAN  =SIMP(statut='f',typ='R' ),  
+              ),
+              b_trans_epais_non    =BLOC(condition = "TRAN_EPAIS == 'NON' ",
+                      DEXT            =SIMP(statut='o',typ='R' ),  
+                      EPAIS           =SIMP(statut='o',typ='R' ),  
+                      SUR_EPAIS       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+                      BOL_P2          =SIMP(statut='f',typ='TXM',into=("ASP_MPP","CUVE","GV") ),
+              ),
+           ),
+         ),
+
+         SOUS_EPAIS_COUDE=FACT(statut='f',min=1,max=1,
+           regles=(UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL'),
+                   UN_PARMI('POSI_CURV_CIRC','AZIMUT'),),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("AXIS","ELLI") ),
+           AXE_CIRC        =SIMP(statut='f',typ='R' ),  
+           AXE_LONGI       =SIMP(statut='o',typ='R' ),  
+           PROFONDEUR      =SIMP(statut='o',typ='R' ),  
+           POSI_CURV_LONGI =SIMP(statut='f',typ='R' ),  
+           POSI_ANGUL      =SIMP(statut='f',typ='R' ),  
+           POSI_CURV_CIRC  =SIMP(statut='f',typ='R' ),  
+           AZIMUT          =SIMP(statut='f',typ='R' ),  
+           SOUS_EPAIS      =SIMP(statut='o',typ='TXM',into=("INTERNE","EXTERNE") ),
+           NB_ELEM_LONGI   =SIMP(statut='o',typ='I' ),  
+           NB_ELEM_CIRC    =SIMP(statut='o',typ='I' ),  
+           NB_ELEM_RADI    =SIMP(statut='f',typ='I',defaut= 3 ),  
+           EMPREINTE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+
+         SOUS_EPAIS_MULTI=FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL'),
+                   UN_PARMI('POSI_CURV_CIRC','AZIMUT'),),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("AXIS","ELLI") ),
+           AXE_CIRC        =SIMP(statut='f',typ='R' ),  
+           AXE_LONGI       =SIMP(statut='o',typ='R' ),  
+           PROFONDEUR      =SIMP(statut='o',typ='R' ),  
+           POSI_CURV_LONGI =SIMP(statut='f',typ='R' ),  
+           POSI_ANGUL      =SIMP(statut='f',typ='R' ),  
+           POSI_CURV_CIRC  =SIMP(statut='f',typ='R' ),  
+           AZIMUT          =SIMP(statut='f',typ='R' ),  
+           SOUS_EPAIS      =SIMP(statut='o',typ='TXM',into=("INTERNE","EXTERNE") ),
+           NB_ELEM_LONGI   =SIMP(statut='o',typ='I' ),  
+           NB_ELEM_CIRC    =SIMP(statut='o',typ='I' ),  
+           EMPREINTE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+
+         FISS_COUDE      =FACT(statut='f',min=1,max=1,
+           regles=(UN_PARMI('ABSC_CURV','POSI_ANGUL'),),
+           AXIS            =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),  
+           PROFONDEUR      =SIMP(statut='o',typ='R' ),  
+           LONGUEUR        =SIMP(statut='o',typ='R' ),  
+           ABSC_CURV       =SIMP(statut='f',typ='R' ),  
+           POSI_ANGUL      =SIMP(statut='f',typ='R' ),  
+           FISSURE         =SIMP(statut='o',typ='TXM',into=("DEB_INT","DEB_EXT") ),
+           AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),  
+           ORIEN           =SIMP(statut='o',typ='R',
+                                 into=(45.,-45.,90.,0.E+0) ),
+           NB_TRANCHE      =SIMP(statut='o',typ='I' ),  
+           NB_SECTEUR      =SIMP(statut='o',typ='I' ),  
+           NB_COURONNE     =SIMP(statut='o',typ='I' ),  
+           RAYON_TORE      =SIMP(statut='f',typ='R' ),  
+           COEF_MULT_RC2   =SIMP(statut='f',typ='R',defaut= 1. ),  
+           COEF_MULT_RC3   =SIMP(statut='f',typ='R' ),  
+           ANGL_OUVERTURE  =SIMP(statut='f',typ='R',defaut= 0.5 ),  
+         ),
+
+         IMPRESSION      =FACT(statut='f',min=1,max='**',
+           regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",   
+                                 into=("ASTER","IDEAS","CASTEM") ),
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),  
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+           FICHIER         =SIMP(statut='f',typ='TXM' ),  
+           UNITE           =SIMP(statut='f',typ='I' ),  
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 20/12/2001   AUTEUR F1BHHAJ J.ANGLES 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE F1BHHAJ J.ANGLES
+def macr_aspic_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS_1,FOND_FISS_2,CHARGE,RESU_THER,**args):
+  if MODELE      != None:self.type_sdprod(MODELE,modele)
+  if CHAM_MATER  != None:self.type_sdprod(CHAM_MATER,cham_mater)
+  if CARA_ELEM   != None:self.type_sdprod(CARA_ELEM,cara_elem)
+  if FOND_FISS_1 != None:self.type_sdprod(FOND_FISS_1,fond_fiss)
+  if FOND_FISS_2 != None:self.type_sdprod(FOND_FISS_2,fond_fiss)
+  if CHARGE      != None:self.type_sdprod(CHARGE,char_meca)
+  if RESU_THER   != None:self.type_sdprod(RESU_THER,evol_ther)
+  return evol_noli
+
+MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
+                    fr=" ",docu="U4.PC.20-a1",reentrant='n',
+         regles=(UN_PARMI('COMP_INCR','COMP_ELAS'),),
+
+         TYPE_MAILLAGE   =SIMP(statut='o',typ='TXM',
+                               into=("SAIN_FIN","SAIN_GROS","FISS_COUR_DEB","FISS_COUR_NONDEB","FISS_LONG_DEB",
+                                     "FISS_LONG_NONDEB","FISS_AXIS_DEB","FISS_AXIS_NONDEB") ),
+
+         TUBULURE        =FACT(statut='o',min=1,max=1,
+           TYPE            =SIMP(statut='o',typ='TXM',into=("TYPE_1","TYPE_2") ),
+         ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         MODELE          =SIMP(statut='f',typ=(CO,modele)),
+         CHAM_MATER      =SIMP(statut='f',typ=(CO,cham_mater)),
+         CARA_ELEM       =SIMP(statut='f',typ=(CO,cara_elem)),
+         FOND_FISS_1     =SIMP(statut='f',typ=(CO,fond_fiss)),
+         FOND_FISS_2     =SIMP(statut='f',typ=(CO,fond_fiss)),
+         CHARGE          =SIMP(statut='f',typ=(CO,char_meca)),
+         RESU_THER       =SIMP(statut='f',typ=(CO,evol_ther)),
+
+         AFFE_MATERIAU   =FACT(statut='o',min=1,max=3,
+           regles=(UN_PARMI('TOUT','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           GROUP_MA        =SIMP(statut='f',typ='TXM',into=("TUBU","CORP","SOUD","SOUDCORP","SOUDTUBU") ),
+           MATER           =SIMP(statut='o',typ=mater),
+           TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           RCCM            =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
+         ),
+
+         EQUILIBRE       =FACT(statut='o',min=1,max=1,
+           NOEUD           =SIMP(statut='o',typ=no),
+         ),
+
+         PRES_REP        =FACT(statut='o',min=1,max=1,
+           PRES            =SIMP(statut='o',typ='R'),
+           NOEUD           =SIMP(statut='f',typ=no),
+           EFFE_FOND       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+
+         ECHANGE         =FACT(statut='f',min=1,max=1,
+           COEF_H_TUBU     =SIMP(statut='o',typ=fonction),
+           COEF_H_CORP     =SIMP(statut='o',typ=fonction),
+           TEMP_EXT        =SIMP(statut='o',typ=fonction),
+         ),
+
+         TORS_CORP       =FACT(statut='f',min=1,max=6,
+           regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           NOEUD           =SIMP(statut='o',typ=no),
+           FX              =SIMP(statut='f',typ='R'),
+           FY              =SIMP(statut='f',typ='R'),
+           FZ              =SIMP(statut='f',typ='R'),
+           MX              =SIMP(statut='f',typ='R'),
+           MY              =SIMP(statut='f',typ='R'),
+           MZ              =SIMP(statut='f',typ='R'),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+
+         TORS_TUBU       =FACT(statut='f',min=1,max=6,
+           regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           FX              =SIMP(statut='f',typ='R'),
+           FY              =SIMP(statut='f',typ='R'),
+           FZ              =SIMP(statut='f',typ='R'),
+           MX              =SIMP(statut='f',typ='R'),
+           MY              =SIMP(statut='f',typ='R'),
+           MZ              =SIMP(statut='f',typ='R'),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+
+         COMP_INCR       =FACT(statut='f',min=1,max=1,
+           RELATION        =SIMP(statut='o',typ='TXM',into=("VMIS_ISOT_TRAC",) ),
+           VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut= 2,into=( 2 ,) ),
+         ),
+
+         COMP_ELAS       =FACT(statut='f',min=1,max=1,
+           RELATION        =SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC") ),
+           ELAS            =SIMP(statut='c',typ='I',defaut= 1,into=( 1 ,) ),
+           ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut= 1,into=( 1 ,) ),
+         ),
+
+         THETA_3D        =FACT(statut='f',min=1,max='**',
+           R_INF           =SIMP(statut='o',typ='R'),
+           R_SUP           =SIMP(statut='o',typ='R'),
+         ),
+
+         OPTION          =SIMP(statut='f',typ='TXM',into=("CALC_G_MAX","CALC_G_MAX_LOCAL") ),
+         BORNES          =FACT(statut='f',min=1,max='**',
+           NUME_ORDRE      =SIMP(statut='o',typ='I'),
+           VALE_MIN        =SIMP(statut='o',typ='R'),
+           VALE_MAX        =SIMP(statut='o',typ='R'),
+         ),
+
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non iversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut=1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut=10),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut=0),
+           TYPE_MATR_COMP  =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+
+         NEWTON          =FACT(statut='d',min=1,max=1,
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut=1),
+           PREDICTION      =SIMP(statut='f',typ='TXM',into=("TANGENTE","ELASTIQUE","EXTRAPOL","DEPL_CALCULE")),
+           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE")),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0),
+         ),
+
+         RECH_LINEAIRE   =FACT(statut='d',min=1,max=1,
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut=1.0E-3),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut=3),
+         ),
+
+         INCREMENT       =FACT(statut='o',min=1,max=1,
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=listr8),
+           EVOLUTION       =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE",
+                                 into=("CHRONOLOGIQUE","RETROGRADE","SANS",) ),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+           SUBD_PAS        =SIMP(statut='f',typ='I',defaut=1),
+           SUBD_PAS_MINI   =SIMP(statut='f',typ='R'),
+           COEF_SUBD_PAS_1 =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+         ),
+
+         PAS_AZIMUT      =SIMP(statut='f',typ='I',defaut=1),
+
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
+                                 into=("RESULTAT","ASTER","CASTEM","IDEAS")),
+                                 
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),  
+
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+
+           b_extrac        =BLOC(condition="((FORMAT=='IDEAS')or(FORMAT=='CASTEM'))",
+                                 fr="extraction d un champ de grandeur",
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST'),),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',max=3,
+                                   into=("DEPL","EQUI_ELNO_SIGM","TEMP")),
+             
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+             INST            =SIMP(statut='f',typ='R',max='**'),
+           ),      
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+
+         TITRE           =SIMP(statut='f',typ='TXM'),
+)  ;
+# debut entete
+#& MODIF COMMANDE  DATE 20/12/2001   AUTEUR F1BHHAJ J.ANGLES 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE F1BHHAJ J.ANGLES
+MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= -16,sd_prod=maillage,reentrant='n',
+                    fr=" ",docu="U4.PC.10-a",
+
+         EXEC_MAILLAGE   =FACT(statut='o',min=1,max=1,
+           LOGICIEL        =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000")),
+           UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
+           UNITE_MGIB      =SIMP(statut='f',typ='I',defaut=19),  
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10,11)),
+         ),
+
+         TYPE_ELEM       =SIMP(statut='f',typ='TXM',defaut="CU20",into=("CU20","CUB8")),
+
+         RAFF_MAIL       =SIMP(statut='f',typ='TXM',defaut="GROS",into=("GROS","FIN")),
+
+         TUBULURE        =FACT(statut='o',min=1,max=1,
+           E_BASE          =SIMP(statut='o',typ='R'),  
+           DEXT_BASE       =SIMP(statut='o',typ='R'),  
+           L_BASE          =SIMP(statut='o',typ='R'),  
+           L_CHANF         =SIMP(statut='o',typ='R'),  
+           E_TUBU          =SIMP(statut='o',typ='R'),  
+           DEXT_TUBU       =SIMP(statut='o',typ='R'),  
+           Z_MAX           =SIMP(statut='o',typ='R'),  
+           TYPE            =SIMP(statut='o',typ='TXM',into=("TYPE_1","TYPE_2")),
+           L_PENETR        =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+         ),
+
+         SOUDURE         =FACT(statut='o',min=1,max=1,
+           H_SOUD          =SIMP(statut='o',typ='R'),  
+           ANGL_SOUD       =SIMP(statut='o',typ='R'),  
+           JEU_SOUD        =SIMP(statut='o',typ='R'),  
+         ),
+
+         CORPS           =FACT(statut='o',min=1,max=1,
+           E_CORP          =SIMP(statut='o',typ='R'),  
+           DEXT_CORP       =SIMP(statut='o',typ='R'),  
+           X_MAX           =SIMP(statut='o',typ='R'),  
+         ),
+
+         FISS_SOUDURE    =FACT(statut='f',min=1,max=1,
+           TYPE            =SIMP(statut='o',typ='TXM',into=("LONGUE","COURTE")),
+           AXIS            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           PROFONDEUR      =SIMP(statut='o',typ='R'),  
+           LONGUEUR        =SIMP(statut='f',typ='R'),  
+           AZIMUT          =SIMP(statut='o',typ='R'),  
+           RAYON_TORE      =SIMP(statut='f',typ='R'),  
+           POSITION        =SIMP(statut='o',typ='TXM',into=("DROIT","INCLINE")),
+           FISSURE         =SIMP(statut='o',typ='TXM',into=("DEB_INT","DEB_EXT","NON_DEB","TRAVERS")),
+           LIGA_INT        =SIMP(statut='f',typ='R'),  
+           ANGL_OUVERTURE  =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+           COEF_MULT_RC1   =SIMP(statut='f',typ='R'),  
+           COEF_MULT_RC2   =SIMP(statut='f',typ='R'),  
+           COEF_MULT_RC3   =SIMP(statut='f',typ='R'),  
+           NB_TRANCHE      =SIMP(statut='f',typ='I'),  
+           NB_SECTEUR      =SIMP(statut='f',typ='I'),  
+           NB_COURONNE     =SIMP(statut='f',typ='I'),  
+         ),
+
+         IMPRESSION      =FACT(statut='f',min=1,max='**',
+           regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","IDEAS","CASTEM")),
+
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),  
+
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+           FICHIER         =SIMP(statut='f',typ='TXM'),  
+           UNITE           =SIMP(statut='f',typ='I'),  
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 19/12/2001   AUTEUR CIBHHPD D.NUNEZ 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op=  81,sd_prod=macr_elem_dyna,
+                    fr="Définition d un macro élément pour analyse modale ou harmonique par sous structuration dynamique",
+                    docu="U4.65.01-d",reentrant='n',
+         regles=(EXCLUS('MATR_AMOR','AMOR_REDUIT' ),),
+         BASE_MODALE     =SIMP(statut='o',typ=base_modale ),
+         MATR_RIGI       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),         
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","RITZ",
+                          "DIAG_MASS") ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,docu="U4.62.01-e",reentrant='f',
+                    fr="Définition d un macro-élément pour l analyse statique par sous structuration",
+        regles=(AU_MOINS_UN('DEFINITION','RIGI_MECA','MASS_MECA','CAS_CHARGE'),
+                ENSEMBLE('DEFINITION','EXTERIEUR'),),
+         DEFINITION      =FACT(statut='f',min=1,max=1,
+           MODELE          =SIMP(statut='o',typ=modele),
+           CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+           CHAR_MACR_ELEM  =SIMP(statut='f',typ=char_meca),
+           INST            =SIMP(statut='f',typ='R',defaut=0.0E+0 ),
+           NMAX_CAS        =SIMP(statut='f',typ='I',defaut=10),
+           NMAX_CHAR       =SIMP(statut='f',typ='I',defaut=10),
+         ),
+         EXTERIEUR       =FACT(statut='f',min=1,max=1,
+           regles=(AU_MOINS_UN('NOEUD','GROUP_NO'),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         ),
+         RIGI_MECA       =FACT(statut='f',min=1,max=1,
+         ),
+         MASS_MECA       =FACT(statut='f',min=1,max=1,
+           BIDO1           =SIMP(statut='f',typ='I',defaut=0),
+         ),
+         CAS_CHARGE      =FACT(statut='f',min=1,max='**',
+           NOM_CAS         =SIMP(statut='o',typ='TXM'),
+           SUIV            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
+           INST            =SIMP(statut='f',typ='R',defaut=0.E+0),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MACR_GOUJ2E_CALC=MACRO(nom="MACR_GOUJ2E_CALC",op=-23,sd_prod=evol_noli,
+                      fr=" ",docu="U4.GJ.20-a",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         DEFI_GOUJ       =FACT(statut='o',min=01,max=01,
+           TYPE            =SIMP(statut='o',typ='TXM',into=("M33","M64","M90","M115","M155","M180","M186")),
+           VARIANTE        =SIMP(statut='o',typ='TXM',into=("A","B","C","D","E","F","G","H","I","J","K","L","M",  
+                                                            "N","O","P","Q","R","S","T","U","V","W","X","Y","Z")),
+           FILET_TRONQUE   =SIMP(statut='f',typ='I',max='**'),  
+           FILET_TRONQA    =SIMP(statut='f',typ='I',max='**'),  
+           FILET_TRONQB    =SIMP(statut='f',typ='I',max='**'),  
+           FILET_JEU_HT    =SIMP(statut='f',typ='I',max='**'),  
+           FILET_JEU_HTA   =SIMP(statut='f',typ='I',max='**'),  
+           FILET_JEU_HTB   =SIMP(statut='f',typ='I',max='**'),  
+         ),
+         EXCIT           =FACT(statut='o',min=01,max=01,
+           TYPE_BLOCAGE    =SIMP(statut='o',typ='I',defaut=2,into=(1,2,3)),
+           FORCE_GOUJ      =SIMP(statut='o',typ='R'),  
+         ),
+         CALCUL          =FACT(statut='o',min=01,max=01,
+           TYPE_CALCUL     =SIMP(statut='o',typ='TXM',into=("ELASTIQUE","ELASTOPLASTIQUE")),
+           NB_INCR         =SIMP(statut='o',typ='I'),  
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="TABLE",    
+                                 into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED","TABLE")),
+           VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM'),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1 ,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MACR_GOUJ2E_MAIL=MACRO(nom="MACR_GOUJ2E_MAIL",op= -22,sd_prod=maillage,
+                      fr=" ",docu="U4.GJ.10-a",reentrant='n',
+         EXEC_MAILLAGE   =FACT(statut='o',min=1,max=1,
+           LOGICIEL        =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000") ),
+           UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
+           UNITE_MGIB      =SIMP(statut='f',typ='I',defaut=19),  
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10)),
+         ),
+         DEFI_GOUJ       =FACT(statut='o',min=1,max=1,
+           TYPE            =SIMP(statut='o',typ='TXM',into=("M33","M64","M90","M115","M155","M180","M186")),
+           VARIANTE        =SIMP(statut='o',typ='TXM',into=("A","B","C","D","E","F","G","H","I","J","K","L","M",  
+                                                            "N","O","P","Q","R","S","T","U","V","W","X","Y","Z")), 
+         ),
+         GEOM_GOUJ_BRID  =FACT(statut='o',min=1,max=1,
+           NB_FILET        =SIMP(statut='o',typ='I'),  
+           H_CORP_BRID     =SIMP(statut='o',typ='R'),  
+           R_EXT_BRID      =SIMP(statut='o',typ='R'),  
+           H_HAUT_BRID     =SIMP(statut='f',typ='R',defaut=0.0E+0),  
+           H_BAS_BRID      =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+           FILET_ABST      =SIMP(statut='f',typ='I',max='**'),  
+         ),
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
+           regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",    
+                                 into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED")),
+           FICHIER         =SIMP(statut='f',typ='TXM'),  
+           UNITE           =SIMP(statut='f',typ='I'),  
+           VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 25/01/2002   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=-24,docu="U7.03.02-a",
+                     fr="Donner des informations sur un maillage.",
+                     ang="To give information about a mesh.",
+#
+# 1. Le niveau d'information
+#
+         INFO           = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+#
+# 2. Version de HOMARD
+#
+         VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V5_1",
+                               into=("V5_1", "V5_N","V5_N_PERSO"),
+                           fr="Version de HOMARD",
+                           ang="HOMARD release"),
+#
+# 3. Langue des messages issus de HOMARD
+#
+         LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
+                               into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
+                           fr="Langue des messages issus de HOMARD.",
+                           ang="Language for HOMARD messages." ),
+#
+# 4. Le nom du maillage a analyser
+#
+         MAILLAGE       = SIMP(statut='o',typ=maillage,
+                           fr="Maillage à analyser.",
+                           ang="Mesh to be checked." ),
+#
+# 5. Les options ; par defaut, on ne fait que les nombres
+# 5.1. Nombre de noeuds et elements
+#
+         NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                          fr="Nombre de noeuds et éléments du maillage",
+                          ang="Number of nodes and elements in the mesh" ),
+#
+# 5.2. Determination de la qualite des elements du maillage
+#
+         QUALITE        = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Qualité du maillage",
+                          ang="Mesh quality" ),
+#
+# 5.3. Connexite du maillage
+#
+         CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Connexité du maillage.",
+                          ang="Mesh connexity." ),
+#
+# 5.4. Taille des sous-domaines du maillage
+#
+         TAILLE         = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Tailles des sous-domaines du maillage.",
+                          ang="Sizes of mesh sub-domains." ),
+#
+# 5.5. Controle de la non-interpenetration des elements
+#
+         INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Controle de la non interpénétration des éléments.",
+                          ang="Overlapping checking." ),
+#
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+MACRO_CARA_POUTRE=MACRO(nom="MACRO_CARA_POUTRE",op=-11,sd_prod=tabl_cara_geom,
+                       docu="U4.42.02-c",reentrant='n',
+                       fr="caractéristiques d'une section transversale de poutre à partir d'un maillage 2D",
+         regles=(EXCLUS('SYME_X','GROUP_MA_BORD'),
+                 EXCLUS('SYME_Y','GROUP_MA_BORD'),
+                 ENSEMBLE('LONGUEUR','LIAISON','MATERIAU') ,),
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut= 20 ),  
+         SYME_X          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         SYME_Y          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         GROUP_MA_BORD   =SIMP(statut='f',typ=grma,max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ORIG_INER       =SIMP(statut='f',typ='R',max='**'),  
+         NOEUD           =SIMP(statut='f',typ=no,max='**'),
+         GROUP_MA_INTE   =SIMP(statut='f',typ=grma,max='**'),
+         LONGUEUR        =SIMP(statut='f',typ='R'),  
+         MATERIAU        =SIMP(statut='f',typ=mater),
+         LIAISON         =SIMP(statut='f',typ='TXM',into=("ROTULE","ENCASTREMENT")),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MACRO_CHAR_F_U=MACRO(nom="MACRO_CHAR_F_U",op=-15,sd_prod=char_meca,
+                    fr=" ",docu="U4.72.07-a",reentrant='n',
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CHARGE          =SIMP(statut='o',typ=char_meca),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         COEF_IMPO       =SIMP(statut='f',typ='R',defaut=1.0E+0),  
+         NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="APRES",into=("NORMAL","APRES")),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+def macro_elas_mult_prod(self,NUME_DDL,CAS_CHARGE,**args ):
+  self.type_sdprod(NUME_DDL,nume_ddl)
+  if CAS_CHARGE[0]['NOM_CAS']      != None : return mult_elas
+  if CAS_CHARGE[0]['MODE_FOURIER'] != None : return fourier_elas
+  raise AsException("type de concept resultat non prevu")
+
+MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=-10,sd_prod=macro_elas_mult_prod,docu="U4.51.02-c1",reentrant='f',
+         regles=(UN_PARMI('CHAR_MECA_GLOBAL','CHAR_CINE_GLOBAL','LIAISON_DISCRET', ),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         NUME_DDL        =SIMP(statut='f',typ=(CO,nume_ddl)),# CO()
+         CHAR_MECA_GLOBAL=SIMP(statut='f',typ=char_meca,max='**'),
+         CHAR_CINE_GLOBAL=SIMP(statut='f',typ=char_meca,max='**'),
+         LIAISON_DISCRET =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         CAS_CHARGE      =FACT(statut='o',min=1,max='**',
+           regles=(UN_PARMI('NOM_CAS','MODE_FOURIER'),
+                   UN_PARMI('CHAR_MECA','CHAR_CINE','VECT_ASSE'),),
+           NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+           MODE_FOURIER    =SIMP(statut='f',typ='I' ),
+           TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
+           CHAR_MECA       =SIMP(statut='f',typ=char_meca,max='**'),
+           CHAR_CINE       =SIMP(statut='f',typ=char_meca,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',max='**',
+                                 into=("EFGE_ELNO_DEPL","EPOT_ELEM_DEPL","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
+                                       "SIGM_ELNO_CART","EFGE_ELNO_CART","DEGE_ELNO_DEPL","EPSI_ELNO_DEPL",
+                                       "EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL","EPSP_ELNO","EPSP_ELGA",
+                                       "ECIN_ELEM_DEPL","FLUX_ELGA_TEMP","FLUX_ELNO_TEMP","SOUR_ELGA_ELEC",
+                                       "PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG","INTE_ELNO_ACTI",
+                                       "INTE_ELNO_REAC","SIGM_NOZ1_ELGA","ERRE_ELEM_NOZ1","SIGM_NOZ2_ELGA",
+                                       "ERRE_ELEM_NOZ2","VNOR_ELEM_DEPL","ERRE_ELNO_ELGA","SIRE_ELNO_DEPL",
+                                       "ERRE_ELGA_NORE","EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","EQUI_ELNO_EPSI",
+                                       "EQUI_ELGA_EPSI","FORC_NODA","REAC_NODA","EPSI_NOEU_DEPL","SIGM_NOEU_DEPL",
+                                       "EFGE_NOEU_DEPL","EQUI_NOEU_SIGM","EQUI_NOEU_EPSI","FLUX_NOEU_TEMP") ),
+           NUME_COUCHE     =SIMP(statut='f',typ='I',defaut=1),
+           NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY")),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r),
+         ),
+#
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT") ),
+           b_mult_front    = BLOC ( condition = "METHODE == 'MULT_FRONT' ",
+                                    fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+            ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MACRO_MADMACS=MACRO(nom="MACRO_MADMACS",op=-9,docu="U7.03.21-c",
+                    fr="Impression au format IDEAS des données pour chainage entre Code_Aster et MADMACS",
+         regles=(UN_PARMI('MATR_ELEM_RIGI','MATR_RIGI'),
+                 UN_PARMI('MATR_ELEM_MASS','MATR_MASS'),
+                 PRESENT_ABSENT('MATR_ELEM_AMOR','MATR_AMOR'),),
+         FICHIER         =SIMP(statut='f',typ='TXM' ),  
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",)),
+         VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(5,)),
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl),
+         CHARGE          =SIMP(statut='o',typ=char_meca,max='**'),
+         MATR_ELEM_RIGI  =SIMP(statut='f',typ=matr_elem_depl_r),
+         MATR_RIGI       =SIMP(statut='f',typ=matr_asse_depl_r),
+         MATR_ELEM_MASS  =SIMP(statut='f',typ=matr_elem_depl_r),
+         MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r),
+         MATR_ELEM_AMOR  =SIMP(statut='f',typ=matr_elem_depl_r),
+         MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r),
+         MODE_MECA       =SIMP(statut='o',typ=mode_meca),
+         NMAX_MODE       =SIMP(statut='f',typ='I',defaut=10),  
+         INTERFACE       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO'),
+                   UN_PARMI('DDL_ACTIF','MASQUE'),),
+           NOM             =SIMP(statut='o',typ='TXM'),  
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           DDL_ACTIF       =SIMP(statut='f',typ='TXM',max='**'),  
+           MASQUE          =SIMP(statut='f',typ='TXM',max='**'),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def macro_matr_ajou_prod(self,MATR_AMOR_AJOU,MATR_MASS_AJOU,MATR_RIGI_AJOU,FORC_AJOU,**args):
+  self.type_sdprod(MATR_AMOR_AJOU,matr_asse_depl_r)
+  self.type_sdprod(MATR_MASS_AJOU,matr_asse_depl_r)
+  self.type_sdprod(MATR_RIGI_AJOU,matr_asse_depl_r)
+  if FORC_AJOU != None:
+    for m in FORC_AJOU:
+      self.type_sdprod(m['VECTEUR'],vect_asse_gene)
+
+  return None
+
+MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=-13,docu="U4.66.11-b",sd_prod=macro_matr_ajou_prod,
+      regles=(AU_MOINS_UN('MODE_MECA','DEPL_IMPO','MODELE_GENE'),
+              AU_MOINS_UN('MATR_MASS_AJOU','MATR_AMOR_AJOU','MATR_RIGI_AJOU'),
+              EXCLUS('MODE_MECA','DEPL_IMPO','MODELE_GENE'),
+              EXCLUS('MONO_APPUI','MODE_STAT',),
+             ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         GROUP_MA_FLUIDE =SIMP(statut='o',typ=grma),
+         GROUP_MA_INTERF =SIMP(statut='o',typ=grma),
+         MODELISATION    =SIMP(statut='o',typ='TXM',into=("PLAN","AXIS","3D")),
+         FLUIDE          =FACT(statut='o',min=1,max='**',
+           RHO             =SIMP(statut='o',typ='R'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           MAILLE          =SIMP(statut='f',typ=ma),
+         ),
+         DDL_IMPO        =FACT(statut='o',min=1,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO'),
+                   UN_PARMI('PRES_FLUIDE','PRES_SORTIE'),),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+           PRES_FLUIDE     =SIMP(statut='f',typ='R'),
+           PRES_SORTIE     =SIMP(statut='f',typ='R'),
+         ),
+         ECOULEMENT      =FACT(statut='f',min=1,max='**',
+           GROUP_MA_1      =SIMP(statut='o',typ=grma),
+           GROUP_MA_2      =SIMP(statut='o',typ=grma),
+           VNOR_1          =SIMP(statut='o',typ='R'),
+           VNOR_2          =SIMP(statut='f',typ='R'),
+           POTENTIEL       =SIMP(statut='f',typ=evol_ther),
+         ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca),
+         DEPL_IMPO       =SIMP(statut='f',typ=cham_no_depl_r),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene),
+         NUME_DDL_GENE   =SIMP(statut='f',typ=nume_ddl_gene),
+         DIST_REFE       =SIMP(statut='f',typ='R',defaut= 1.0E-2),
+         MATR_MASS_AJOU  =SIMP(statut='f',typ=(CO,matr_asse)),
+         MATR_RIGI_AJOU  =SIMP(statut='f',typ=(CO,matr_asse)),
+         MATR_AMOR_AJOU  =SIMP(statut='f',typ=(CO,matr_asse)),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",),),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,),),
+         FORC_AJOU       =FACT(statut='f',min=1,max='**',
+           DIRECTION     =SIMP(statut='o',typ='R',max=3),
+           NOEUD         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO      =SIMP(statut='f',typ=grno,max='**'),
+           VECTEUR       =SIMP(statut='o',typ=(CO,vect_asse_gene)),
+         ),
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non iversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+) ;
+#& MODIF COMMANDE  DATE 23/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+#% RESPONSABLE VABHHTS J.PELLET
+
+def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
+                        SOLVEUR,NUME_DDL,CHARGE,INST,**args):
+  """
+     Ecriture de la macro MACRO_MATR_ASSE
+  """
+  ier=0
+  # On met le mot cle NUME_DDL dans une variable locale pour le proteger
+  numeddl=NUME_DDL
+  # On importe les definitions des commandes a utiliser dans la macro
+  # Le nom de la variable doit etre obligatoirement le nom de la commande
+  CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM')
+  NUME_DDL      =self.get_cmd('NUME_DDL')
+  ASSE_MATRICE  =self.get_cmd('ASSE_MATRICE')
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.icmd=1
+
+  if SOLVEUR:
+    methode=SOLVEUR['METHODE']
+    if methode=='LDLT':
+      if SOLVEUR['RENUM']:
+         renum=SOLVEUR['RENUM']
+      else:
+         renum='RCMK'
+      if renum not in ('SANS','RCMK'):
+        ier=ier+1
+        self.cr.fatal("Avec methode LDLT, RENUM doit etre SANS ou RCMK.")
+        return ier
+    elif methode=='MULT_FRONT':
+      if SOLVEUR['RENUM']:
+         renum=SOLVEUR['RENUM']
+      else:
+         renum='MDA'
+      if renum not in ('MDA','MD','METIS'):
+        ier=ier+1
+        self.cr.fatal("Avec methode MULT_FRONT, RENUM doit etre MDA, MD ou RCMK.")
+        return ier
+    elif methode=='GCPC':
+      if SOLVEUR['RENUM']:
+         renum=SOLVEUR['RENUM']
+      else:
+         renum='SANS'
+      if renum not in ('SANS','RCMK'):
+        ier=ier+1
+        self.cr.fatal("Avec methode GCPC, RENUM doit etre SANS ou RCMK.")
+        return ier
+  else:
+    methode='MULT_FRONT'
+    renum  ='MDA'
+
+  if numeddl in self.sdprods:
+    # Si le concept numeddl est dans self.sdprods
+    # il doit etre  produit par la macro
+    # il faudra donc appeler la commande NUME_DDL
+    lnume = 1
+  else:
+    lnume = 0
+  lrigel = 0
+  lmasel = 0
+
+  iocc=0
+  for m in MATR_ASSE:
+    iocc=iocc+1
+    option=m['OPTION']
+    if iocc == 1 and lnume == 1 and option not in ('RIGI_MECA','RIGI_MECA_LAGR',
+                                                   'RIGI_THER','RIGI_ACOU')      :
+      ier=ier+1
+      self.cr.fatal("LA PREMIERE OPTION DOIT ETRE RIGI_MECA OU RIGI_THER OU RIGI_ACOU OU RIGI_MECA_LAGR")
+      return ier
+
+    if m['SIEF_ELGA']!=None and option!='RIGI_GEOM':
+      ier=ier+1
+      self.cr.fatal("SIEF_ELGA N EST ADMIS QU AVEC L OPTION RIGI_GEOM")
+      return ier
+
+    if m['MODE_FOURIER']!=None and option not in ('RIGI_MECA','RIGI_FLUI_STRU','RIGI_THER'):
+      ier=ier+1
+      self.cr.fatal("MODE_FOURIER N EST ADMIS QU AVEC UNE DES OPTIONS RIGI_MECA RIGI_FLUI_STRU RIGI_THER")
+      return ier
+
+    if (m['THETA']!=None or m['PROPAGATION']!=None) and option!='RIGI_MECA_LAGR':
+      ier=ier+1
+      self.cr.fatal("PROPAGATION ET,OU THETA NE SONT ADMIS QU AVEC L OPTION RIGI_MECA_LAGR")
+      return ier
+
+    motscles={'OPTION':option}
+    if option == 'AMOR_MECA':
+       if (not lrigel or not lmasel):
+          ier=ier+1
+          self.cr.fatal("""POUR CALCULER AMOR_MECA, IL FAUT AVOIR CALCULE
+                           RIGI_MECA ET MASS_MECA AUPARAVANT (DANS LE MEME APPEL)""")
+          return ier
+       if CHAM_MATER != None:
+          motscles['RIGI_MECA']   =rigel
+          motscles['MASS_MECA']   =masel
+    if CHARGE     != None:
+       if option[0:9] not in ('MASS_THER','RIGI_GEOM','MASS_ID_M'):
+                           motscles['CHARGE']      =CHARGE
+    if CHAM_MATER != None: motscles['CHAM_MATER']  =CHAM_MATER
+    if CARA_ELEM  != None: motscles['CARA_ELEM']   =CARA_ELEM
+    if INST       != None: motscles['INST']        =INST
+    if m['SIEF_ELGA']   :  motscles['SIEF_ELGA']   =m['SIEF_ELGA']
+    if m['MODE_FOURIER']:  motscles['MODE_FOURIER']=m['MODE_FOURIER']
+    if m['THETA']       :  motscles['THETA']       =m['THETA']
+    if m['PROPAGATION'] :  motscles['PROPAGATION'] =m['PROPAGATION']
+
+    __a=CALC_MATR_ELEM(MODELE=MODELE,**motscles)
+
+    if option == 'RIGI_MECA':
+      rigel  = __a
+      lrigel = 1
+    if option == 'MASS_MECA':
+      masel  = __a
+      lmasel = 1
+
+    if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'):
+      self.DeclareOut('num',numeddl)
+      # On peut passer des mots cles egaux a None. Ils sont ignores
+      num=NUME_DDL(MATR_RIGI=__a,METHODE=methode,RENUM=renum)
+    else:
+      num=numeddl
+
+    self.DeclareOut('mm',m['MATRICE'])
+    mm=ASSE_MATRICE(MATR_ELEM=__a,NUME_DDL=num)
+  return ier
+
+
+def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args):
+  if not MATR_ASSE:  raise AsException("Impossible de typer les concepts resultats")
+  if not NUME_DDL:  raise AsException("Impossible de typer les concepts resultats")
+  self.type_sdprod(NUME_DDL,nume_ddl)
+  for m in MATR_ASSE:
+    opti=m['OPTION']
+
+    if opti in ( "RIGI_MECA","RIGI_FLUI_STRU","RIGI_MECA_LAGR" ,
+       "MASS_MECA" , "MASS_FLUI_STRU" ,"RIGI_GEOM" ,"RIGI_ROTA",
+       "AMOR_MECA","IMPE_MECA","MASS_ID_MDEP_R","MASS_ID_MDNS_R",
+       "ONDE_FLUI","MASS_MECA_DIAG" ) : t=matr_asse_depl_r
+
+    if opti in ( "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",) : t=matr_asse_pres_c
+
+    if opti in ( "RIGI_THER","MASS_THER","RIGI_THER_CONV" ,
+       "RIGI_THER_CONV_D","MASS_ID_MTEM_R","MASS_ID_MTNS_R",) : t=matr_asse_temp_r
+
+    if opti == "RIGI_MECA_HYST"   : t= matr_asse_depl_c
+
+    self.type_sdprod(m['MATRICE'],t)
+  return None
+
+MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,docu="U4.61.21-c",
+                      sd_prod=macro_matr_asse_prod,
+                      fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ",
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou)),
+         INST            =SIMP(statut='f',typ='R'),
+         NUME_DDL        =SIMP(statut='o',typ=(nume_ddl,CO)),
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",
+                                 into=("LDLT","MULT_FRONT","GCPC")),
+           RENUM           =SIMP(statut='f',typ='TXM',into=("SANS","RCMK","MD","MDA","METIS")),
+         ),
+         MATR_ASSE       =FACT(statut='o',min=01,max='**',
+           MATRICE         =SIMP(statut='o',typ=(matr_asse,CO)),
+           OPTION          =SIMP(statut='o',typ='TXM',
+                                 into=("RIGI_MECA","MASS_MECA","MASS_MECA_DIAG",
+                                       "AMOR_MECA","RIGI_MECA_HYST","IMPE_MECA",
+                                       "ONDE_FLUI","RIGI_FLUI_STRU","MASS_FLUI_STRU",
+                                       "RIGI_ROTA","RIGI_GEOM","RIGI_MECA_LAGR",
+                                       "RIGI_THER","MASS_THER",
+                                       "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",
+                                       "MASS_ID_MTEM_R","MASS_ID_MTNS_R","MASS_ID_MDEP_R","MASS_ID_MDNS_R",)
+                                 ),
+           SIEF_ELGA       =SIMP(statut='f',typ=cham_elem_sief_r),
+           MODE_FOURIER    =SIMP(statut='f',typ='I'),
+           THETA           =SIMP(statut='f',typ=theta_geom),
+           PROPAGATION     =SIMP(statut='f',typ='R'),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=-18,fr=" ",docu="U7.03.11-a",
+         OPTION          =FACT(statut='o',min=01,max=01,
+           regles=(UN_PARMI('TOUT','MODULE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           MODULE          =SIMP(statut='f',typ='TXM',into=("PRE_MISS","MISS_EVOL","MISS_IMPE")),
+         ),
+         PROJET          =SIMP(statut='o',typ='TXM'),  
+         REPERTOIRE      =SIMP(statut='f',typ='TXM'),  
+         UNITE_IMPR_ASTER=SIMP(statut='f',typ='I',defaut=25),  
+         UNITE_OPTI_MISS =SIMP(statut='f',typ='I',defaut=26),  
+         UNITE_MODELE_SOL=SIMP(statut='f',typ='I',defaut=27),  
+         UNITE_RESU_IMPE =SIMP(statut='f',typ='I',defaut=30),  
+)  ;
+#& MODIF COMMANDE  DATE 23/01/2002   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def macro_mode_meca_prod(self,MATR_A,MATR_B,**args ):
+  self.type_sdprod(MATR_A,matr_asse_depl_r)
+  self.type_sdprod(MATR_B,matr_asse_depl_r)
+  return mode_meca
+
+MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op= -12,sd_prod=macro_mode_meca_prod,
+                     docu="U4.52.02-c",reentrant='n',
+         MATR_A          =SIMP(statut='o',typ=(CO,matr_asse_depl_r) ),
+         MATR_B          =SIMP(statut='o',typ=(CO,matr_asse_depl_r) ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#  ce mot cle ne devrait il pas etre dans calc_freq  
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="SORENSEN",    
+                               into=("TRI_DIAG","JACOBI","SORENSEN",) ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="SANS",    
+                               into=("MODE_RIGIDE","SANS") ),
+         CALC_FREQ       =FACT(statut='d',min=00,max=01,
+           regles=(UN_PARMI('FREQ','FREQ_MAX'),
+                   PRESENT_PRESENT('FREQ_MIN','FREQ_MAX'),
+                   PRESENT_PRESENT('FREQ_MAX','NB_BLOC_FREQ'),
+                   EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+           FREQ            =SIMP(statut='f',typ='R',max='**' ),  
+           FREQ_MIN        =SIMP(statut='f',typ='R' ),  
+           FREQ_MAX        =SIMP(statut='f',typ='R' ),  
+           NB_BLOC_FREQ    =SIMP(statut='f',typ='I' ),  
+           NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10 ),  
+           DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),  
+           COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+           NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8 ),  
+           NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),  
+           PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2 ),  
+           PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-10 ),  
+           PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12 ),  
+           NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5 ),  
+           NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30 ),  
+           PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.4E-10 ),  
+           NMAX_ITER_BATHE =SIMP(statut='f',typ='I' ,defaut= 12 ),  
+           PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2 ),  
+           NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12 ),  
+           PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E0 ),  
+           NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20 ),  
+           PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717 ),  
+           SEUIL_FREQ      =SIMP(statut='f',typ='R' ,defaut= 1.E-2 ),  
+           STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="NON" ,into=("OUI","NON") ),
+         ),
+         VERI_MODE       =FACT(statut='d',min=00,max=01,
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-6 ),  
+           PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-3 ),  
+           STURM           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         NORM_MODE       =FACT(statut='o',min=01,max='**',
+           MASS_INER       =SIMP(statut='o',typ=tabl_mass_iner ),
+           NORME           =SIMP(statut='f',typ='TXM',defaut="TRAN_ROTA",    
+                                 into=("MASS_GENE","RIGI_GENE","EUCL",           
+                                       "EUCL_TRAN","TRAN","TRAN_ROTA") ),
+           INFO            =SIMP(statut='f',typ='I',defaut= 1 ,into=(1,2) ),
+         ),
+         FILTRE_MODE     =FACT(statut='f',min=01,max=01,
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",    
+                                 into=("MASS_EFFE_UN","MASS_GENE") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
+         ),
+         IMPRESSION      =FACT(statut='d',min=01,max=01,
+           TOUT_PARA       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           CUMUL           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",    
+                                 into=("MASS_EFFE_UN","MASS_GENE",) ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 23/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def macro_proj_base_ops(self,BASE,NB_VECT,MATR_ASSE_GENE,VECT_ASSE_GENE,**args):
+  """
+     Ecriture de la macro MACRO_PROJ_BASE
+  """
+  ier=0
+  # On importe les definitions des commandes a utiliser dans la macro
+  NUME_DDL_GENE  =self.get_cmd('NUME_DDL_GENE')
+  PROJ_MATR_BASE =self.get_cmd('PROJ_MATR_BASE')
+  PROJ_VECT_BASE =self.get_cmd('PROJ_VECT_BASE')
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.icmd=1
+
+  nompro=None
+  iocc=0
+  if MATR_ASSE_GENE:
+    for m in MATR_ASSE_GENE:
+      iocc=iocc+1
+      if (iocc==1 or (m['PROFIL']!=nompro)):
+         _num=NUME_DDL_GENE(BASE=BASE,NB_VECT=NB_VECT,STOCKAGE=m['PROFIL'])
+      nompro=m['PROFIL']
+      motscles={}
+      if   m['MATR_ASSE']     :  motscles['MATR_ASSE']     =m['MATR_ASSE']
+      elif m['MATR_ASSE_GENE']:  motscles['MATR_ASSE_GENE']=m['MATR_ASSE_GENE']
+      else:
+          ier=ier+1
+          self.cr.fatal("MATR_ASSE et MATR_ASSE_GENE absents")
+          return ier
+      self.DeclareOut('mm',m['MATRICE'])
+      mm=PROJ_MATR_BASE(BASE=BASE,NUME_DDL_GENE=_num,NB_VECT=NB_VECT,**motscles)
+
+  iocc=0
+  if VECT_ASSE_GENE:
+    for v in VECT_ASSE_GENE:
+      iocc=iocc+1
+      if (iocc==1 and not MATR_ASSE_GENE):
+         _num=NUME_DDL_GENE(BASE=BASE,NB_VECT=NB_VECT,STOCKAGE='DIAG')
+      motscles={}
+      if   v['VECT_ASSE']     :  motscles['VECT_ASSE']     =v['VECT_ASSE']
+      elif v['VECT_ASSE_GENE']:  motscles['VECT_ASSE_GENE']=v['VECT_ASSE_GENE']
+      else:
+          ier=ier+1
+          self.cr.fatal("MATR_ASSE et MATR_ASSE_GENE absents")
+          return ier
+      motscles['TYPE_VECT']=v['TYPE_VECT']
+      self.DeclareOut('vv',v['VECTEUR'])
+      vv=PROJ_VECT_BASE(BASE=BASE,NUME_DDL_GENE=_num,NB_VECT=NB_VECT,**motscles)
+
+  return ier
+
+
+def macro_proj_base_prod(self,MATR_ASSE_GENE,VECT_ASSE_GENE,**args ):
+  if MATR_ASSE_GENE != None:
+    for m in MATR_ASSE_GENE:
+      self.type_sdprod(m['MATRICE'],matr_asse_gene_r)
+      self.type_sdprod(m['MATR_ASSE'],matr_asse_depl_r)
+  if VECT_ASSE_GENE != None:
+    for v in VECT_ASSE_GENE:
+      self.type_sdprod(v['VECTEUR'],vect_asse_gene)
+  return None
+
+MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,docu="U4.63.11-c",
+                      sd_prod=macro_proj_base_prod,
+                      fr="Projection des matrices et/ou vecteurs assemblés sur une base de vecteurs",
+         BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene) ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999),
+         MATR_ASSE_GENE  =FACT(statut='f',min=01,max='**',
+           MATRICE         =SIMP(statut='o',typ=(CO,matr_asse)),
+           MATR_ASSE       =SIMP(statut='f',typ=matr_asse_depl_r),
+           MATR_ASSE_GENE  =SIMP(statut='f',typ=matr_asse_gene_r),
+           PROFIL          =SIMP(statut='f',typ='TXM',defaut="DIAG",into=("PLEIN","DIAG") ),
+         ),
+         VECT_ASSE_GENE  =FACT(statut='f',min=01,max='**',
+           VECTEUR         =SIMP(statut='o',typ=(CO,vect_asse)),
+           TYPE_VECT       =SIMP(statut='f',typ='TXM',defaut="FORC"),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r),
+           VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MAJ_CATA=PROC(nom="MAJ_CATA",op=20,docu="U4.15.01-d",
+              fr="Compilation des catalogues de commandes et d éléments",
+         regles=(UN_PARMI('COMMANDE','ELEMENT','VALIDATION'),),
+
+         COMMANDE        =FACT(statut='f',min=01,max=01,
+           UNITE           =SIMP(statut='o',typ='I',val_min=1,val_max=99, ),
+         ),
+
+         ELEMENT         =FACT(statut='f',min=01,max=01,),
+
+         VALIDATION      =FACT(statut='f',min=01,max=01,
+           UNITE           =SIMP(statut='o',typ='I',val_min=1,val_max=99, ),
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 04/12/2001   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
+                   fr="Analyse mécanique statique linéaire",docu="U4.51.01-f",reentrant='n',
+                   regles=(EXCLUS("INST","LIST_INST"),
+                           AU_MOINS_UN('CHAM_MATER','CARA_ELEM',), ),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater,
+         fr="le CHAM_MATER est nécessaire, sauf si le modèle ne contient que des éléments discrets (modélisations DIS_XXX)",
+         ang="CHAM_MATER is compulsory, except if the model contains only discret elements (modelizations DIS_XXX)"),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem,
+         fr="le CARA_ELEM est nécessaire dès que le modèle contient des éléments de structure : coques, poutres, ...",
+         ang="CARA_ELEM is compulsory as soon as the model contains structural elements : plates, beams, ..."),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         EXCIT           =FACT(statut='o',min=1,max='**',
+           CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+         ),
+         INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         OPTION          =SIMP(statut='f',typ='TXM',max='**',
+                               into=("SIEF_ELGA_DEPL","SIGM_ELNO_DEPL","SIPO_ELNO_DEPL","EFGE_ELNO_DEPL",
+                                     "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPME_ELNO_DEPL","EPME_ELGA_DEPL",
+                                     "EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","EQUI_ELNO_EPSI","EQUI_ELGA_EPSI",
+                                     "EQUI_ELNO_EPME","EQUI_ELGA_EPME","DEGE_ELNO_DEPL","EPOT_ELEM_DEPL",
+                                     "ENEL_ELGA","ENEL_ELNO_ELGA") ),
+         NUME_COUCHE     =SIMP(statut='f',typ='I',defaut=1),
+         NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY") ),
+         ANGLE           =SIMP(statut='f',typ='I',defaut=0),
+         PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL") ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters"),
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),
+           ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut=8),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.E-6),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 25/09/2001   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+MEMO_NOM_SENSI=PROC(nom="MEMO_NOM_SENSI",op=129,docu="U4.31.xx-a",
+                    fr="Mémorisation des noms des concepts dérivés.",
+                    ang="Memorisation of the names of the sensitive concepts.",
+         regles=(AU_MOINS_UN('NOM','NOM_ZERO','NOM_UN'),),
+
+         NOM=FACT(statut='f',max='**',
+             NOM_SD=SIMP(statut='o',typ='TXM',
+                         fr="Nom de la structure de base",
+                         ang="Name of the basic structure"),
+             PARA_SENSI=SIMP(statut='o',typ=(para_sensi,theta_geom),
+                         fr="Nom du paramètre sensible base",
+                         ang="Name of the sensitive parameter"),
+             NOM_COMPOSE=SIMP(statut='f',typ='TXM',defaut=" ",
+                         fr="Nom de la structure composée",
+                         ang="Name of the built strcuture"),
+         ),
+
+         NOM_ZERO=SIMP(statut='f',typ=fonction,
+                       fr="Nom de la fonction nulle",
+                       ang="Name of the zero fonction"),
+         NOM_UN=SIMP  (statut='f',typ=fonction,
+                       fr="Nom de la fonction unité",
+                       ang="Name of the one fonction"),
+
+
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op=  80,sd_prod=mode_cycl,
+                    fr="Modes propres d une structure à répétitivité cyclique à partir d une base de modes propres réels",
+                    docu="U4.52.05-e",reentrant='n',
+         BASE_MODALE     =SIMP(statut='o',typ=base_modale ),
+         NB_MODE         =SIMP(statut='f',typ='I',defaut= 999 ),
+         NB_SECTEUR      =SIMP(statut='o',typ='I' ),
+         LIAISON         =FACT(statut='o',min=01,max=01,
+           DROITE          =SIMP(statut='o',typ='TXM' ),
+           GAUCHE          =SIMP(statut='o',typ='TXM' ),
+           AXE             =SIMP(statut='f',typ='TXM' ),
+         ),
+         VERI_CYCL       =FACT(statut='f',min=01,max=01,
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF",) ),
+           DIST_REFE       =SIMP(statut='f',typ='R' ),
+         ),
+         CALCUL          =FACT(statut='o',min=01,max=01,
+           TOUT_DIAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NB_DIAM         =SIMP(statut='f',typ='I',max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE"
+                                ,into=("PLUS_PETITE","CENTRE","BANDE") ),
+           b_centre      =BLOC(condition = "OPTION == 'CENTRE'",
+             FREQ            =SIMP(statut='o',typ='R',min=01,max=01),
+           ),
+           b_bande       =BLOC(condition = "OPTION == 'BANDE'",
+             FREQ            =SIMP(statut='o',typ='R',min=02,max=02),
+           ),
+#  NMAX_FREQ n a-t-il pas un sens qu avec OPTION CENTRE                                
+           NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10 ),
+           PREC_SEPARE     =SIMP(statut='f',typ='R',defaut= 100. ),
+           PREC_AJUSTE     =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+           NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 50 ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def mode_iter_inv_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
+  if TYPE_RESU == "MODE_FLAMB" : return mode_flamb
+  if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c
+  if AsType(MATR_A) == matr_asse_depl_r : return mode_meca
+  if AsType(MATR_A) == matr_asse_pres_r : return mode_acou
+  if AsType(MATR_A) == matr_asse_gene_r : return mode_gene
+  raise AsException("type de concept resultat non prevu")
+
+MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op=  44,sd_prod=mode_iter_inv_prod
+                    ,fr="Modes propres par itérations inverses ; valeurs propres et modes réels ou complexes",
+                     docu="U4.52.04-f",reentrant='n',
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_C          =SIMP(statut='f',typ=matr_asse_depl_r ),
+         TYPE_RESU       =SIMP(statut='f',position='global',typ='TXM',defaut="DYNAMIQUE",   
+                               into=("MODE_FLAMB","DYNAMIQUE"),fr="Type d analyse" ),
+         b_dynam         =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+           CALC_FREQ       =FACT(statut='o',min=1,max=1,fr="Choix des paramètres pour le calcul des valeurs propres",
+           
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="AJUSTE",into=("SEPARE","AJUSTE","PROCHE"),
+                                   fr="Choix de l option pour estimer les valeurs propres"  ),
+             FREQ            =SIMP(statut='o',typ='R',max='**'),
+             AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),     
+             NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 0,val_min=0 ),           
+             NMAX_ITER_SEPARE=SIMP(statut='f',typ='I' ,defaut= 30,val_min=0 ),
+             PREC_SEPARE     =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0 ),
+             NMAX_ITER_AJUSTE=SIMP(statut='f',typ='I',defaut= 15,val_min=0 ),
+             PREC_AJUSTE     =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0 ),
+
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0, ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0, ),
+           ),
+         ),
+         b_flamb        =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+           CALC_FREQ       =FACT(statut='o',min=1,max=1,fr="Choix des paramètres pour le calcul des valeurs propres",
+           
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="AJUSTE",into=("SEPARE","AJUSTE","PROCHE"),
+                                 fr="Choix de l option pour estimer les valeurs propres"  ),
+             CHAR_CRIT       =SIMP(statut='o',typ='R',max='**' ),
+             NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 0,val_min=0 ),           
+             NMAX_ITER_SEPARE=SIMP(statut='f',typ='I' ,defaut= 30,val_min=0 ),
+             PREC_SEPARE     =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0, ),
+             NMAX_ITER_AJUSTE=SIMP(statut='f',typ='I',defaut= 15 ),
+             PREC_AJUSTE     =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0, ),
+           
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0, ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0, ),
+           ),
+         ),
+         CALC_MODE       =FACT(statut='d',min=0,max=1,fr="Choix des paramètres pour le calcul des vecteurs propres",
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="DIRECT",into=("DIRECT","RAYLEIGH") ),
+           PREC            =SIMP(statut='f',typ='R',defaut= 1.E-5,val_min=0.E+0,fr="Précision de convergence" ),
+           NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ),
+         ),
+         VERI_MODE       =FACT(statut='d',min=0,max=1,
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0,
+                                 fr="Valeur limite admise pour l ereur a posteriori des modes"  ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 23/01/2002   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def mode_iter_simult_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
+  if TYPE_RESU == "MODE_FLAMB" : return mode_flamb
+  if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c
+  if AsType(MATR_A) == matr_asse_depl_r : return mode_meca
+  if AsType(MATR_A) == matr_asse_pres_r : return mode_acou
+  if AsType(MATR_A) == matr_asse_gene_r : return mode_gene
+  raise AsException("type de concept resultat non prevu")
+
+MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_prod,
+                      fr="Modes propres par itérations simultanées ; valeurs propres et modes propres réels ou complexes",
+                      docu="U4.52.03-e",reentrant='n',
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_C          =SIMP(statut='f',position='global',typ=matr_asse_depl_r ),
+         METHODE         =SIMP(statut='f',position='global',typ='TXM',defaut="SORENSEN",
+                               into=("TRI_DIAG","JACOBI","SORENSEN") ),
+         TYPE_RESU       =SIMP(statut='f',position='global',typ='TXM',defaut="DYNAMIQUE",
+                               into=("MODE_FLAMB","DYNAMIQUE"),
+                               fr="Type d analyse" ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="SANS",into=("MODE_RIGIDE","SANS"),
+                               fr="Calcul des modes de corps rigide, uniquement pour la méthode TRI_DIAG" ),
+
+         b_flamb         =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+           CALC_FREQ       =FACT(statut='d',min=0,max=1,
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
+                                   fr="Choix de l option et par conséquent du shift du problème modal" ),
+             b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_centre      =BLOC(condition = "OPTION == 'CENTRE'",
+                                 fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+               CHAR_CRIT       =SIMP(statut='o',typ='R',min=1,max=1,
+                                     fr="Charge critique autour de laquelle on cherche les charges critiques propres"),
+             ),
+             b_bande       =BLOC(condition = "(OPTION == 'BANDE')",
+                                 fr="Recherche des valeurs propres dans une bande donnée",
+               CHAR_CRIT       =SIMP(statut='o',typ='R',min=2,max=2,
+                                     fr="Valeur des deux charges critiques délimitant la bande de recherche"),
+             ),           
+             APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG"),
+                                   fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),           
+             regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+             DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+             COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+             b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
+               PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
+               NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+               PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
+               NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ), 
+             ),
+             b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
+               PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
+               NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
+               PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+               NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
+             ),
+             b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
+               PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),  
+               NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),  
+               PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
+             ),
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+           ),
+         ),
+
+         b_dynam        =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+           CALC_FREQ       =FACT(statut='d',min=0,max=1,
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
+                                   fr="Choix de l option et par conséquent du shift du problème modal" ),
+             b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_centre       =BLOC(condition = "OPTION == 'CENTRE'",
+                                  fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+               FREQ            =SIMP(statut='o',typ='R',min=1,max=1,
+                                     fr="Fréquence autour de laquelle on cherche les fréquences propres"),
+               AMOR_REDUIT     =SIMP(statut='f',typ='R',max=1,),
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_bande         =BLOC(condition = "(OPTION == 'BANDE')",
+                                   fr="Recherche des valeurs propres dans une bande donnée",
+               FREQ            =SIMP(statut='o',typ='R',min=2,max=2,
+                                     fr="Valeur des deux fréquences délimitant la bande de recherche"),
+             ),           
+             APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG"),
+                                   fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),           
+             regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+             DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+             COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+             b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
+               PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
+               NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+               PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
+               NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ), 
+             ),
+             b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
+               PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
+               NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
+               PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+               NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
+             ),
+             b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
+               PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),  
+               NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),  
+               PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
+             ),
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+           ),
+         ),
+
+         VERI_MODE       =FACT(statut='d',min=0,max=1,
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-3,val_min=0.E+0 ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0,
+                                 fr="Valeur limite admise pour l ereur a posteriori des modes" ),
+           STURM           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),        
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def mode_stat_prod(MODE_STAT,FORCE_NODALE,PSEUDO_MODE,**args):
+ if (MODE_STAT != None)          : return mode_stat_depl
+ if (PSEUDO_MODE !=None)         : return mode_stat_acce
+ if (FORCE_NODALE != None)       : return mode_stat_forc
+ raise AsException("type de concept resultat non prevu")
+MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_stat_prod,
+                   fr="Calcul de modes statiques",
+                   docu="U4.52.14-e",reentrant='n',
+         MATR_RIGI       =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
+               regles=(UN_PARMI('MODE_STAT','FORCE_NODALE','PSEUDO_MODE'),),
+         MODE_STAT       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
+                   UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ,),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ,),
+           AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+           SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         FORCE_NODALE    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
+                   UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",), ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",), ),
+           AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+           SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         PSEUDO_MODE       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('AXE','DIRECTION','TOUT','NOEUD','GROUP_NO' ),),
+           AXE             =SIMP(statut='f',typ='TXM',into=("X","Y","Z"),max=3),
+           DIRECTION       =SIMP(statut='f',typ='R',min=3,max=3),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           b_dir           =BLOC(condition = "DIRECTION != None",
+             NOM_DIR         =SIMP(statut='f',typ='TXM' ),),
+           b_cmp          =BLOC(condition="TOUT!= None or NOEUD!=None or GROUP_NO!=None",
+             regles=(UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+             TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+             SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'), 
+        ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca,
+                      docu="U4.66.21-c",reentrant='f',
+#  la commande modi_base _modale : reentrant = f ou o                      
+         regles=(EXCLUS('AMOR_UNIF','AMOR_REDUIT', ),),
+         BASE            =SIMP(statut='o',typ=mode_meca ),
+         BASE_ELAS_FLUI  =SIMP(statut='o',typ=melasflu ),
+         NUME_VITE_FLUI  =SIMP(statut='o',typ='I' ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         AMOR_UNIF       =SIMP(statut='f',typ='R' ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 29/01/2002   AUTEUR CIBHHPD D.NUNEZ 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage,
+                   fr="Modification de la connectivité de groupes de mailles 2D ou 3D affectées à la modélisation de contact",
+                   docu="U4.23.04-c",reentrant='o',
+      regles=(UN_PARMI('ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE'),
+              EXCLUS('EQUE_PIQUA','PLAQ_TUBE'),
+              EXCLUS('EQUE_PIQUA','TUBE_COUDE'),),
+         MAILLAGE        =SIMP(statut='o',typ=maillage ),
+
+         ORIE_CONTACT    =FACT(statut='f',min=01,max=01,
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+         ),
+
+         DEFORME         =FACT(statut='f',min=01,max=01,
+           OPTION          =SIMP(statut='o',typ='TXM',into=("TRAN","TRAN_APPUI") ),
+           DEPL            =SIMP(statut='o',typ=cham_no_depl_r ),
+        b_deform        =BLOC(condition = "OPTION=='TRAN_APPUI'", 
+           GROUP_NO_APPUI = SIMP(statut='o',typ=grno,max='**' ),
+           GROUP_NO_STRU = SIMP(statut='o',typ=grno,max='**' ),),
+         ),
+
+         EQUE_PIQUA      =FACT(statut='f',min=01,max=01,
+           GROUP_NO        =SIMP(statut='o',typ=grno),
+           E_BASE          =SIMP(statut='o',typ='R' ),
+           DEXT_BASE       =SIMP(statut='o',typ='R' ),
+           L_BASE          =SIMP(statut='o',typ='R' ),
+           L_CHANF         =SIMP(statut='o',typ='R' ),
+           H_SOUD          =SIMP(statut='o',typ='R' ),
+           ANGL_SOUD       =SIMP(statut='o',typ='R' ),
+           JEU_SOUD        =SIMP(statut='o',typ='R' ),
+           E_CORP          =SIMP(statut='o',typ='R' ),
+           DEXT_CORP       =SIMP(statut='o',typ='R' ),
+           AZIMUT          =SIMP(statut='o',typ='R' ),
+           RAFF_MAIL       =SIMP(statut='o',typ='TXM' ),
+           X_MAX           =SIMP(statut='o',typ='R' ),
+         ),
+         ORIE_PEAU_2D    =FACT(statut='f',min=01,max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+         ),
+         ORIE_PEAU_3D    =FACT(statut='f',min=01,max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+         ),
+         ORIE_NORM_COQUE =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('NOEUD','GROUP_NO'),
+                   PRESENT_PRESENT('NOEUD','VECT_NORM'),
+                   PRESENT_PRESENT('GROUP_NO','VECT_NORM'),),
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+           VECT_NORM       =SIMP(statut='f',typ='R',max=03),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+         ),
+         b_modele        =BLOC(condition = "(ORIE_PEAU_2D != None) or (ORIE_PEAU_3D != None) or(ORIE_NORM_COQUE != None)",
+           MODELE          =SIMP(statut='o',typ=modele ),
+         ),
+         PLAQ_TUBE       =FACT(statut='f',min=01,max=01,
+           DEXT            =SIMP(statut='o',typ='R' ),
+           EPAIS           =SIMP(statut='o',typ='R' ),
+           L_TUBE_P1       =SIMP(statut='o',typ='R' ),
+           AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),
+           COUTURE         =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",)  ),
+         ),
+         TUBE_COUDE      =FACT(statut='f',min=01,max=01,
+           ANGLE           =SIMP(statut='o',typ='R' ),
+           R_CINTR         =SIMP(statut='o',typ='R' ),
+           L_TUBE_P1       =SIMP(statut='o',typ='R' ),
+         ),
+         MODI_MAILLE     =FACT(statut='f',min=01,max=01,
+           regles=(AU_MOINS_UN('GROUP_MA_FOND','MAILLE_FOND','GROUP_NO_FOND','NOEUD_FOND'),),
+           OPTION          =SIMP(statut='o',typ='TXM',into=("NOEUD_QUART",) ),
+           GROUP_MA_FOND   =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_FOND     =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_FOND   =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_FOND      =SIMP(statut='f',typ=no,max='**'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 15/01/2002   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=obstacle,
+                   fr=" ",docu="U4.44.22-a",reentrant='f',
+      regles=(PRESENT_ABSENT('R_MOBILE','CRAYON'),
+              PRESENT_PRESENT('TUBE_NEUF','TABL_USURE'),
+              PRESENT_PRESENT('V_USUR_TUBE','V_USUR_OBST'),),
+         TUBE_NEUF       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         V_USUR_TUBE     =SIMP(statut='f',typ='R',max='**'),
+         V_USUR_OBST     =SIMP(statut='f',typ='R',max='**'),
+         TABL_USURE      =SIMP(statut='f',typ=tabl_post_usur),
+         INST            =SIMP(statut='f',typ='R'),  
+         OBSTACLE        =SIMP(statut='f',typ=obstacle),
+         GUIDE           =SIMP(statut='o',typ=obstacle),
+         CRAYON          =SIMP(statut='f',typ=obstacle),
+         R_MOBILE        =SIMP(statut='f',typ='R'),  
+         PERCEMENT       =SIMP(statut='f',typ='R',defaut=1),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+def modi_repere_prod(RESULTAT,**args):
+  if AsType(RESULTAT) == evol_elas :    return evol_elas
+  if AsType(RESULTAT) == evol_noli :    return evol_noli
+  if AsType(RESULTAT) == evol_ther :    return evol_ther
+  if AsType(RESULTAT) == dyna_trans :   return dyna_trans
+  if AsType(RESULTAT) == dyna_harmo :   return dyna_harmo
+  if AsType(RESULTAT) == mode_meca :    return mode_meca
+  if AsType(RESULTAT) == mode_flamb :   return mode_flamb
+  if AsType(RESULTAT) == mult_elas :    return mult_elas
+  if AsType(RESULTAT) == base_modale  : return base_modale
+  raise AsException("type de concept resultat non prevu")
+
+MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,docu="U4.74.01-a1",reentrant='n',
+                    fr="Impression des resultats dans un repere cylindrique",
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,mode_meca,
+                                               evol_noli,mult_elas,
+                                               evol_ther,base_modale,mode_flamb) ),
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                        'NOEUD_CMP','LIST_INST','LIST_FREQ','NOM_CAS'),),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8),
+
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+
+         MODI_CHAM       =FACT(statut='o',min=01,max='**',
+           TYPE_CHAM       =SIMP(statut='o',typ='TXM', max=1,    
+                                 into=("VECT_2D","VECT_3D","TORS_3D","TENS_2D","TENS_3D"),),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max=1 ),  
+           b_vect_2d       =BLOC(condition = "TYPE_CHAM=='VECT_2D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=2,max=2 ),),
+           b_vect_3d       =BLOC(condition = "TYPE_CHAM=='VECT_3D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=3,max=3 ),),
+           b_tors_3d       =BLOC(condition = "TYPE_CHAM=='TORS_3D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=6,max=6 ),),
+           b_tens_2d       =BLOC(condition = "TYPE_CHAM=='TENS_2D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=4,max=4 ),),
+           b_tens_3d       =BLOC(condition = "TYPE_CHAM=='TENS_3D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=6,max=6 ),),
+         ),
+         DEFI_REPERE     =FACT(statut='o',min=1,max=1,
+         regles=(UN_PARMI('ANGL_NAUT','ORIGINE'),),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="UTILISATEUR",
+                                 into=("UTILISATEUR","CYLINDRIQUE"),),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',min=1,max=3),
+           ORIGINE         =SIMP(statut='f',typ='R',min=2,max=3),  
+           AXE_Z           =SIMP(statut='f',typ='R',min=3,max=3),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def norm_mode_prod(MODE,**args ):
+  if AsType(MODE) == mode_meca   : return mode_meca
+  if AsType(MODE) == mode_meca_c : return mode_meca_c
+  if AsType(MODE) == mode_flamb  : return mode_flamb
+  raise AsException("type de concept resultat non prevu")
+
+NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
+               fr="Normalisation de modes propres",
+               docu="U4.52.11-e",reentrant='f',
+         regles=(UN_PARMI('NORME','NOEUD','AVEC_CMP','SANS_CMP'),),
+         MODE       =SIMP(statut='o',typ=(mode_meca,mode_flamb) ),
+         NORME      =SIMP(statut='f',typ='TXM',fr="Norme prédéfinie : masse généralisée, euclidienne,...",
+                          into=("MASS_GENE","RIGI_GENE","EUCL","EUCL_TRAN","TRAN","TRAN_ROTA") ),
+         NOEUD      =SIMP(statut='f',typ=no, fr="Composante donnée d un noeud spécifié égale à 1"),
+         b_noeud    =BLOC(condition = "NOEUD != None",
+           NOM_CMP    =SIMP(statut='o',typ='TXM' ),
+         ),
+         AVEC_CMP   =SIMP(statut='f',typ='TXM',max='**'),
+         SANS_CMP   =SIMP(statut='f',typ='TXM',max='**'),
+         MASS_INER  =SIMP(statut='f',typ=tabl_mass_iner ),
+         MODE_SIGNE =FACT(statut='f',min=00,max=01,fr="Imposer un signe sur une des composantes des modes",
+           NOEUD      =SIMP(statut='o',typ=no,fr="Noeud ou sera imposé le signe"),
+           NOM_CMP    =SIMP(statut='o',typ='TXM',fr="Composante du noeud ou sera imposé le signe" ),
+           SIGNE      =SIMP(statut='f',typ='TXM',defaut="POSITIF",into=("NEGATIF","POSITIF"),
+                            fr="Choix du signe" ),
+         ),
+         TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+         INFO       =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 22/01/2002   AUTEUR CIBHHPD D.NUNEZ 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl,docu="U4.61.11-f",reentrant='n',
+              fr="Etablissement de la numérotation des ddl avec ou sans renumérotation et du stockage de la matrice",
+                  regles=(UN_PARMI('MATR_RIGI','MODELE'),), 
+         MATR_RIGI       =SIMP(statut='f',typ=(matr_elem_depl_r ,matr_elem_depl_c,
+                                               matr_elem_temp_r,matr_elem_pres_c),max=100 ),
+         MODELE          =SIMP(statut='f',typ=modele ),
+         b_modele        =BLOC(condition = "MODELE != None",
+           CHARGE     =SIMP(statut='f',max='**',typ=(char_meca,char_ther,char_acou, ),),
+         ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+         b_mult_front    =BLOC(condition="METHODE=='MULT_FRONT'",fr="paramètres associés à la méthode multifrontale",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS"),defaut="METIS" ),
+         ),
+         b_ldlt          =BLOC(condition="METHODE=='LDLT'",fr="paramètres associés à la méthode LDLT",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
+         b_gcpc          =BLOC(condition="METHODE=='GCPC'",fr="paramètres associés à la méthode gradient conjugué",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene,
+                   fr="Etablissement de la numérotation des ddl d un modèle établi en coordonnées généralisées",
+                    docu="U4.65.03-d",reentrant='n',
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         BASE            =SIMP(statut='f',typ=(mode_meca,base_modale,mode_gene ) ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999 ),
+         STOCKAGE        =SIMP(statut='f',typ='TXM',defaut="LIGN_CIEL",into=("PLEIN","DIAG","LIGN_CIEL") ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_DYNA_ALEA=OPER(nom="POST_DYNA_ALEA",op= 132,sd_prod=tabl_post_alea,
+                    fr="Traitements statistiques de résultats de type interspectre et impression sur fichiers",
+                    docu="U4.84.04-d",reentrant='n',
+         regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I','OPTION'),),
+         INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
+         NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),  
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE_I    =SIMP(statut='f',typ='I',max='**' ),
+         NOEUD_I         =SIMP(statut='f',typ=no,max='**'),         
+         OPTION          =SIMP(statut='f',typ='TXM',into=("DIAG",) ),
+         b_nume_ordre_i =BLOC(condition = "NUME_ORDRE_I != None",
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I',max='**' ),   
+         ),  
+         b_noeud_i      =BLOC(condition = "NOEUD_I != None",
+           NOEUD_J         =SIMP(statut='o',typ=no,max='**'),
+           NOM_CMP_I       =SIMP(statut='o',typ='TXM',max='**' ),  
+           NOM_CMP_J       =SIMP(statut='o',typ='TXM',max='**' ),     
+         ),  
+         DEPASSEMENT     =FACT(statut='f',min=01,max='**',
+           fr="Loi de dépassement d un seuil pendant une durée donnée",
+           regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
+           VALE_MIN        =SIMP(statut='f',typ='R' ),  
+           VALE_MAX        =SIMP(statut='f',typ='R' ),  
+           PAS             =SIMP(statut='f',typ='R' ),  
+           DUREE           =SIMP(statut='f',typ='R',defaut= 1. ),  
+         ),
+         RAYLEIGH        =FACT(statut='f',min=01,max='**',
+           fr="Densité de probabilité de pic positif, loi adaptée à des signaux à bande étroite",
+           regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
+           VALE_MIN        =SIMP(statut='f',typ='R' ),  
+           VALE_MAX        =SIMP(statut='f',typ='R' ),  
+           PAS             =SIMP(statut='f',typ='R' ),  
+         ),
+         GAUSS           =FACT(statut='f',min=01,max='**',
+           fr="Densité de probabilité de pic positif, loi normale adaptée à des signaux large bande",
+           regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
+           VALE_MIN        =SIMP(statut='f',typ='R' ),  
+           VALE_MAX        =SIMP(statut='f',typ='R' ),  
+           PAS             =SIMP(statut='f',typ='R' ),  
+         ),
+         VANMARCKE       =FACT(statut='f',min=01,max='**',
+           fr="Probabilité de non dépassement de seuil pendant une durée donnée (analyse sismique)",
+           regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
+           VALE_MIN        =SIMP(statut='f',typ='R' ),  
+           VALE_MAX        =SIMP(statut='f',typ='R' ),  
+           PAS             =SIMP(statut='f',typ='R' ),  
+           DUREE           =SIMP(statut='f',typ='R',defaut= 10. ),  
+         ),
+         MOMENT          =SIMP(statut='f',typ='I',max='**',fr="Moments spectraux en complément des cinq premiers" ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=tabl_post_dyna,
+                      fr="Post-traitements en coordonnées généralisées issus de DYNA_TRAN_MODAL",
+                      docu="U4.84.02-d",reentrant='n',
+        regles=(UN_PARMI('CHOC','RELA_EFFO_DEPL', ),),
+         RESU_GENE       =SIMP(statut='o',typ=tran_gene ),
+         CHOC            =FACT(statut='f',min=01,max='**',
+                               fr="Analyse des non linéarités de choc",
+           INST_INIT       =SIMP(statut='f',typ='R',defaut= -1. ),  
+           INST_FIN        =SIMP(statut='f',typ='R',defaut= 999. ),  
+           NB_BLOC         =SIMP(statut='f',typ='I',defaut= 1 ),  
+           SEUIL_FORCE     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           DUREE_REPOS     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="USURE",into=("IMPACT","USURE") ),
+           NB_CLASSE       =SIMP(statut='f',typ='I',defaut= 10 ),  
+         ),
+         RELA_EFFO_DEPL  =FACT(statut='f',min=01,max=01,
+                               fr="Analyse des relationsnon linéaires effort-déplacement",
+           NOEUD           =SIMP(statut='o',typ=no),
+           NOM_CMP         =SIMP(statut='o',typ='TXM' ),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR VABHHTS J.TESELET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+def post_elem_prod( MASS_INER,ENER_POT,ENER_CIN,ENER_EXT,WEIBULL,
+                    CARA_GEOM,CARA_POUTRE,RICE_TRACEY,CHAR_LIMITE,
+                    INDIC_ENER,INDIC_SEUIL,ENER_ELAS,ENER_TOTALE,
+                    AIRE_INTERNE,**args ):
+  if MASS_INER    != None  : return tabl_mass_iner
+  if ENER_POT     != None  : return tabl_ener_pot
+  if ENER_CIN     != None  : return tabl_ener_cin
+  if ENER_EXT     != None  : return tabl_ener_ext
+  if WEIBULL      != None  : return tabl_weibull
+  if CARA_GEOM    != None  : return tabl_cara_geom
+  if CARA_POUTRE  != None  : return tabl_cara_geom
+  if RICE_TRACEY  != None  : return tabl_rice_tracey
+  if CHAR_LIMITE  != None  : return tabl_char_limite
+  if INDIC_ENER   != None  : return tabl_indic_ener
+  if INDIC_SEUIL  != None  : return tabl_indic_seuil
+  if ENER_ELAS    != None  : return tabl_ener_elas
+  if ENER_TOTALE  != None  : return tabl_ener_totale
+  if AIRE_INTERNE != None  : return tabl_aire_int
+  raise AsException("type de concept resultat non prevu")
+
+POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-d1",reentrant='f',
+               fr="Calcul de quantités globales (masse, inerties, énergie, ...) sur tout ou partie du modèle",
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                        'NOEUD_CMP','LIST_ORDRE','LIST_INST','LIST_FREQ','NOM_CAS'),
+                 EXCLUS('CHAM_GD','RESULTAT'),
+                 UN_PARMI('MASS_INER', 'ENER_POT', 'ENER_CIN','ENER_EXT',
+                          'WEIBULL', 'RICE_TRACEY', 'CARA_GEOM','CHAR_LIMITE',
+                          'CARA_POUTRE', 'INDIC_ENER', 'INDIC_SEUIL',
+                          'AIRE_INTERNE','ENER_ELAS','ENER_TOTALE'),
+                 PRESENT_PRESENT( 'MASS_INER', 'MODELE' ),
+                 PRESENT_PRESENT( 'CARA_GEOM', 'MODELE' ),
+                 PRESENT_PRESENT( 'AIRE_INTERNE', 'MODELE' ),
+                 PRESENT_PRESENT( 'CARA_POUTRE', 'MODELE' ),
+                 PRESENT_PRESENT( 'ENER_POT', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'ENER_CIN', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'WEIBULL', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'RICE_TRACEY', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'INDIC_ENER', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'INDIC_SEUIL', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'ENER_ELAS', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'ENER_TOTALE', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'CHAR_LIMITE', 'MODELE', 'CHAM_MATER' ),
+             ),
+         MODELE          =SIMP(statut='f',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
+         MODE_FOURIER    =SIMP(statut='f',typ='I',defaut=0),
+         NUME_COUCHE     =SIMP(statut='f',typ='I',defaut=1),
+         NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+         ANGLE           =SIMP(statut='f',typ='I',defaut=0),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         GEOMETRIE       =SIMP(statut='f',typ='TXM',defaut="INITIALE",into=("INITIALE","DEFORMEE")),
+         CHAM_GD         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_temp_r,cham_elem_ener_r) ),
+         RESULTAT        =SIMP(statut='f',typ=(mode_meca,evol_elas,evol_ther,evol_noli,mult_elas,
+                                               fourier_elas,dyna_trans) ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM',max='**'),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+
+         MASS_INER       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ORIG_INER       =SIMP(statut='f',typ='R',min=3,max=3 ),
+         ),
+
+         ENER_POT        =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         ENER_CIN        =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           OPTION          =SIMP(statut='f',typ='TXM',into=("MASS_MECA","MASS_MECA_DIAG"),
+                                                      defaut="MASS_MECA" ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         WEIBULL         =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="SIGM_ELGA",into=("SIGM_ELGA","SIGM_ELMOY")),
+           CORR_PLAST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut=1.),
+         ),
+
+         RICE_TRACEY     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="SIGM_ELGA",into=("SIGM_ELGA","SIGM_ELMOY")),
+           LOCAL           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+         ),
+
+         INDIC_ENER      =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         ENER_ELAS       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         ENER_TOTALE    =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         ENER_EXT     =FACT(statut='f',min=00,max=01,
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+         ),
+
+         CHAR_LIMITE     =FACT(statut='f',min=00,max=01,
+         CHAR_CSTE = SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON")
+         ),
+
+         INDIC_SEUIL     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         CARA_GEOM       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           SYME_X          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           SYME_Y          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           ORIG_INER       =SIMP(statut='f',typ='R',min=2,max=2),
+         ),
+
+         CARA_POUTRE     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA'),
+                   ENSEMBLE('LONGUEUR','LIAISON','MATERIAU'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA_INTE   =SIMP(statut='f',typ=grma,max='**'),
+           CARA_GEOM       =SIMP(statut='f',typ=tabl_cara_geom),
+           LAPL_PHI        =SIMP(statut='f',typ=evol_ther),
+           LAPL_PHI_Y      =SIMP(statut='f',typ=evol_ther),
+           LAPL_PHI_Z      =SIMP(statut='f',typ=evol_ther),
+           LIAISON         =SIMP(statut='f',typ='TXM',into=("ROTULE","ENCASTREMENT")),
+           LONGUEUR        =SIMP(statut='f',typ='R'),
+           MATERIAU        =SIMP(statut='f',typ=mater),
+           OPTION          =SIMP(statut='f',typ='TXM',into=("CARA_TORSION","CARA_CISAILLEMENT","CARA_GAUCHI") ),
+         ),
+
+         AIRE_INTERNE    =FACT(statut='f',min=1,max='**',
+           GROUP_MA_BORD   =SIMP(statut='o',typ=grma,max='**'),
+         ),
+ )  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=tabl_post_f_alea,docu="U4.84.03-c",reentrant='n',
+                    fr="Calcul du dommage subi par une structure soumise à unesollicitation de type aléatoire",
+         regles=(ENSEMBLE('MOMENT_SPEC_0','MOMENT_SPEC_2'),
+                 PRESENT_PRESENT( 'MOMENT_SPEC_4','MOMENT_SPEC_0'),
+                 UN_PARMI('TABL_POST_ALEA','MOMENT_SPEC_0'), ),
+         MOMENT_SPEC_0   =SIMP(statut='f',typ='R'),  
+         MOMENT_SPEC_2   =SIMP(statut='f',typ='R'),  
+         MOMENT_SPEC_4   =SIMP(statut='f',typ='R'),  
+         TABL_POST_ALEA  =SIMP(statut='f',typ=tabl_post_alea),
+         COMPTAGE        =SIMP(statut='o',typ='TXM',into=("PIC","NIVEAU")),
+         DUREE           =SIMP(statut='f',typ='R',defaut= 1.),  
+         CORR_KE         =SIMP(statut='f',typ='TXM',into=("RCCM",)),
+         DOMMAGE         =SIMP(statut='o',typ='TXM',into=("WOHLER",)),
+         MATER           =SIMP(statut='o',typ=mater),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=tabl_post_fatig,docu="U4.83.01-c",reentrant='n',
+                  fr="Calcul du dommage subi par une structure soumise à une histoire de chargement",
+
+         CHARGEMENT = SIMP(statut='o',typ='TXM',into=("UNIAXIAL","PERIODIQUE","QUELCONQUE")),
+
+         b_uniaxial = BLOC( condition = "CHARGEMENT=='UNIAXIAL'",
+                      regles=(PRESENT_PRESENT('CORR_KE','MATER'),
+                              PRESENT_PRESENT('CORR_SIGM_MOYE','MATER'),
+                              PRESENT_PRESENT('DOMMAGE','MATER'),),
+             HISTOIRE       = FACT(statut='o',min=1,max=1,
+                                 regles=(UN_PARMI('SIGM','EPSI'),),
+                                 SIGM  = SIMP(statut='f',typ=fonction),
+                                 EPSI  = SIMP(statut='f',typ=fonction),),
+             COMPTAGE       = SIMP(statut='o',typ='TXM',into=("RAINFLOW","RCCM","NATUREL")),
+             DELTA_OSCI     = SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+             COEF_MULT      = FACT(statut='f',min=1,max=1,
+                                 KT    = SIMP(statut='o',typ='R'),),
+             CORR_KE        = SIMP(statut='f',typ='TXM',into=("RCCM",)),
+             DOMMAGE        = SIMP(statut='f',typ='TXM',into=("WOHLER","MANSON_COFFIN",
+                                                              "TAHERI_MANSON","TAHERI_MIXTE")),
+             MATER          = SIMP(statut='f',typ=mater),
+             CORR_SIGM_MOYE = SIMP(statut='f',typ='TXM',into=("GOODMAN","GERBER")),
+             TAHERI_NAPPE   = SIMP(statut='f',typ=fonction),
+             TAHERI_FONC    = SIMP(statut='f',typ=fonction),
+             CUMUL          = SIMP(statut='f',typ='TXM',into=("LINEAIRE",)),
+         ),
+
+         b_periodique = BLOC( condition = "CHARGEMENT=='PERIODIQUE'",
+             HISTOIRE       = FACT(statut='o',min=1,max=1,
+                                 SIGM_XX  = SIMP(statut='o',typ=fonction),
+                                 SIGM_YY  = SIMP(statut='o',typ=fonction),
+                                 SIGM_ZZ  = SIMP(statut='o',typ=fonction),
+                                 SIGM_XY  = SIMP(statut='o',typ=fonction),
+                                 SIGM_XZ  = SIMP(statut='f',typ=fonction),
+                                 SIGM_YZ  = SIMP(statut='f',typ=fonction),),
+             CRITERE        = SIMP(statut='o',typ='TXM',into=("CROSSLAND","PAPADOPOULOS")),
+             DOMMAGE        = SIMP(statut='f',typ='TXM',into=("WOHLER",)),
+             MATER          = SIMP(statut='o',typ=mater),
+             COEF_CORR      = SIMP(statut='f',typ='R'),
+         ),
+
+         b_quelconque = BLOC( condition = "CHARGEMENT=='QUELCONQUE'",
+             HISTOIRE       = FACT(statut='o',min=1,max=1,
+                                 SIGM_XX  = SIMP(statut='o',typ=fonction),
+                                 SIGM_YY  = SIMP(statut='o',typ=fonction),
+                                 SIGM_ZZ  = SIMP(statut='o',typ=fonction),
+                                 SIGM_XY  = SIMP(statut='o',typ=fonction),
+                                 SIGM_XZ  = SIMP(statut='f',typ=fonction),
+                                 SIGM_YZ  = SIMP(statut='f',typ=fonction),
+                                 EPSP     = SIMP(statut='o',typ=fonction),
+                                 TEMP     = SIMP(statut='o',typ=fonction),),
+             DOMMAGE        = SIMP(statut='f',typ='TXM',into=("LEMAITRE",),defaut="LEMAITRE"),
+             MATER          = SIMP(statut='o',typ=mater),
+             CUMUL          = SIMP(statut='f',typ='TXM',into=("LINEAIRE",)),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_GOUJ2E=OPER(nom="POST_GOUJ2E",op=187,sd_prod=tabl_post_gouj2e,reentrant='n', 
+                 fr=" ",docu="U4.GJ.30-a",
+         TABLE           =SIMP(statut='o',typ=tabl_post_rele),
+)  ;
+#& MODIF COMMANDE  DATE 09/07/2001   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+POST_K1_K2_K3=OPER(nom="POST_K1_K2_K3",op=188,sd_prod=tabl_post_k,
+                   fr="Calcul des FIC par extrapolation du champ de déplacements sur les lèvres de la fissure",
+                   docu="U4.82.05-a",reentrant='n',
+         MODELISATION  =SIMP(statut='o',typ='TXM',
+                             into=("3D","AXIS","D_PLAN","C_PLAN"),
+                             fr="Modélisation cohérente avec celle utilisée pour le calcul des déplacements"),
+         FOND_3D       =SIMP(statut='f',typ=fond_fiss,fr="Fond de fissure issu de DEFI_FOND_FISS"),
+         b_fond_3d     =BLOC (condition="(FOND_3D != None)",
+                         MAILLAGE      = SIMP(statut='o',typ=maillage),
+                         PRECISION     = SIMP(statut='f',typ='R',defaut=0.001),
+                         NOEUD         = SIMP(statut='f',typ=no,max='**'),
+                         GROUP_NO      = SIMP(statut='f',typ=grno,max='**'),
+                         SANS_NOEUD    = SIMP(statut='f',typ=no,max='**'),
+                         SANS_GROUP_NO = SIMP(statut='f',typ=grno,max='**')
+                         ),
+         MATER         =SIMP(statut='o',typ=mater,
+                             fr="Matériau homogène et isotrope cohérent avec celui utilisé pour le calcul des déplacements"),
+         TABL_DEPL_SUP =SIMP(statut='o',typ=tabl_post_rele,
+                             fr="Table issue de post_releve_t sur les noeuds de la lèvre supérieure"),
+         TABL_DEPL_INF =SIMP(statut='o',typ=tabl_post_rele,
+                             fr="Table issue de post_releve_t sur les noeuds de la lèvre inférieure"),
+         ABSC_CURV_MAXI=SIMP(statut='f',typ='R',
+                             fr="distance maximum à partir du fond de fissure à utiliser pour le calcul"),  
+         PREC_VIS_A_VIS= SIMP(statut='f',typ='R',defaut=0.001),
+         INST          =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST     =SIMP(statut='f',typ=listr8),
+             b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
+               PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+         INFO          =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         VECT_K1       =SIMP(statut='o',typ='R',max='**',
+                             fr="Vecteur normal au plan de fissure, orienté de la lèvre inférieure vers la lèvre supérieure"),  
+         TITRE         =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 23/01/2002   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=tabl_post_rccm,
+               fr="Vérification des critères de niveau 0 et certains critères de niveau A du RCC-M-B3200 (Edition 1991)",
+               docu="U4.83.11-c",reentrant='n',
+         MATER           =SIMP(statut='o',typ=mater ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="VALE_MAX",into=("VALE_MAX","VALE_INST") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         MAILLAGE        =SIMP(statut='f',typ=maillage),
+         OPTION          =SIMP(statut='o',typ='TXM',max='**',
+                               into=("PM_PB",
+                                     "SN",
+                                     "FATIGUE_SPMAX",
+                                     "FATIGUE_ZH210"
+                                     ) ),
+         SEGMENT         =FACT(statut='o',min=01,max='**',fr="Segment sur lequel s effectue le depouillement",
+           regles=(AU_MOINS_UN('CHEMIN','GROUP_NO','NOEUD'),
+                   EXCLUS('CHEMIN','GROUP_NO'),
+                   EXCLUS('CHEMIN','NOEUD'),),
+           INTITULE        =SIMP(statut='f',typ='TXM' ),
+           CHEMIN          =SIMP(statut='f',typ=(courbe,surface),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+             b_acce_noeud     =BLOC(condition="(NOEUD != None)or(GROUP_NO != None)",
+               PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+         ),
+         TRANSITOIRE     =FACT(statut='o',min=01,max='**',fr="transitoire à dépouiller",
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+           RESULTAT        =SIMP(statut='o',typ=(evol_elas,evol_noli) ),
+           RESU_SIGM_THER  =SIMP(statut='f',typ=(evol_elas,evol_noli),fr="résultat sous chargement thermique seul" ),
+           NB_OCCUR        =SIMP(statut='f',typ='I',defaut= 1,fr="nombre d occurences réelles de ce transitoire" ),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("SIEF_ELNO_ELGA","SIGM_ELNO_DEPL") ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ),
+           b_inst          =BLOC(condition = "(INST != None) or (LIST_INST != None)" ,
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+           ), 
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+# ======================================================================
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=tabl_post_rele,docu="U4.81.21-d",reentrant='n',
+         ACTION          =FACT(statut='o',min=01,max='**',
+           regles=(AU_MOINS_UN('CHEMIN','GROUP_NO','NOEUD'),
+                   EXCLUS('CHEMIN','GROUP_NO'),
+                   EXCLUS('CHEMIN','NOEUD'),
+                   PRESENT_ABSENT('CHEMIN','GROUP_MA','MAILLE'),
+                   UN_PARMI('RESULTAT','CHAM_GD'),            
+                   UN_PARMI('TOUT_CMP','NOM_CMP','INVARIANT','ELEM_PRINCIPAUX','RESULTANTE'),
+                   PRESENT_PRESENT('TRAC_DIR','DIRECTION'),          
+                   PRESENT_PRESENT('TRAC_DIRECTION','DIRECTION'),
+                   ENSEMBLE('MOMENT','POINT'),
+                   PRESENT_PRESENT('MOMENT','RESULTANTE'),
+                   PRESENT_ABSENT('TOUT_CMP','TRAC_DIRECTION','TRAC_NORMALE'),
+                   PRESENT_ABSENT('TOUT_CMP','TRAC_DIR','TRAC_NOR'),
+                   PRESENT_PRESENT('ORIGINE','AXE_Z'),),
+           INTITULE        =SIMP(statut='o',typ='TXM'),  
+           CHEMIN          =SIMP(statut='f',typ=(courbe,surface) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="MODULE",into=("MODULE","REEL","IMAG")),
+           CHAM_GD         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_temp_r,cham_no_pres_r,cham_no_var2_r,
+                                                 cham_elem_sief_r,cham_elem_epsi_r,cham_elem_flux_r,cham_elem_crit_r,
+                                                 cham_elem_ener_r,cham_elem_dbel_r,cham_elem_pres_r,cham_elem_erreur,
+                                                 cham_elem_vari_r,cham_no_depl_c,cham_no_temp_c,cham_no_pres_c,
+                                                 cham_elem_sief_c,cham_elem_epsi_c)),
+           RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_ther,evol_noli,dyna_trans,
+                                                 mode_meca,mode_flamb,mode_acou,base_modale,mode_stat,
+                                                 mult_elas,fourier_elas,dyna_harmo,acou_harmo)),
+           b_sensibilite   =BLOC(condition="RESULTAT != None",
+                                 fr="Définition des paramètres de sensibilité",
+                                 ang="Definition of sensitivity parameters",
+             SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
+                                   fr="Liste des paramètres de sensibilité.",
+                                   ang="List of sensitivity parameters"),),
+
+           b_extrac        =BLOC(condition = "RESULTAT != None",fr="extraction des résultats",
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','NUME_MODE','LIST_MODE',         
+                            'INST','LIST_INST','FREQ','LIST_FREQ','NOEUD_CMP','NOM_CAS'), ),           
+             NOM_CHAM        =SIMP(statut='o',typ='TXM' ),  
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),  
+             LIST_ORDRE      =SIMP(statut='f',typ=listis),
+             NUME_MODE       =SIMP(statut='f',typ='I',max='**'),  
+             LIST_MODE       =SIMP(statut='f',typ=listis),
+             NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+             NOM_CAS         =SIMP(statut='f',typ='TXM',max='**'),  
+             FREQ            =SIMP(statut='f',typ='R',max='**'),  
+             LIST_FREQ       =SIMP(statut='f',typ=listr8),
+             INST            =SIMP(statut='f',typ='R',max='**'),  
+             LIST_INST       =SIMP(statut='f',typ=listr8),
+             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),  
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           ),
+           TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),  
+           INVARIANT       =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           ELEM_PRINCIPAUX =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           RESULTANTE      =SIMP(statut='f',typ='TXM',max='**'),  
+           MOMENT          =SIMP(statut='f',typ='TXM',max='**'),  
+           POINT           =SIMP(statut='f',typ='R',max='**'),  
+
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL",
+                                 into=("GLOBAL","LOCAL","POLAIRE","UTILISATEUR","CYLINDRIQUE"),),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',min=3,max=3),  
+           ORIGINE         =SIMP(statut='f',typ='R',min=3,max=3),  
+           AXE_Z           =SIMP(statut='f',typ='R',min=3,max=3),  
+
+           TRAC_NOR        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           TRAC_DIR        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),  
+           TRAC_DIRECTION  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           TRAC_NORMALE    =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           VECT_Y          =SIMP(statut='f',typ='R',max='**'),  
+           MOYE_NOEUD      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           OPERATION       =SIMP(statut='o',typ='TXM',into=("EXTRACTION","MOYENNE","MOYENNE_RCCM"),max=2),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_SIMPLIFIE=OPER(nom="POST_SIMPLIFIE",op=185,sd_prod=tabl_post_simpli,
+                    fr=" ",docu="U4.PS.10-a",reentrant='n',
+         MATER           =SIMP(statut='o',typ=(mater) ),
+         DEF_EQUI        =FACT(statut='f',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',max='**',defaut="UTO_2_3",
+                                 into=("UTO_2_3",) ),
+           EPAIS           =SIMP(statut='o',typ='R'),  
+           LONG_FISS       =SIMP(statut='o',typ='R'),  
+           LONG_LIGA_INT   =SIMP(statut='o',typ='R'),  
+           DEXT            =SIMP(statut='o',typ='R'),  
+           TEMP_ANALYSE    =SIMP(statut='f',typ='R'),  
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 07/02/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-c",reentrant='f',
+                fr="Calcul des volumes d'usure et des profondeurs d'usure",
+         regles=(UN_PARMI('RESU_GENE','PUIS_USURE'),
+                 PRESENT_PRESENT('RESU_GENE','NOEUD'),
+                 UN_PARMI('INST','LIST_INST'),),
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           TABL_USURE      =SIMP(statut='f',typ=tabl_post_usur),
+           INST_INIT       =SIMP(statut='f',typ='R'),  
+                         ),
+         RESU_GENE       =SIMP(statut='f',typ=tran_gene),
+         NOEUD           =SIMP(statut='f',typ=no,max=1),
+         INST_INIT       =SIMP(statut='f',typ='R',defaut=-1.0E+0),  
+         INST_FIN        =SIMP(statut='f',typ='R'),  
+         NB_BLOC         =SIMP(statut='f',typ='I',defaut= 1 ),  
+         PUIS_USURE      =SIMP(statut='f',typ='R'),  
+         LOI_USURE       =SIMP(statut='o',typ='TXM',into=("ARCHARD","KWU_EPRI","EDF_MZ")),
+         b_archard       =BLOC(condition = "LOI_USURE == 'ARCHARD'",
+           regles=(EXCLUS('MATER_USURE','OBSTACLE'),
+                   EXCLUS('MOBILE','USURE_OBST'),),
+           MOBILE          =FACT(statut='f',min=01,max=01,
+             COEF_USURE      =SIMP(statut='o',typ='R'), 
+           ),   
+           OBSTACLE        =FACT(statut='f',min=01,max=01,
+             COEF_USURE      =SIMP(statut='o',typ='R'), 
+           ),   
+           MATER_USURE     =SIMP(statut='f',typ='TXM'),  
+           USURE_OBST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         ),
+         b_kwu_epri        =BLOC(condition = "LOI_USURE == 'KWU_EPRI'",
+           regles=(UN_PARMI('MOBILE','MATER_USURE'), 
+                   EXCLUS('MATER_USURE','OBSTACLE'),
+                   EXCLUS('MOBILE','USURE_OBST'),),
+           MOBILE          =FACT(statut='f',min=01,max=01,
+             COEF_FNOR       =SIMP(statut='f',typ='R'),  
+             COEF_VTAN       =SIMP(statut='f',typ='R'),  
+             COEF_USURE      =SIMP(statut='f',typ='R'),  
+             COEF_K          =SIMP(statut='f',typ='R',defaut=5.0E+0),  
+             COEF_C          =SIMP(statut='f',typ='R',defaut=10.0E+0),  
+           ),   
+           OBSTACLE        =FACT(statut='f',min=01,max=01,
+             COEF_FNOR       =SIMP(statut='f',typ='R' ),  
+             COEF_VTAN       =SIMP(statut='f',typ='R' ),  
+             COEF_USURE      =SIMP(statut='o',typ='R'), 
+             COEF_K          =SIMP(statut='f',typ='R',defaut=5.0E+0),  
+             COEF_C          =SIMP(statut='f',typ='R',defaut=10.0E+0),  
+           ),   
+           MATER_USURE     =SIMP(statut='f',typ='TXM'),  
+           USURE_OBST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           FNOR_MAXI       =SIMP(statut='f',typ='R' ),  
+           VTAN_MAXI       =SIMP(statut='f',typ='R' ),  
+         ),
+         b_edf_mz          =BLOC(condition = "LOI_USURE == 'EDF_MZ'",
+           regles=(UN_PARMI('MOBILE','MATER_USURE'), 
+                   EXCLUS('MATER_USURE','OBSTACLE'),
+                   EXCLUS('MOBILE','USURE_OBST'),),
+           MOBILE          =FACT(statut='f',min=01,max=01,
+             COEF_USURE      =SIMP(statut='f',typ='R',defaut=1.0E-13),  
+             COEF_B          =SIMP(statut='f',typ='R',defaut=1.2E+0),  
+             COEF_N          =SIMP(statut='f',typ='R',defaut=2.44E-8),  
+             COEF_S          =SIMP(statut='f',typ='R',defaut=1.14E-16),  
+           ),   
+           OBSTACLE        =FACT(statut='f',min=01,max=01,
+             COEF_USURE      =SIMP(statut='o',typ='R',defaut=1.0E-13), 
+             COEF_B          =SIMP(statut='f',typ='R',defaut=1.2E+0),  
+             COEF_N          =SIMP(statut='f',typ='R',defaut=2.44E-8),  
+             COEF_S          =SIMP(statut='f',typ='R',defaut=1.14E-16),  
+           ),   
+           MATER_USURE     =SIMP(statut='f',typ='TXM'),  
+           USURE_OBST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         ),
+         SECTEUR         =FACT(statut='f',min=01,max='**',
+           CONTACT         =SIMP(statut='f',typ='TXM',into=("TUBE_BAV","TUBE_ALESAGE","TUBE_4_ENCO",  
+                                                            "GRAPPE_ALESAGE","TUBE_3_ENCO","TUBE_TUBE", 
+                                                            "GRAPPE_1_ENCO","GRAPPE_2_ENCO")),
+           COEF_USUR_MOBILE=SIMP(statut='f',typ='R'),  
+           COEF_USUR_OBST  =SIMP(statut='f',typ='R'),  
+           ANGL_INIT       =SIMP(statut='f',typ='R'),  
+           ANGL_FIN        =SIMP(statut='f',typ='R'),  
+         ),
+         CONTACT         =SIMP(statut='f',typ='TXM',into=("TUBE_BAV","TUBE_ALESAGE","TUBE_4_ENCO",    
+                                                          "GRAPPE_ALESAGE","TUBE_3_ENCO","TUBE_TUBE",        
+                                                          "GRAPPE_1_ENCO","GRAPPE_2_ENCO")),
+         RAYON_MOBILE    =SIMP(statut='f',typ='R'),  
+         RAYON_OBST      =SIMP(statut='f',typ='R'),  
+         LARGEUR_OBST    =SIMP(statut='f',typ='R'),  
+         ANGL_INCLI      =SIMP(statut='f',typ='R'),  
+         ANGL_ISTHME     =SIMP(statut='f',typ='R'),  
+         ANGL_IMPACT     =SIMP(statut='f',typ='R'),  
+         INST            =SIMP(statut='f',typ='R',max='**'),  
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         COEF_INST       =SIMP(statut='f',typ='R',defaut=1.0E+0),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_ZAC=OPER(nom="POST_ZAC",op= 175,sd_prod=mult_elas,docu="U4.83.21-b",reentrant='n',
+              fr="Donne l'état adapté ou accommodé d'une structure sous chargement cyclique élastique affine ou non",
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         EXCIT           =FACT(statut='o',min=01,max='**',
+           CHARGE          =SIMP(statut='o',typ=char_meca),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",into=("FIXE_CSTE",)),
+         ),
+         EVOL_ELAS       =SIMP(statut='o',typ=evol_elas),
+         b_evol_elas     =BLOC(condition="EVOL_ELAS != None",
+           regles=(UN_PARMI('NUME_ORDRE','LIST_INST','INST'),),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),  
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           INST            =SIMP(statut='f',typ='R',max='**'),  
+         ),
+         TEMP_ZAC        =SIMP(statut='f',typ='R',defaut=0.0E+0),  
+         EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+         b_evol_noli     =BLOC(condition="EVOL_NOLI != None",
+           INST_MAX        =SIMP(statut='o',typ='R'),  
+         ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),  
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POURSUITE=MACRO(nom="POURSUITE",op=0,repetable='n',fr="Poursuite d une étude",
+                docu="U4.11.03-f1",sd_prod = ops.POURSUITE,
+                op_init = ops.POURSUITE_context,fichier_ini = 1,
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+                           into=("OUI","NON"),defaut="OUI"),
+         BASE            =FACT(fr="définition des parmètres associés aux bases JEVEUX",
+                               statut='f',min=1,max=3,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           CAS             =SIMP(statut='f',typ='TXM'),
+           NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+           LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+           LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+         ),
+         IMPRESSION      =FACT(statut='f',min=1,max=3,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='o',typ='I'),
+         ),
+         CATALOGUE       =FACT(statut='f',min=1,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+         DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
+                               statut='f',min=1,max=1,
+           JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+                                 statut='f',typ='TXM',into=('TES',)),
+         ),
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=1,max=1,
+           GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
+           TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
+           TAILLE          =SIMP(statut='f',typ='I'),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut=800.),
+           PARTITION       =SIMP(statut='f',typ='R' ),
+         ),
+         CODE            =FACT("définition d un nom pour l'esemble d'une étude",
+                               statut='f',min=1,max=1,
+           NOM             =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I',defaut=15),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+PRE_CHAR_IDEAS=PROC(nom="PRE_CHAR_IDEAS",op=100,docu="U7.01.02-e",
+                    fr="Conversion de conditions aux limites et chargements IDEAS en commandes Aster",
+         UNITE_IDEAS     =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_ASTER     =SIMP(statut='f',typ='I',defaut=21),  
+         MODELE          =SIMP(statut='o',typ=modele),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+PRE_GIBI=PROC(nom="PRE_GIBI",op=49,docu="U7.01.11-f",
+              fr="Conversion d un fichier de maillage GIBI",
+         UNITE_GIBI      =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
+)  ;
+#& MODIF COMMANDE  DATE 17/09/2001   AUTEUR CIBHHGB G.BERTRAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+PRE_GMSH=PROC(nom="PRE_GMSH",op=47,docu="U7.01.01-f",
+               fr="Conversion d un fichier universel GMSH au format Aster",
+         UNITE_GMSH      =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47,docu="U7.01.01-f",
+               fr="Conversion d un fichier universel IDEAS-SUPERTAB au format Aster",
+         UNITE_IDEAS     =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+PROCEDURE=PROC(nom="PROCEDURE",op=-3, docu="U4.13.03-e",
+          fr="Nommer le fichier de commandes secondaires",
+          NOM  =SIMP(statut='f',typ='TXM',defaut=" "),
+) ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def prod_matr_cham_prod(MATR_ASSE,**args):
+  if AsType(MATR_ASSE) == matr_asse_depl_r : return cham_no_depl_r
+  if AsType(MATR_ASSE) == matr_asse_depl_c : return cham_no_depl_c
+  if AsType(MATR_ASSE) == matr_asse_temp_r : return cham_no_temp_r
+  if AsType(MATR_ASSE) == matr_asse_pres_c : return cham_no_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=prod_matr_cham_prod,
+                    fr="Effectuer le produit d une matrice par un vecteur",
+                    docu="U4.72.06-b",reentrant='n',
+         MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_pres_c ) ),
+         CHAM_NO         =SIMP(statut='o',typ=(cham_no_depl_r,cham_no_depl_c,cham_no_temp_r,cham_no_pres_c ) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 12/09/2001   AUTEUR MCOURTOI M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def proj_champ_prod(RESULTAT=None,CHAM_NO_REFE=None,**args ):
+    if AsType(RESULTAT)     == evol_ther      : return evol_ther
+    if AsType(RESULTAT)     == evol_elas      : return evol_elas
+    if AsType(RESULTAT)     == evol_noli      : return evol_noli
+    if AsType(RESULTAT)     == evol_char      : return evol_char
+    if AsType(CHAM_NO_REFE) == cham_no_depl_r : return cham_no_depl_r
+    if AsType(CHAM_NO_REFE) == cham_no_depl_c : return cham_no_depl_c
+    if AsType(CHAM_NO_REFE) == cham_no_pres_c : return cham_no_pres_c
+    if AsType(CHAM_NO_REFE) == cham_no_temp_r : return cham_no_temp_r
+    if AsType(CHAM_NO_REFE) == cham_no_epsi_r : return cham_no_epsi_r
+    if AsType(CHAM_NO_REFE) == cham_no_sief_r : return cham_no_sief_r
+    if AsType(CHAM_NO_REFE) == cham_no_flux_r : return cham_no_flux_r
+    raise AsException("type de concept resultat non prevu")
+
+PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,docu="U4.72.05-c1",reentrant='n',
+                fr="Projection d un champ aux noeuds sur les noeuds d un autre maillage",
+#
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="NUAGE_DEG_1",
+                               into=("NUAGE_DEG_0","NUAGE_DEG_1","ELEM",) ),
+         b_nuage         =BLOC(condition="(METHODE=='NUAGE_DEG_1') or (METHODE=='NUAGE_DEG_0')",
+                               fr="Lissage d un nuage de points",
+           CHAM_NO         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_depl_c,cham_no_pres_c,cham_no_temp_r,
+                                                 cham_no_epsi_r,cham_no_sief_r,cham_no_flux_r)),
+           CHAM_NO_REFE    =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_depl_c,cham_no_pres_c,cham_no_temp_r,
+                                                 cham_no_epsi_r,cham_no_sief_r,cham_no_flux_r)),
+         ),
+         b_elem          =BLOC(condition="METHODE=='ELEM'",
+                              fr="Utilisation des fonctions de forme",
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','LIST_INST','LIST_FREQ','LIST_ORDRE'), ),
+           RESULTAT        =SIMP(statut='f',typ=(evol_ther,evol_elas,evol_noli,evol_char) ),
+           MODELE_1        =SIMP(statut='f',typ=modele),
+           MODELE_2        =SIMP(statut='f',typ=modele),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           FREQ            =SIMP(statut='f',typ='R',max='**' ),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8),
+         ),
+
+         VIS_A_VIS       =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT_1','GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   AU_MOINS_UN('TOUT_2','GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),),
+           TOUT_1          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           TOUT_2          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+)  ;
+#& MODIF COMMANDE  DATE 26/09/2001   AUTEUR CIBHHPD D.NUNEZ 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def matr_asse_gene_prod(MATR_ASSE,MATR_ASSE_GENE,**args):
+  if AsType(MATR_ASSE) == matr_asse_depl_r  : return matr_asse_gene_r
+  if AsType(MATR_ASSE_GENE) == matr_asse_gene_r  : return matr_asse_gene_r
+  if AsType(MATR_ASSE) == matr_asse_depl_c  : return matr_asse_gene_c
+  if AsType(MATR_ASSE_GENE) == matr_asse_gene_c  : return matr_asse_gene_c
+  raise AsException("type de concept resultat non prevu")
+
+PROJ_MATR_BASE=OPER(nom="PROJ_MATR_BASE",op=  71,sd_prod=matr_asse_gene_prod,
+                    fr="Projection d une matrice assemblée sur une base (modale ou de RITZ)",
+                    docu="U4.63.12-e",reentrant='n',
+         regles=(UN_PARMI('MATR_ASSE','MATR_ASSE_GENE'),),            
+         BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene ) ),
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999 ),
+         MATR_ASSE       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c) ),
+         MATR_ASSE_GENE  =SIMP(statut='f',typ=(matr_asse_gene_r,matr_asse_gene_c) ),
+)  ;
+
+#& MODIF COMMANDE  DATE 19/12/2001   AUTEUR CIBHHAB N.RAHNI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def proj_mesu_modal_prod(MESURE,**args):
+     vale=MESURE['NOM_PARA']
+     if  vale == 'INST'   : return tran_gene
+     raise AsException("type de concept resultat non prevu")
+
+PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,
+                     sd_prod=proj_mesu_modal_prod,
+                     docu="U4.73.01-a",reentrant='n',
+                     fr="Extrapolation de resultats experimentaux sur un modele numerique en dynamique",
+
+# commentaire C. Durand-13/10/2000 :
+#le mot cle NOM_PARA, par construction, vaut tjs INST : donc on retourne TRAN_GENE a chaque fois
+#def proj_mesu_modal_prod(**args):
+#     vale=args['MESURE'].get_child('NOM_PARA').get_valeur()
+#     if  vale == 'INST'   : return tran_gene
+#     raise AsException("type de concept resultat non prevu")
+#PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,sd_prod=proj_mesu_modal_prod,)
+
+         MODELE          =SIMP(statut='f',typ=(modele) ),
+         MASS_GENE       =SIMP(statut='o',typ=(matr_asse_gene_r) ),
+         RIGI_GENE       =SIMP(statut='o',typ=(matr_asse_gene_r) ),
+         MESURE          =FACT(statut='o',min=01,max=01,
+           MODELE          =SIMP(statut='o',typ=(modele) ),
+           MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
+           CARA_ELEM       =SIMP(statut='o',typ=(cara_elem) ),
+           UNITE           =SIMP(statut='f',typ='I',defaut= 33 ),  
+           NOM_PARA        =SIMP(statut='f',typ='TXM',defaut="INST",into=("INST",) ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","SIGM_NOEU_DEPL","EPSI_NOEU_DEPL",) ),
+                         ),
+         REGULARISATION  =FACT(statut='f',min=01,max=01,
+      regles=(UN_PARMI('COEF_PONDER','COEF_PONDER_F', ),),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="TIKHONOV",into=("TIKHONOV",) ),
+           NORM_MIN        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+           COEF_PONDER     =SIMP(statut='f',typ='R',max='**' ),  
+           COEF_PONDER_F   =SIMP(statut='f',typ=(fonction),max='**' ),
+                         ),
+                       )  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=tabl_intsp,docu="U4.63.14-c",reentrant='n',
+                    fr="Projection d un ou plusieurs spectres de turbulenc sur un ensemble de bases modales ",
+      regles=(UN_PARMI('BASE_ELAS_FLUI','MODE_MECA','CHAM_NO'),
+              ENSEMBLE('FREQ_INIT','FREQ_FIN','NB_POIN'),),
+         SPEC_TURB       =SIMP(statut='o',typ=spectre,max='**' ),
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         CHAM_NO         =SIMP(statut='f',typ=cham_no_depl_r ),
+         FREQ_INIT       =SIMP(statut='f',typ='R',val_min=0.E+0 ),  
+         FREQ_FIN        =SIMP(statut='f',typ='R',val_min=0.E+0 ),  
+         NB_POIN         =SIMP(statut='f',typ='I' ),  
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG")),
+         GROUP_MA        =SIMP(statut='f',typ=grma),
+#  Quel est le type attendu derriere  MODELE_INTERFACE         
+         MODELE_INTERFACE=SIMP(statut='f',typ=modele),
+         VECT_X          =SIMP(statut='f',typ='R',min=3,max=3 ),  
+         VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3 ),  
+         ORIG_AXE        =SIMP(statut='f',typ='R',min=3,max=3 ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op=  72,sd_prod=vect_asse_gene,
+                    fr="Projection d un vecteur assemblé sur une base (modale ou de RITZ)",
+                    docu="U4.63.13-e",reentrant='n',
+         regles=(UN_PARMI('VECT_ASSE','VECT_ASSE_GENE'),),              
+         BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene ) ),
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999 ),
+         TYPE_VECT       =SIMP(statut='f',typ='TXM',defaut="FORC"),
+         VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+         VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=tabl_reca_weib,
+                     fr=" ",docu="U4.82.06-a",reentrant='n',
+         LIST_PARA       =SIMP(statut='o',typ='TXM',max='**',into=("SIGM_REFE","M",) ),
+         RESU            =FACT(statut='o',min=01,max='**',
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST',),
+                   AU_MOINS_UN('TOUT','GROUP_MA','MAILLE', ),),
+           EVOL_NOLI       =SIMP(statut='o',typ=(evol_noli) ),
+           MODELE          =SIMP(statut='o',typ=(modele) ),
+           CHAM_MATER      =SIMP(statut='o',typ=(cham_mater) ),
+           TEMPE           =SIMP(statut='f',typ='R' ),
+           LIST_INST_RUPT  =SIMP(statut='o',typ='R',max='**' ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.E0 ),
+                         ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="SIGM_ELGA",into=("SIGM_ELGA","SIGM_ELMOY",) ),
+         CORR_PLAST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MAXI_VRAI",into=("MAXI_VRAI","REGR_LINE",) ),
+         INCO_GLOB_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
+                       )  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE MCOURTOI M.COURTOIS
+def recu_fonction_prod(RESULTAT=None,TABLE=None,OBSTACLE=None,
+                       RESU_GENE=None,BASE_ELAS_FLUI=None,CHAM_GD=None,
+                       TYPE_RESU=None,**args):
+  if AsType(RESULTAT) == dyna_harmo : return fonction_c
+#  On ne sait pas interpreter les deux conditions suivantes
+  if TABLE != None :
+     if TYPE_RESU != None :
+        if TYPE_RESU == "FONCTION_C" : return fonction_c
+        if TYPE_RESU == "FONCTION"   : return fonction
+     else:
+        return fonction
+  if RESU_GENE      != None         : return fonction
+  if BASE_ELAS_FLUI != None         : return fonction
+  if RESULTAT       != None         : return fonction
+  if CHAM_GD        != None         : return fonction
+  if OBSTACLE       != None         : return fonction
+  raise AsException("type de concept resultat non prevu")
+
+RECU_FONCTION=OPER(nom="RECU_FONCTION",op=  90,sd_prod=recu_fonction_prod,
+                   fr="Extraire sous forme d une fonction, l évolution temporelle d une composante d un champ ou d une table",
+                   docu="U4.32.03-e1",reentrant='n',
+         regles=(UN_PARMI('CHAM_GD','RESULTAT','RESU_GENE','TABLE','BASE_ELAS_FLUI','OBSTACLE'),),
+
+         CHAM_GD         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_temp_r,cham_no_pres_r,cham_elem_sief_r,
+                                               cham_elem_vari_r,cham_elem_epsi_r,cham_elem_flux_r,
+                                               cham_elem_pres_r,cham_elem_meta_r ) ),
+         RESULTAT        =SIMP(statut='f',typ=(evol_elas,dyna_trans,evol_noli,evol_ther,dyna_harmo ) ),
+         RESU_GENE       =SIMP(statut='f',typ=tran_gene),
+#  concept table à créer
+         TABLE           =SIMP(statut='f',typ=table),
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu),
+         REPERE          =SIMP(statut='f',typ='TXM',into=("POLAIRE","GLOBAL") ),
+         OBSTACLE        =SIMP(statut='f',typ=obstacle),
+
+         b_tran_gene = BLOC ( condition = "RESU_GENE != None",
+                              fr="Récupération de la fonction concernant les chocs à partir d un concept TRAN_GENE",
+            regles=(PRESENT_PRESENT('SOUS_STRUC','INTITULE'),
+                    PRESENT_ABSENT('MULT_APPUI','CORR_STAT'),),
+             MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+             CORR_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+             ACCE_MONO_APPUI =SIMP(statut='f',typ=fonction),
+             PARA_X          =SIMP(statut='f',typ='TXM' ),
+             PARA_Y          =SIMP(statut='f',typ='TXM' ),
+             SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+             LIST_PARA       =SIMP(statut='f',typ=listr8 ),
+             INTITULE        =SIMP(statut='f',typ='TXM' ),
+         ),
+         b_base_elas_flui = BLOC ( condition = "BASE_ELAS_FLUI != None",
+                                   fr="Récupération de la fonction à partir d un concept melasflu",
+           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE'),),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           NUME_MODE       =SIMP(statut='o',typ='I' ),
+           PARA_X          =SIMP(statut='o',typ='TXM',into=("VITE_FLU",) ),
+           PARA_Y          =SIMP(statut='o',typ='TXM',into=("FREQ","AMOR") ),
+         ),
+         b_table = BLOC ( condition = "TABLE != None",fr="Récupération de la fonction à partir d un concept table",
+           regles=(UN_PARMI('PARA_X','NOM_PARA_TABL'),
+                   PRESENT_PRESENT('PARA_X','PARA_Y'),),
+           PARA_X          =SIMP(statut='f',typ='TXM',
+                                 fr="1ère colonne de la table qui définit la fonction à récupérer", ),
+           PARA_Y          =SIMP(statut='f',typ='TXM',
+                                 fr="2ème colonne de la table qui définit la fonction à récupérer", ),
+           NOM_PARA_TABL   =SIMP(statut='f',typ='TXM',into=("FONCTION",),
+                                 fr="Nom du paramètre de la table à qui est associé la fonction" ),
+           b_nom_para_tabl = BLOC (condition = "NOM_PARA_TABL != None",
+             TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="FONCTION",into=("FONCTION","FONCTION_C") ),
+           ),
+
+           FILTRE          =FACT(statut='f',min=1,max='**',
+              NOM_PARA        =SIMP(statut='o',typ='TXM' ),
+              CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",
+                                    into=("EQ","LT","GT","NE","LE","GE","VIDE",
+                                          "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI") ),
+              b_vale          =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+                 regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+                 VALE            =SIMP(statut='f',typ='R' ),
+                 VALE_I          =SIMP(statut='f',typ='I' ),
+                 VALE_C          =SIMP(statut='f',typ='C' ),
+                 VALE_K          =SIMP(statut='f',typ='TXM' ),),
+
+              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),
+         ),
+# RESULTAT
+         b_resu = BLOC ( condition = "RESULTAT != None", fr="Opérandes en cas de RESULTAT",
+           regles=(
+#    A voir par Mathieu Courtois : il existe de tests (SDNX300B) qui ne satisfont pas ce UN_PARMI
+#           UN_PARMI('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','TOUT_INST','LIST_INST','FREQ','LIST_FREQ'),
+                   AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD','NOEUD_CHOC','GROUP_NO_CHOC','NOM_PARA_RESU'),
+                   PRESENT_PRESENT('MAILLE','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_MA','NOM_CMP'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                   PRESENT_PRESENT('POINT','NOM_CMP'),
+                   EXCLUS('POINT','NOEUD'),
+                   EXCLUS('GROUP_MA','MAILLE'),
+                   EXCLUS('GROUP_NO','NOEUD'),
+                   EXCLUS('NOEUD_CHOC','GROUP_NO_CHOC'),
+                   UN_PARMI('NOM_CHAM','NOM_PARA_RESU'),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM' ),
+           NOM_PARA_RESU   =SIMP(statut='f',typ='TXM' ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+           TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+           b_prec = BLOC ( condition = "(INST != None) or (LIST_INST != None) or (FREQ != None) or (LIST_FREQ != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             INTERP_NUME     =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN") ),
+           ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+
+           MAILLE          =SIMP(statut='f',typ=ma),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+           POINT           =SIMP(statut='f',typ='I' ),
+           SOUS_POINT      =SIMP(statut='f',typ='I' ),
+           NOEUD_CHOC      =SIMP(statut='f',typ=no),
+           GROUP_NO_CHOC   =SIMP(statut='f',typ=grno),
+         ),
+# RESU_GENE
+         b_resu_gene = BLOC ( condition = "RESU_GENE != None", fr="Opérandes en cas de RESU_GENE",
+#    A voir par Mathieu Courtois : il existe de tests (SDNX300B) qui ne satisfont pas ce UN_PARMI
+#           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','TOUT_INST','LIST_INST','FREQ','LIST_FREQ'),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE","PTEM") ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+           TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+           b_prec = BLOC ( condition = "(INST != None) or (LIST_INST != None) or (FREQ != None) or (LIST_FREQ != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             INTERP_NUME     =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN") ),
+           ),
+           b_local_cham = BLOC ( condition = "NOM_CHAM!='PTEM'", fr="Opérandes de localisation du champ",
+             regles=(AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD','NOEUD_CHOC','GROUP_NO_CHOC'),
+                     PRESENT_PRESENT('MAILLE','NOM_CMP'),
+                     PRESENT_PRESENT('GROUP_MA','NOM_CMP'),
+                     PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                     PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                     PRESENT_PRESENT('POINT','NOM_CMP'),
+                     EXCLUS('POINT','NOEUD'),
+                     EXCLUS('GROUP_MA','MAILLE'),
+                     EXCLUS('GROUP_NO','NOEUD'),
+                     EXCLUS('NOEUD_CHOC','GROUP_NO_CHOC'),),
+             NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+
+             MAILLE          =SIMP(statut='f',typ=ma),
+             GROUP_MA        =SIMP(statut='f',typ=grma),
+             NOEUD           =SIMP(statut='f',typ=no),
+             GROUP_NO        =SIMP(statut='f',typ=grno),
+             POINT           =SIMP(statut='f',typ='I' ),
+             SOUS_POINT      =SIMP(statut='f',typ='I' ),
+             NOEUD_CHOC      =SIMP(statut='f',typ=no),
+             GROUP_NO_CHOC   =SIMP(statut='f',typ=grno),
+           ),
+         ),
+# CHAM_GD
+         b_cham_gd = BLOC ( condition = "(CHAM_GD != None)", fr="Opérandes en cas de CHAM_GD",
+
+           regles=(AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD','NOEUD_CHOC','GROUP_NO_CHOC'),
+                   PRESENT_PRESENT('MAILLE','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_MA','NOM_CMP'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                   PRESENT_PRESENT('POINT','NOM_CMP'),
+                   EXCLUS('POINT','NOEUD'),
+                   EXCLUS('GROUP_MA','MAILLE'),
+                   EXCLUS('GROUP_NO','NOEUD'),
+                   EXCLUS('NOEUD_CHOC','GROUP_NO_CHOC'),),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+
+           MAILLE          =SIMP(statut='f',typ=ma),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+           POINT           =SIMP(statut='f',typ='I' ),
+           SOUS_POINT      =SIMP(statut='f',typ='I' ),
+           NOEUD_CHOC      =SIMP(statut='f',typ=no),
+           GROUP_NO_CHOC   =SIMP(statut='f',typ=grno),
+         ),
+###
+         NOM_PARA        =SIMP(statut='f',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC") ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+RECU_GENE=OPER(nom="RECU_GENE",op=  76,sd_prod=vect_asse_gene,docu="U4.71.03-e",reentrant='n',
+               fr="Récupération d un champ de grandeur à partir d un résultat en coordonnées généralisées",
+         RESU_GENE       =SIMP(statut='o',typ=tran_gene ),
+         INST            =SIMP(statut='o',typ='R' ),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE") ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF" ,into=("ABSOLU","RELATIF") ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+)  ;
+#& MODIF COMMANDE  DATE 19/12/2001   AUTEUR PBBHHPB P.BADEL 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+RECU_TABLE=OPER(nom="RECU_TABLE",op= 174,sd_prod=table,
+                fr=" ",docu="U4.71.02-a1",reentrant='n',
+         CO              =SIMP(statut='o',typ=assd),
+         regles=(PRESENT_ABSENT('NOM_TABLE','NOM_PARA')),
+         NOM_TABLE       =SIMP(statut='f',typ='TXM' ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM' ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def reso_grad_prod(MATR_ASSE,**args ):
+  if AsType(MATR_ASSE) == matr_asse_depl_r : return cham_no_depl_r
+  if AsType(MATR_ASSE) == matr_asse_temp_r : return cham_no_temp_r
+  if AsType(MATR_ASSE) == matr_asse_pres_r : return cham_no_pres_r
+  raise AsException("type de concept resultat non prevu")
+
+RESO_GRAD=OPER(nom="RESO_GRAD",op=  84,sd_prod=reso_grad_prod,
+               fr="Résolution par la méthode du gradient conjugué préconditionné",
+               docu="U4.55.04-e",reentrant='f',
+         MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+         CHAM_NO         =SIMP(statut='o',typ=(cham_no_depl_r,cham_no_temp_r,cham_no_pres_r ) ),
+         CHAM_CINE       =SIMP(statut='f',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_r ) ),
+         MATR_FACT       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+         NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),  
+         REPRISE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1E-6 ),  
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def reso_ldlt_prod(CHAM_NO,**args ):
+  if AsType(CHAM_NO) == cham_no_temp_r : return cham_no_temp_r
+  if AsType(CHAM_NO) == cham_no_depl_r : return cham_no_depl_r
+  if AsType(CHAM_NO) == cham_no_pres_r : return cham_no_pres_r
+  if AsType(CHAM_NO) == cham_no_temp_c : return cham_no_temp_c
+  if AsType(CHAM_NO) == cham_no_depl_c : return cham_no_depl_c
+  if AsType(CHAM_NO) == cham_no_pres_c : return cham_no_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+RESO_LDLT=OPER(nom="RESO_LDLT",op=15,sd_prod=reso_ldlt_prod,reentrant='f',
+               fr="Résolution en place ou hors place d un système factorisé",docu="U4.55.02-f",
+         MATR_FACT       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,
+                                               matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ),
+         CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_r,
+                                               cham_no_temp_c,cham_no_depl_c,cham_no_pres_c) ),
+         CHAM_CINE       =SIMP(statut='f',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_c) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def rest_base_phys_prod(RESU_GENE,RESULTAT,**args ):
+  if AsType(RESU_GENE) == tran_gene : return dyna_trans
+  if AsType(RESU_GENE) == mode_gene : return mode_meca
+  if AsType(RESU_GENE) == mode_cycl : return mode_meca
+  if AsType(RESU_GENE) == harm_gene : return dyna_harmo
+  if AsType(RESULTAT)  == mode_meca : return mode_meca
+  raise AsException("type de concept resultat non prevu")
+
+REST_BASE_PHYS=OPER(nom="REST_BASE_PHYS",op=  75,sd_prod=rest_base_phys_prod,
+                    fr="Restituer dans la base physique des résultats en coordonnées généralisées",
+                    docu="U4.63.21-e",reentrant='n',
+        regles=(UN_PARMI('RESU_GENE','RESULTAT'),
+                EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','TOUT_INST'),
+                EXCLUS('TOUT_INST','NUME_ORDRE','INST','LIST_INST','TOUT_ORDRE'),
+#  Doc U à revoir
+                PRESENT_ABSENT('MULT_APPUI','CORR_STAT'),
+                EXCLUS('MULT_APPUI','NOEUD','GROUP_NO'),
+                EXCLUS('CORR_STAT','NOEUD','GROUP_NO'),             
+                EXCLUS('NOEUD','GROUP_NO'), 
+                PRESENT_PRESENT('RESULTAT','SQUELETTE'),
+                PRESENT_PRESENT('ACCE_MONO_APPUI','DIRECTION'),),
+         RESU_GENE       =SIMP(statut='f',typ=(tran_gene,mode_gene,mode_cycl,harm_gene ) ),
+         RESULTAT        =SIMP(statut='f',typ=mode_meca ),
+         
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),  
+         TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         INST            =SIMP(statut='f',typ='R',max='**' ),  
+         LIST_INST       =SIMP(statut='f',typ=listr8 ),
+         FREQ            =SIMP(statut='f',typ='R',max='**' ),  
+         LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+         b_prec_crit     =BLOC(condition = "INST != None or LIST_INST != None or FREQ != None or LIST_FREQ != None",
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
+         ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+         
+         MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         CORR_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',max=8,defaut="ACCE",   
+                               into=("DEPL","VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO_DEPL","SIPO_ELNO_DEPL",                 
+                                     "SIGM_ELNO_DEPL","FORC_NODA",) ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         NOEUD           =SIMP(statut='f',typ=no,max='**'),
+         ACCE_MONO_APPUI =SIMP(statut='f',typ=fonction),
+         DIRECTION       =SIMP(statut='f',typ='R',max='**' ),
+
+         SQUELETTE       =SIMP(statut='f',typ=squelette ),
+         SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),  
+         SECTEUR         =SIMP(statut='f',typ='I',defaut= 1 ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 28/03/2001   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=tabl_intsp,
+                    docu="U4.63.22-c",reentrant='n',
+         regles=(AU_MOINS_UN('BASE_ELAS_FLUI','MODE_MECA'),),
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         BANDE           =SIMP(statut='f',typ='R',min=02,max=02 ),  
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),  
+         INTE_SPEC_GENE  =SIMP(statut='o',typ=tabl_intsp ),
+         NOEUD           =SIMP(statut='o',typ=no,max='**'),
+         NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',max=07,    
+                               into=("DEPL","VITE","ACCE","EFGE_ELNO_DEPL",      
+                                     "SIPO_ELNO_DEPL","SIGM_ELNO_DEPL","FORC_NODA") ),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc), ),
+         EXCIT           =FACT(statut='f',max=01,
+           NOEUD           =SIMP(statut='o',typ=no,max='**'),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
+         ),
+         MOUVEMENT       =SIMP(statut='f',typ='TXM',defaut="ABSOLU",into=("RELATIF","ABSOLU","DIFFERENTIEL") ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="DIAG_DIAG",    
+                               into=("DIAG_TOUT","DIAG_DIAG","TOUT_TOUT","TOUT_DIAG") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+RETOUR=PROC(nom="RETOUR",op= -2,docu="U4.13.02-e",
+            fr="Retour au fichier de commandes appelant", 
+) ;
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR VABHHTS J.TESELET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+#  RESPONSABLE ADBHHVV V.CANO
+STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
+                   fr="Analyse mécanique statique non linéaire",
+                   docu="U4.51.03-e1",reentrant='f',
+         regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS'),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='o',min=1,max='**',
+           CHARGE          =SIMP(statut='o',typ=char_meca),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
+         ),
+         VARI_COMM           =FACT(statut='f',
+           regles=(AU_MOINS_UN('SECH','IRRA','HYDR'),),
+           IRRA     =SIMP(statut='f',typ=evol_varc),
+           SECH     =SIMP(statut='f',typ=evol_ther),
+           HYDR     =SIMP(statut='f',typ=evol_ther),
+         ),
+         COMP_INCR       =FACT(statut='f',min=1,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="VMIS_ISOT_TRAC",
+                                 into=( "ELAS",
+                                        "VMIS_ISOT_TRAC",
+                                        "VMIS_ISOT_LINE",
+                                        "VMIS_ECMI_TRAC",
+                                        "VMIS_ECMI_LINE",
+                                        "LABORD_1D",
+                                        "ENDO_LOCAL",
+                                        "ENDO_FRAGILE",
+                                        "BETON_ENDO_LOCAL",
+                                        "RUPT_FRAG",
+                                        "PLAS_GRAD_LINE",
+                                        "PLAS_GRAD_TRAC",
+                                        "DURC_GRAD",
+                                        "META_P_IL",
+                                        "META_P_IL_PT",
+                                        "META_P_IL_RE",
+                                        "META_P_IL_PT_RE",
+                                        "META_V_IL",
+                                        "META_V_IL_PT",
+                                        "META_V_IL_RE",
+                                        "META_V_IL_PT_RE",
+                                        "META_P_INL",
+                                        "META_P_INL_PT",
+                                        "META_P_INL_RE",
+                                        "META_P_INL_PT_RE",
+                                        "META_V_INL",
+                                        "META_V_INL_PT",
+                                        "META_V_INL_RE",
+                                        "META_V_INL_PT_RE",
+                                        "META_P_CL",
+                                        "META_P_CL_PT",
+                                        "META_P_CL_RE",
+                                        "META_P_CL_PT_RE",
+                                        "META_V_CL",
+                                        "META_V_CL_PT",
+                                        "META_V_CL_RE",
+                                        "META_V_CL_PT_RE",
+                                        "VMIS_CINE_LINE",
+                                        "VISC_TAHERI",
+                                        "CHABOCHE",
+                                        "VISCOCHAB",
+                                        "VMIS_CIN1_CHAB",
+                                        "VMIS_CIN2_CHAB",
+                                        "POLY_CFC",
+                                        "LMARC",
+                                        "ROUSSELIER",
+                                        "ROUSS_PR",
+                                        "ROUSS_VISC",
+                                        "VMIS_POU_LINE",
+                                        "VMIS_POU_FLEJOU",
+                                        "COULOMB",
+                                        "ARME",
+                                        "ASSE_CORN",
+                                        "NORTON_HOFF",
+                                        "LEMAITRE",
+                                        "ZIRC_CYRA2",
+                                        "ZIRC_EPRI",
+                                        "ASSE_COMBU",
+                                        "VENDOCHAB",
+                                        "NADAI_B",
+                                        "DIS_CONTACT",
+                                        "DIS_CHOC",
+                                        "DIS_GOUJ2E_PLAS",
+                                        "DIS_GOUJ2E_ELAS",
+                                        "GRILLE_ISOT_LINE",
+                                        "GRILLE_CINE_LINE",
+                                        "GRILLE_PINTO_MEN",
+                                        "PINTO_MENEGOTTO",
+                                        "CJS",
+                                        "OHNO",
+                                        "GRANGER_FP",
+                                        "GRANGER_FP_V",
+                                        "BETON_DOUBLE_DP",
+                                        "KIT_HM",
+                                        "KIT_HHM",
+                                        "KIT_THH",
+                                        "KIT_THM",
+                                        "KIT_THHM",
+                                        "VMIS_ASYM_LINE",
+                                        "ELAS_THM",
+                                        "SURF_ETAT_NSAT",
+                                        "SURF_ETAT_SATU",
+                                        "CAM_CLAY_THM",
+                                        "KIT_DDI",
+                                     ) ),
+           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           VMIS_ISOT_LINE  =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           VMIS_ECMI_TRAC  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           VMIS_ECMI_LINE  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           LABORD_1D   =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           ENDO_LOCAL      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ENDO_FRAGILE    =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           BETON_ENDO_LOCAL=SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           RUPT_FRAG       =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           PLAS_GRAD_LINE  =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           PLAS_GRAD_TRAC  =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           DURC_GRAD       =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           META_P_IL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_PT       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_RE       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_PT_RE    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL          =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_PT       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_RE       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_PT_RE    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_PT      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_RE      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_PT_RE   =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_PT      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_RE      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_PT_RE   =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_CL          =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_PT       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_RE       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_PT_RE    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL          =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_PT       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_RE       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_PT_RE    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+           VMIS_CINE_LINE  =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+           CHABOCHE        =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
+           VISCOCHAB       =SIMP(statut='c',typ='I',defaut=28,into=(28,)),
+           VMIS_CIN1_CHAB  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           VMIS_CIN2_CHAB  =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
+           POLY_CFC        =SIMP(statut='c',typ='I',defaut=1688,into=(1688,)),
+           LMARC           =SIMP(statut='c',typ='I',defaut=20,into=(20,)),
+           VISC_TAHERI     =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+           ROUSSELIER      =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+           ROUSS_PR        =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           ROUSS_VISC      =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           VMIS_POU_LINE   =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+           VMIS_POU_FLEJOU =SIMP(statut='c',typ='I',defaut=9 ,into=(9,)),
+           COULOMB         =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           ASSE_CORN       =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           ARME            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           NORTON_HOFF     =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           LEMAITRE        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ZIRC_CYRA2      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ZIRC_EPRI       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ASSE_COMBU      =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           NADAI_B         =SIMP(statut='c',typ='I',defaut=34,into=(34,)),
+           VENDOCHAB       =SIMP(statut='c',typ='I',defaut=10,into=(10,)),
+           GRILLE_ISOT_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           GRILLE_CINE_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           GRILLE_PINTO_MEN=SIMP(statut='c',typ='I',defaut=16,into=(16,)),
+           DIS_CONTACT     =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+           DIS_CHOC        =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+           DIS_GOUJ2E_PLAS =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           DIS_GOUJ2E_ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           PINTO_MENEGOTTO =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           CJS             =SIMP(statut='c',typ='I',defaut=16,into=(16,)),
+           OHNO            =SIMP(statut='c',typ='I',defaut=32,into=(32,)),
+           GRANGER_FP      =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
+           GRANGER_FP_V    =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
+           BETON_DOUBLE_DP =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           KIT_HM          =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_HHM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THH         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THHM        =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           VMIS_ASYM_LINE  =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+
+           RELATION_KIT    =SIMP(statut='f',typ='TXM',max='**',
+                                 into=(
+# MECA
+                                       "ELAS",
+                                       "CJS",
+                                       "ELAS_THM",
+                                       "SURF_ETAT_NSAT",
+                                       "SURF_ETAT_SATU",
+                                       "CAM_CLAY_THM",
+# THMC
+                                       "GAZ",
+                                       "LIQU_SATU",
+                                       "LIQU_SATU_GAT",
+                                       "LIQU_GAZ_ATM",
+                                       "LIQU_VAPE_GAZ",
+                                       "LIQU_NSAT_GAT",
+                                       "LIQU_GAZ",
+# THER
+                                       "THER_HOMO",
+                                       "THER_POLY",
+# HYDR
+                                       "HYDR_UTIL",
+                                       "HYDR",
+# MECA_META
+                                       "ACIER",
+                                       "ZIRC",
+# MECA KIT_DDI
+                                       "VMIS_ISOT_TRAC",
+                                       "VMIS_ISOT_LINE",
+                                       "VMIS_ISOT_CINE",
+                                       "GRANGER_FP",
+                                       "GRANGER_FP_V",
+                                       "ROUSSELIER",
+                                       "CHABOCHE",
+                                       "OHNO",
+                                       "NADAI_B",
+                                       "BETON_DOUBLE_DP",
+                                       ) ),
+           ELAS_THM        =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           SURF_ETAT_NSAT  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           SURF_ETAT_SATU  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           CAM_CLAY_THM    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+           GAZ             =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           LIQU_SATU       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_SATU_GAT   =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_GAZ_ATM    =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_VAPE_GAZ   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_NSAT_GAT   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_GAZ        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           THER_HOMO       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           THER_POLY       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           HYDR_UTIL       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           HYDR            =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           ACIER           =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           ZIRC            =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC","SIMO_MIEHE","GREEN_GR","GREEN",)),
+           ALGO_C_PLAN     =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         COMP_ELAS       =FACT(statut='f',min=1,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
+                                       "ELAS_POUTRE_GR","CABLE")),
+           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_VMIS_LINE  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_POUTRE_GR  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           CABLE           =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GREEN","GREEN_GR",) ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         ETAT_INIT       =FACT(statut='f',min=1,max=1,
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI','VARI_NON_LOCAL',),
+                   EXCLUS('EVOL_NOLI','DEPL',),
+                   EXCLUS('EVOL_NOLI','SIGM',),
+                   EXCLUS('EVOL_NOLI','VARI',),
+                   EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',),
+                   EXCLUS('NUME_ORDRE','INST'), ),
+           DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+           SIGM            =SIMP(statut='f',typ=(cham_elem_sief_r,carte_sief_r)),
+           VARI            =SIMP(statut='f',typ=cham_elem_vari_r),
+           VARI_NON_LOCAL  =SIMP(statut='f',typ=cham_no_vanl_r),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           NUME_DIDI       =SIMP(statut='f',typ='I'),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),
+         INCREMENT       =FACT(statut='o',min=1,max=1,
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=listr8),
+           EVOLUTION       =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE",
+                                 into=("CHRONOLOGIQUE","RETROGRADE","SANS",) ),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+           SUBD_PAS        =SIMP(statut='f',typ='I',defaut=1),
+           SUBD_PAS_MINI   =SIMP(statut='f',typ='R'),
+           COEF_SUBD_PAS_1 =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+         ),
+         NEWTON          =FACT(statut='d',min=1,max=1,
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),
+           PREDICTION      =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
+           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+           PAS_MINI_ELAS   =SIMP(statut='f',typ='R',defaut=0.0E+0),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut=0),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+         ),
+         RECH_LINEAIRE   =FACT(statut='f',min=1,max=1,
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),
+         ),
+         PILOTAGE        =FACT(statut='f',min=1,max=1,
+           regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TYPE    =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","PRED_ELAS_INCR","DEFORMATION","ANA_LIM") ),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           ETA_PILO_MAX    =SIMP(statut='f',typ='R'),
+           ETA_PILO_MIN    =SIMP(statut='f',typ='R'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),
+                         ),
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
+           ITER_GLOB_ELAS  =SIMP(statut='f',typ='I',defaut=25),
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R'
+                                ,defaut= 1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+           TYPE_MATR_COMP  =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+         PARM_THETA      =SIMP(statut='f',typ='R'
+                              ,defaut= 1. ),
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","DECOUPE") ),
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
+           regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
+                   EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+           ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',into=("DEPL","SIEF_ELGA","VARI_ELGA",
+                                                                     "VARI_NON_LOCAL","LANL_ELGA")),
+         ),
+         OBSERVATION     =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO','MAILLE'),
+                   PRESENT_PRESENT('MAILLE','POINT'),),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',into=("DEPL","VITE","ACCE","SIEF_ELGA",
+                                              "VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU")),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),
+           LIST_ARCH       =SIMP(statut='f',typ=listis),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PAS_OBSE        =SIMP(statut='f',typ='I'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           POINT           =SIMP(statut='f',typ='I',max='**'),
+         ),
+         MODELE_NON_LOCAL=SIMP(statut='f',typ=modele ),
+         b_non_local = BLOC ( condition = "MODELE_NON_LOCAL != None",
+                              fr="Données spécifiques au modèle non local",
+           SOLV_NON_LOCAL  =FACT(statut='f',min=1,max=1,
+             METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+             b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+               RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+             ),
+             b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+               RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             ),
+             b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                    fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+               NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+               STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+             ),
+             b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+               PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+               NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+               RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+               NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+             ),
+             EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           LAGR_NON_LOCAL  =FACT(statut='f',max=1,
+             ITER_DUAL_MAXI  =SIMP(statut='f',typ='I',defaut= 50),
+             RESI_DUAL_ABSO  =SIMP(statut='o',typ='R'),
+             RESI_PRIM_ABSO  =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='f',typ='R',defaut= 1000.),
+             ITER_PRIM_MAXI  =SIMP(statut='f',typ='I',defaut= 10),
+           ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+ )  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE MCOURTOI M.COURTOIS
+TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135,fr="Extraction d une valeur numérique ou d un attribut de fonction",
+                   docu="U4.92.02-e1",
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         TEST_NOOK       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         VALEUR          =FACT(statut='f',min=01,max='**',
+                               fr="Tester la valeur d une fonction ou d une nappe",
+           regles=(UN_PARMI('VALE_REFE','VALE_REFE_C', ),),
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',max=2),
+           VALE_PARA       =SIMP(statut='o',typ='R',max=2),
+           VALE_REFE       =SIMP(statut='f',typ='R' ),
+           VALE_REFE_C     =SIMP(statut='f',typ='C' ),
+           CRITERE         =SIMP(statut='f',typ='TXM',fr="Critère de comparaison avec la solution de référence",
+                                 defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',fr="Ecart maximal autorisé avec la solution de référence",
+                                 defaut= 1.E-3 ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',
+                                 into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+           b_version = BLOC (condition = "REFERENCE == 'NON_REGRESSION'", 
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+           ),
+         ),
+         ATTRIBUT        =FACT(statut='f',min=01,max='**',
+                               fr="Tester la valeur d un attribut d une fonction ou d''une nappe",
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           PARA            =SIMP(statut='f',typ='R' ),
+           CRIT_PARA       =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PREC_PARA       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ATTR            =SIMP(statut='o',typ='TXM',
+                                 into=("NOM_PARA","NOM_RESU","PROL_DROITE","PROL_GAUCHE","INTERPOL",
+                                       "PROL_GAUCHE_FONC","PROL_DROITE_FONC","INTERPOL_FONC","NOM_PARA_FONC") ),
+           ATTR_REFE       =SIMP(statut='o',typ='TXM' ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',
+                                 into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+           b_version       =BLOC(condition = "REFERENCE == 'NON_REGRESSION'", 
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+           ),
+         ),
+         TABL_INTSP      =FACT(statut='f',min=01,max='**',
+                               fr="Tester la valeur d une fonction contenue dans une table interspectrale",
+           regles=(UN_PARMI('NUME_ORDRE_I','NOEUD_I'),),
+           INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
+           NOEUD_I         =SIMP(statut='f',typ=no),
+           NUME_ORDRE_I    =SIMP(statut='f',typ='I' ),
+           b_nume_ordre_i = BLOC (condition = "NUME_ORDRE_I != None", 
+             NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           ),
+           b_noeud_i = BLOC (condition = "NOEUD_I != None",             
+             NOEUD_J         =SIMP(statut='o',typ=no),
+             NOM_CMP_I       =SIMP(statut='o',typ='TXM' ),
+             NOM_CMP_J       =SIMP(statut='o',typ='TXM' ),
+           ),
+           NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+           VALE_PARA       =SIMP(statut='o',typ='R' ),
+           VALE_REFE_C     =SIMP(statut='o',typ='C' ),
+           CRITERE         =SIMP(statut='f',typ='TXM',fr="Critère de comparaison avec la solution de référence",
+                                 defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',fr="Ecart maximal autorisé avec la solution de référence",
+                                 defaut= 1.E-3 ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',
+                                 into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+           b_version       =BLOC(condition = "REFERENCE == 'NON_REGRESSION'", 
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+           ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 22/11/2001   AUTEUR VABHHTS J.PELLET 
+# RESPONSABLE VABHHTS J.PELLET
+TEST_RESU=PROC(nom="TEST_RESU",op=23,docu="U4.92.01-f1",
+         fr="Extraction d une valeur et comparaison à une valeur de référence",
+         regles=(AU_MOINS_UN('CHAM_NO','CHAM_ELEM','RESU','OBJET')),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+
+         CHAM_NO         =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO','TYPE_TEST'),
+                   EXCLUS('NOEUD','GROUP_NO'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT( 'GROUP_NO','NOM_CMP'),
+                   UN_PARMI('VALE','VALE_I','VALE_C'),),
+           CHAM_GD         =SIMP(statut='o',typ=cham_no),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN")),
+           VALE            =SIMP(statut='f',typ='R'),
+           VALE_I          =SIMP(statut='f',typ='I'),
+           VALE_C          =SIMP(statut='f',typ='C'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER")),
+           VERSION         =SIMP(statut='f',typ='TXM'),
+         ),
+
+         CHAM_ELEM       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','TYPE_TEST',),
+                   EXCLUS('NOEUD','GROUP_NO','POINT'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                   PRESENT_PRESENT('POINT','NOM_CMP'),
+                   UN_PARMI('VALE','VALE_I','VALE_C'), ),
+           CHAM_GD         =SIMP(statut='o',typ=cham_elem),# CO()
+           MAILLE          =SIMP(statut='f',typ=ma),# CO()
+           POINT           =SIMP(statut='f',typ='I' ),
+           SOUS_POINT      =SIMP(statut='f',typ='I'),
+           NOEUD           =SIMP(statut='f',typ=no),# CO()
+           GROUP_NO        =SIMP(statut='f',typ=grno),# CO()
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN") ),
+           VALE            =SIMP(statut='f',typ='R' ),
+           VALE_I          =SIMP(statut='f',typ='I' ),
+           VALE_C          =SIMP(statut='f',typ='C' ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER") ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),
+         ),
+
+         RESU            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP','NOM_CAS','ANGL'),
+                   UN_PARMI('NOM_CHAM','PARA'),
+                   PRESENT_ABSENT('PARA','NOEUD','GROUP_NO','POINT','NOM_CMP','TYPE_TEST'),
+                   PRESENT_PRESENT('NOM_CMP','NOM_CHAM'),
+                   EXCLUS('NOEUD','GROUP_NO','POINT','TYPE_TEST'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                   PRESENT_PRESENT('POINT','NOM_CMP'),
+                   UN_PARMI('VALE','VALE_I','VALE_C') ,),
+           RESULTAT        =SIMP(statut='o',typ=resultat),
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
+                                 fr="Liste des paramètres de sensibilité.",
+                                 ang="List of sensitivity parameters"),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           FREQ            =SIMP(statut='f',typ='R'),
+           NUME_MODE       =SIMP(statut='f',typ='I'),
+           NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**' ),
+           NOM_CAS         =SIMP(statut='f',typ='TXM'),
+           ANGL            =SIMP(statut='f',typ='R'),
+           PARA            =SIMP(statut='f',typ='TXM'),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           POINT           =SIMP(statut='f',typ='I'),
+           SOUS_POINT      =SIMP(statut='f',typ='I'),
+           TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN")),
+           VALE            =SIMP(statut='f',typ='R'),
+           VALE_I          =SIMP(statut='f',typ='I'),
+           VALE_C          =SIMP(statut='f',typ='C'),
+           CRITERE         =SIMP(statut='f',typ='TXM',into=("RELATIF","ABSOLU"),max=02),
+           PRECISION       =SIMP(statut='f',typ='R',max=02),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER",) ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),
+         ),
+
+         OBJET           =FACT(statut='f',max='**',
+           regles=(UN_PARMI('INDICE','S_I','S_R','RESUME',),
+                 UN_PARMI('VALE','VALE_I','VALE_C','RESUME','S_R','S_I'),),
+           NOM             =SIMP(statut='o',typ='TXM'),
+           INDICE          =SIMP(statut='f',typ='I'),
+           NUM_OBJ         =SIMP(statut='f',typ='I'),
+           S_R             =SIMP(statut='f',typ='R'),
+           S_I             =SIMP(statut='f',typ='I'),
+           RESUME          =SIMP(statut='f',typ='I'),
+           VALE            =SIMP(statut='f',typ='R'),
+           VALE_I          =SIMP(statut='f',typ='I'),
+           VALE_C          =SIMP(statut='f',typ='C'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER",) ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
+                docu="U4.92.03-b1",
+         regles=(UN_PARMI('VALE','VALE_I','VALE_C', ),),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+#  concept table à créer
+         TABLE           =SIMP(statut='o',typ=table),
+
+         FILTRE          =FACT(statut='f',min=1,max='**',
+           NOM_PARA        =SIMP(statut='o',typ='TXM' ),
+           CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",
+                                 into=("EQ","LT","GT","NE","LE","GE","VIDE",
+                                       "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI") ),
+           b_vale          =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+              regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+              VALE            =SIMP(statut='f',typ='R' ),
+              VALE_I          =SIMP(statut='f',typ='I' ),
+              VALE_C          =SIMP(statut='f',typ='C' ),
+              VALE_K          =SIMP(statut='f',typ='TXM' ),),
+
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+         ),
+         TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN") ),
+         NOM_PARA        =SIMP(statut='o',typ='TXM' ),
+         VALE            =SIMP(statut='f',typ='R' ),
+         VALE_I          =SIMP(statut='f',typ='I' ),
+         VALE_C          =SIMP(statut='f',typ='C' ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.2E-3 ),
+         REFERENCE       =SIMP(statut='f',typ='TXM',
+                               into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+         b_version       =BLOC(condition = "REFERENCE == 'NON_REGRESSION'",
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 04/12/2001   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,docu="U4.54.01-f1",reentrant='f',
+                   fr="Analyse thermique linéaire stationnaire ou transitoire",
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='o',min=1,max='**',
+           CHARGE          =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+         INCREMENT       =FACT(statut='f',min=1,max=1,
+           LIST_INST       =SIMP(statut='o',typ=listr8 ),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           NUME_FIN        =SIMP(statut='f',typ='I'),
+         ),
+         TEMP_INIT       =FACT(statut='f',min=1,max=1,
+           regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),),
+           STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther),
+           CHAM_NO         =SIMP(statut='f',typ=cham_no_temp_r),
+           VALE            =SIMP(statut='f',typ='R'),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+         ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters",
+         ),
+           SENS_INIT       =FACT(statut='f',min=1,max=1,
+             regles=(EXCLUS('STATIONNAIRE','EVOL_THER', ),),
+             STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             EVOL_THER       =SIMP(statut='f',typ=evol_ther),
+             NUME_INIT       =SIMP(statut='f',typ='I'),
+           ),
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+           ),
+           b_ldlt_mult      =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+         PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57),
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH','LIST_INST','INST'),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
+                                 into=("RELATIF","ABSOLU")),
+           PAS_ARCH        =SIMP(statut='f',typ='I'),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',into=("VARI",)),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,docu="U4.54.02-d",reentrant='f',
+                   fr="Analyse thermique non linéaire stationnaire ou transitoire" ,
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         CHAM_MATER      =SIMP(statut='o',typ=(cham_mater) ),
+         CARA_ELEM       =SIMP(statut='c',typ=(cara_elem) ),
+         COMP_THER_NL    =FACT(statut='d',min=1,max='**',
+           RELATION        =SIMP(statut='f',typ='TXM',defaut="THER_NL",
+                                 into=("THER_NL",
+                                       "THER_HYDR",
+                                       "SECH_GRANGER",
+                                       "SECH_MENSI",
+                                       "SECH_BAZANT",
+                                       "SECH_NAPPE"
+                                       ) ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         EVOL_THER_SECH  =SIMP(statut='f',typ=evol_ther),
+         EXCIT           =FACT(statut='o',min=1,max='**',
+           CHARGE          =SIMP(statut='o',typ=char_ther),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+         INCREMENT       =FACT(statut='f',min=1,max=1,
+           LIST_INST       =SIMP(statut='o',typ=listr8),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           NUME_FIN        =SIMP(statut='f',typ='I'),
+         ),
+         TEMP_INIT       =FACT(statut='f',min=1,max=1,
+           regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),),
+           STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther),
+           CHAM_NO         =SIMP(statut='f',typ=cham_no_temp_r),
+           VALE            =SIMP(statut='f',typ='R'),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+         ),
+         NEWTON          =FACT(statut='d',min=1,max=1,
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+         ),
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Parametres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Parametres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Parametres relatifs a la non inversibilité de la matrice a factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Parametres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         ),
+         PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57 ),
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH','LIST_INST','INST', ),),
+           LIST_ARCH       =SIMP(statut='f',typ=(listis) ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+           PAS_ARCH        =SIMP(statut='f',typ='I'),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',into=("VARI",)),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         OPTION          =SIMP(statut='f',typ='TXM',max='**',
+                               into=("FLUX_ELGA_TEMP","FLUX_ELNO_TEMP") ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther,
+                     fr="Thermique non lineaire en repere mobile",
+                     docu="U4.54.03-b",reentrant='f',
+         MODELE          =SIMP(statut='o',typ=modele ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='c',typ=cara_elem ),
+         EXCIT           =FACT(statut='o',min=1,max='**',
+           CHARGE          =SIMP(statut='o',typ=char_ther ),
+           FONC_MULT       =SIMP(statut='c',typ=fonction ),
+         ),
+         TEMP_INIT       =FACT(statut='f',min=1,max=1,
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther ),
+           NUME_INIT       =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
+           CRIT_TEMP_RELA  =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRIT_ENTH_RELA  =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ARRET           =SIMP(statut='c',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+
+
+
diff --git a/Aster/Cata/cata_STA5.py b/Aster/Cata/cata_STA5.py
new file mode 100644 (file)
index 0000000..0fb4930
--- /dev/null
@@ -0,0 +1,11450 @@
+#& MODIF COMMANDE  DATE 10/07/2001   AUTEUR ACBHHCD G.DEVESA 
+#              CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                   WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+
+import Accas
+from Accas import *
+from Accas import _F
+
+import ops
+
+try:
+  import aster
+except:
+  pass
+
+#
+JdC = JDC_CATA(code='ASTER',
+               execmodul=None,
+               regles = (AU_MOINS_UN('DEBUT','POURSUITE'),
+                         AU_MOINS_UN('FIN'),
+                         A_CLASSER(('DEBUT','POURSUITE'),'FIN')),
+              )
+
+# Type le plus general
+class entier(ASSD):pass
+class reel(ASSD):pass
+class complexe(ASSD):pass
+class liste(ASSD):pass
+class chaine(ASSD):pass
+
+# Type generaux
+class no(GEOM):pass
+class grno(GEOM):pass
+class ma(GEOM):pass
+class grma(GEOM):pass
+
+class table(ASSD):
+  def __getitem__(self,key):
+    return aster.getpara(self.get_name(),"TABLE",key[0],key[1])
+
+class resultat(ASSD):
+  def __getitem__(self,key):
+    return aster.getpara(self.get_name(),"RESULTAT",key[0],key[1])
+
+# Autres
+class affe_carte(ASSD):pass
+class affe_cham_no(ASSD):pass
+class affe_char_cine(ASSD):pass
+class affe_char_cine_f(ASSD):pass
+class asse_matrice(ASSD):pass
+class asse_vecteur(ASSD):pass
+class base_modale(ASSD):pass
+class cabl_precont(ASSD):pass
+class calc_cham_elem(ASSD):pass
+class calc_char_cine(ASSD):pass
+class calc_char_seisme(ASSD):pass
+
+class calc_elem(resultat):pass
+
+class calc_matr_elem(ASSD):pass
+
+class calc_no(resultat):pass
+
+class calc_vect_elem(ASSD):pass
+class cara_elem(ASSD):pass
+class cara_pout(ASSD):pass
+
+class carte(ASSD):pass
+class carte_depl_r(carte):pass
+class carte_epsi_r(carte):pass
+class carte_flux_r(carte):pass
+class carte_geom_r(carte):pass
+class carte_inst_r(carte):pass
+class carte_meta_r(carte):pass
+class carte_neut_f(carte):pass
+class carte_neut_r(carte):pass
+class carte_sief_r(carte):pass
+class carte_temp_f(carte):pass
+class carte_temp_r(carte):pass
+class carte_var2_r(carte):pass
+# ajout JMP 2908
+class cham_gd(ASSD):pass
+#class cham_elem(ASSD):pass
+class cham_elem(cham_gd):pass
+class cham_elem_crit_r(cham_elem):pass
+class cham_elem_dbel_r(cham_elem):pass
+class cham_elem_dommag(cham_elem):pass
+class cham_elem_ener_r(cham_elem):pass
+class cham_elem_epsi_c(cham_elem):pass
+class cham_elem_epsi_r(cham_elem):pass
+class cham_elem_erreur(cham_elem):pass
+class cham_elem_flux_r(cham_elem):pass
+class cham_elem_geom_r(cham_elem):pass
+class cham_elem_hydr_r(cham_elem):pass
+class cham_elem_meta_r(cham_elem):pass
+class cham_elem_neut_r(cham_elem):pass
+class cham_elem_neut_f(cham_elem):pass
+class cham_elem_pres_r(cham_elem):pass
+class cham_elem_sief_c(cham_elem):pass
+class cham_elem_depl_r(cham_elem):pass
+class cham_elem_temp_r(cham_elem):pass
+class cham_elem_sief_r(cham_elem):pass
+class cham_elem_sour_r(cham_elem):pass
+class cham_elem_vari_r(cham_elem):pass
+
+#class cham_gd(ASSD):pass
+class cham_mater(ASSD):pass
+
+#class cham_no(ASSD):pass
+class cham_no(cham_gd):pass
+class cham_no_depl_c(cham_no):pass
+class cham_no_depl_f(cham_no):pass
+class cham_no_depl_r(cham_no):pass
+class cham_no_epsi_r(cham_no):pass
+class cham_no_flux_r(cham_no):pass
+class cham_no_geom_r(cham_no):pass
+class cham_no_inst_r(cham_no):pass
+class cham_no_meta_r(cham_no):pass
+class cham_no_pres_c(cham_no):pass
+class cham_no_pres_r(cham_no):pass
+class cham_no_sief_r(cham_no):pass
+class cham_no_neut_r(cham_no):pass
+class cham_no_neut_f(cham_no):pass
+class cham_no_temp_c(cham_no):pass
+class cham_no_temp_f(cham_no):pass
+class cham_no_temp_r(cham_no):pass
+class cham_no_vanl_r(cham_no):pass
+class cham_no_var2_r(cham_no):pass
+
+class char_acou(ASSD):pass
+class char_cine_acou(ASSD):pass
+class char_cine_meca(ASSD):pass
+class char_cine_ther(ASSD):pass
+class char_meca(ASSD):pass
+class char_ther(ASSD):pass
+class comb_cham_elem(ASSD):pass
+class comb_cham_no(ASSD):pass
+class comb_fourier(resultat):pass
+class comb_matr_asse(ASSD):pass
+class courbe(ASSD):pass
+class crea_resu(ASSD):pass
+class acou_harmo(resultat):pass
+class dyna_harmo(resultat):pass
+class dyna_line_harm(resultat):pass
+class dyna_trans(resultat):pass
+
+class evol(resultat):pass
+
+class evol_char(evol):pass
+class evol_elas(evol):pass
+class evol_noli(evol):pass
+class evol_ther(evol):pass
+
+class extr_mode(ASSD):pass
+class extr_resu(ASSD):pass
+class fact_grad(ASSD):pass
+class fact_ldlt(ASSD):pass
+class fonction_c(fonction):pass
+class fond_fiss(ASSD):pass
+class fourier_elas(resultat):pass
+class harm_gene(resultat):pass
+class interf_dyna_clas(ASSD):pass
+class interspfact(ASSD):pass
+class lire_miss_3d(ASSD):pass
+class lire_resu(ASSD):pass
+class listis(ASSD):pass
+class listr8(ASSD):pass
+class macr_elem_dyna(ASSD):pass
+class macr_elem_stat(ASSD):pass
+class macro_elas_mult(ASSD):pass
+class maillage(ASSD):pass
+class mater(ASSD):pass
+
+class matr_asse(ASSD):pass
+class matr_asse_depl_c(matr_asse):pass
+class matr_asse_depl_r(matr_asse):pass
+class matr_asse_gene_c(matr_asse):pass
+class matr_asse_gene_r(matr_asse):pass
+class matr_asse_pres_c(matr_asse):pass
+class matr_asse_pres_r(matr_asse):pass
+class matr_asse_temp_c(matr_asse):pass
+class matr_asse_temp_r(matr_asse):pass
+
+class matr_elem(ASSD):pass
+class matr_elem_depl_c(matr_elem):pass
+class matr_elem_depl_r(matr_elem):pass
+class matr_elem_pres_c(matr_elem):pass
+class matr_elem_temp_r(matr_elem):pass
+
+class melasflu(ASSD):pass
+
+class mode_acou(resultat):pass
+class mode_cycl(resultat):pass
+class mode_flamb(resultat):pass
+class mode_gene(resultat):pass
+class mode_iter_inv(resultat):pass
+class mode_meca(resultat):pass
+class mode_meca_c(mode_meca):pass
+class mode_stat(resultat):pass
+
+class modele(ASSD):pass
+class modele_gene(ASSD):pass
+class mult_elas(resultat):pass
+class norm_mode(ASSD):pass
+class nume_ddl(ASSD):pass
+class nume_ddl_gene(ASSD):pass
+class obstacle(ASSD):pass
+class post_elem(ASSD):pass
+class prod_matr_cham(ASSD):pass
+class proj_champ(ASSD):pass
+class recu_champ(ASSD):pass
+class reso_grad(ASSD):pass
+class reso_ldlt(ASSD):pass
+class rest_base_phys(ASSD):pass
+class spectre(ASSD):pass
+class squelette(maillage):pass
+class surface(ASSD):pass
+
+class tabl_aire_int(table):pass
+class tabl_calc_g_loca(table):pass
+class tabl_calc_g_th(table):pass
+class tabl_cara_geom(table):pass
+class tabl_char_limite(table):pass
+class tabl_ener_elas(table):pass
+class tabl_ener_pot(table):pass
+class tabl_ener_cin(table):pass
+class tabl_ener_totale(table):pass
+class tabl_fonc(table):pass
+class tabl_fonc_max(tabl_fonc):pass
+class tabl_fonc_rms(tabl_fonc):pass
+class tabl_indic_ener(table):pass
+class tabl_indic_seuil(table):pass
+class tabl_intsp(table):pass
+class tabl_mass_iner(table):pass
+class tabl_post_alea(table):pass
+class tabl_post_dyna(table):pass
+class tabl_post_f_alea(table):pass
+class tabl_post_fatig(table):pass
+class tabl_post_gouj2e(table):pass
+class tabl_post_k(table):pass
+class tabl_post_rccm(table):pass
+class tabl_post_rele(table):pass
+class tabl_post_simpli(table):pass
+class tabl_post_usur(table):pass
+class tabl_reca_weib(table):pass
+class tabl_rice_tracey(table):pass
+class tabl_texture(table):pass
+class tabl_trc(table):pass
+class tabl_weibull(table):pass
+
+class theta_geom(ASSD):pass
+class tran_gene(ASSD):pass
+class type_flui_stru(ASSD):pass
+class valeur(ASSD):pass
+class vect_asse(ASSD):pass
+class vect_asse_gene(vect_asse):pass
+class vect_elem(ASSD):pass
+class vect_elem_depl_r(vect_elem):pass
+class vect_elem_pres_c(vect_elem):pass
+class vect_elem_pres_r(vect_elem):pass
+class vect_elem_temp_r(vect_elem):pass
+
+#& MODIF COMMANDE  DATE 11/09/2000   AUTEUR JMBHH01 J.M.PROIX 
+AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
+                    fr="Affectation de caractéristiques à des éléments de structure (barre, cable, poutre, tuyau, plaque, coque, discret)",
+                    docu="U4.42.01-F",reentrant='n',
+         regles=(AU_MOINS_UN('POUTRE','COQUE','DISCRET','CABLE','BARRE','MASSIF','ASSE_GRIL','GRILLE'),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         INFO            =SIMP(statut='f',typ='I', defaut= 1 ,into=(1,2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',max='**',into=("MAILLE","NOEUD") ),
+         POUTRE          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'), 
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'), 
+           SECTION         =SIMP(statut='f',typ='TXM' ,into=("GENERALE","RECTANGLE","CERCLE") ),
+           CARA_SECT       =SIMP(statut='f',typ=(cara_pout) ),
+           b_generale      =BLOC( condition = "SECTION=='GENERALE'",
+             CARA            =SIMP(statut='f',typ='TXM',max='**',
+                                 into=("A","IY","IZ","AY","AZ","EY","EZ","JX","RY","RZ","RT",
+                                                           "AI","JG","IYR2","IZR2","A1",
+                                       "IY1","IZ1","AY1","AZ1","EY1","EZ1","JX1","RY1",
+                                       "RZ1","RT1","AI1","JG1","IYR21","IZR21","A2",
+                                       "IY2","IZ2","AY2","AZ2","EY2","EZ2","JX2","RY2",
+                                       "RZ2","RT2","AI2","JG2","IYR22","IZR22","H",
+                                       "HZ","HY","EP","EPY","EPZ","H1","HZ1","HY1",
+                                       "EP1","EPY1","EPZ1","H2","HZ2","HY2","EP2",
+                                       "EPY2","EPZ2","R","R1","R2") ),
+             VALE            =SIMP(statut='o',typ='R',max='**'),
+             VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE",) ),
+           ),
+           b_rectangle     =BLOC( condition = "SECTION=='RECTANGLE'",
+             CARA            =SIMP(statut='f',typ='TXM',max='**',
+                                 into=("H","EP","HY","HZ","EPY","EPZ",
+                                                           "H1","HZ1","HY1","EP1","EPY1","EPZ1",
+                                                           "H2","HZ2","HY2","EP2","EPY2","EPZ2") ),
+             VALE            =SIMP(statut='o',typ='R',max='**'),
+             VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE","AFFINE"),defaut="HOMOTHETIQUE"),
+           ),
+           b_cercle        =BLOC( condition = "SECTION=='CERCLE'",
+             CARA            =SIMP(statut='f',typ='TXM',max='**',
+                                 into=("R","EP","R1","R2","EP1","EP2") ),
+             VALE            =SIMP(statut='o',typ='R',max='**'),
+             VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE",) ),
+             MODI_METRIQUE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           ),
+         ),  
+         BARRE           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           SECTION         =SIMP(statut='o',typ='TXM',into=("GENERALE","RECTANGLE","CERCLE") ),
+           b_generale      =BLOC( condition = "SECTION=='GENERALE'",
+             CARA            =SIMP(statut='f',typ='TXM',into=("A",) ),
+             VALE            =SIMP(statut='o',typ='R' ),
+           ),
+           b_rectangle     =BLOC( condition = "SECTION=='RECTANGLE'",
+             CARA            =SIMP(statut='f',typ='TXM',into=("H","HZ","HY","EPY","EPZ","EP"),max=6 ),
+             VALE            =SIMP(statut='o',typ='R',max=6 ),
+           ),
+           b_cercle        =BLOC( condition = "SECTION=='CERCLE'",
+             CARA            =SIMP(statut='o',typ='TXM',max=2,into=("R","EP") ),
+             VALE            =SIMP(statut='o',typ='R',max=2 ),
+           ),  
+         ), 
+         COQUE           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA' ),
+                   PRESENT_PRESENT( 'EXCENTREMENT','INER_ROTA' ),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           EPAIS           =SIMP(statut='f',typ='R' ),
+           ANGL_REP        =SIMP(statut='f',typ='R',min=2,max=2),
+           A_CIS           =SIMP(statut='f',typ='R',defaut= 0.8333333),
+           COEF_RIGI_DRZ   =SIMP(statut='f',typ='R',defaut= 1.0E-5 ),
+           EXCENTREMENT    =SIMP(statut='f',typ='R' ),
+           INER_ROTA       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MODI_METRIQUE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+         CABLE           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('A','SECTION') ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'), 
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'), 
+           N_INIT          =SIMP(statut='f',typ='R',defaut= 5000. ),
+           A               =SIMP(statut='f',typ='R' ),
+           SECTION         =SIMP(statut='f',typ='R' ),
+         ),
+         DISCRET         =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           REPERE          =SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+           AMOR_HYST       =SIMP(statut='f',typ='R' ),
+           CARA            =SIMP(statut='f',typ='TXM',max='**',
+                                 into=("K_T_D_N","K_T_D_L","K_TR_D_N","K_TR_D_L",
+                                                           "K_T_N",  "K_T_L",  "K_TR_N",  "K_TR_L",
+                                                                "M_T_D_N","M_TR_D_N","M_T_N",
+                                                           "M_T_L",  "M_TR_N",  "M_TR_L",
+                                       "A_T_D_N","A_TR_D_N","A_T_D_L","A_TR_D_L",
+                                                           "A_T_N",  "A_T_L",   "A_TR_N", "A_TR_L") ),
+           VALE            =SIMP(statut='f',typ='R',max='**'),
+         ),
+         ORIENTATION     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO' ),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           CARA            =SIMP(statut='f',typ='TXM',
+                                 into=("VECT_Y","ANGL_VRIL","VECT_X_Y","ANGL_NAUT","GENE_TUYAU") ),
+           VALE            =SIMP(statut='f',typ='R',max='**'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-4 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+         DEFI_ARC        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('ORIE_ARC','CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE',
+                            'POIN_TANG','NOEUD_POIN_TANG','GROUP_NO_POIN_TG'),
+                   PRESENT_PRESENT('ORIE_ARC','RAYON'),
+                   EXCLUS('COEF_FLEX','COEF_FLEX_XY'),
+                   EXCLUS('COEF_FLEX','COEF_FLEX_XZ'),
+                   EXCLUS('INDI_SIGM','INDI_SIGM_XY'),
+                   EXCLUS('INDI_SIGM','INDI_SIGM_XZ'),
+                   PRESENT_PRESENT('COEF_FLEX_XY','COEF_FLEX_XZ'),
+                   PRESENT_PRESENT('INDI_SIGM_XY','INDI_SIGM_XZ'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ORIE_ARC        =SIMP(statut='f',typ='R'),
+           CENTRE          =SIMP(statut='f',typ='R',max='**'),
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,max=1),
+           POIN_TANG       =SIMP(statut='f',typ='R',max='**'),
+           NOEUD_POIN_TANG =SIMP(statut='f',typ=no,max=1), 
+           GROUP_NO_POIN_TG=SIMP(statut='f',typ=grno,max=1),
+           RAYON           =SIMP(statut='f',typ='R'),
+           COEF_FLEX       =SIMP(statut='f',typ='R'),
+           INDI_SIGM       =SIMP(statut='f',typ='R'),
+           COEF_FLEX_XY    =SIMP(statut='f',typ='R'),
+           INDI_SIGM_XY    =SIMP(statut='f',typ='R'),
+           COEF_FLEX_XZ    =SIMP(statut='f',typ='R'),
+           INDI_SIGM_XZ    =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+         MASSIF          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   EXCLUS('ANGL_REP','ANGL_AXE'),
+                   EXCLUS('ANGL_REP','ORIG_AXE'),
+                   PRESENT_PRESENT('ANGL_AXE','ORIG_AXE'), ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ANGL_REP        =SIMP(statut='f',typ='R',max=3),
+           ANGL_AXE        =SIMP(statut='f',typ='R',max=2),
+           ORIG_AXE        =SIMP(statut='f',typ='R',max=3),
+         ),
+         POUTRE_FLUI     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           B_T             =SIMP(statut='o',typ='R'),
+           B_N             =SIMP(statut='o',typ='R'),
+           B_TN            =SIMP(statut='o',typ='R',defaut= 0.E+0 ),
+           A_FLUI          =SIMP(statut='o',typ='R'),
+           A_CELL          =SIMP(statut='o',typ='R'),
+           COEF_ECHELLE    =SIMP(statut='o',typ='R'),
+         ),
+         GRILLE          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   EXCLUS('ANGL_REP','ORIG_AXE'),
+                   ENSEMBLE('ORIG_AXE','AXE')),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           SECTION_L       =SIMP(statut='o',typ='R'),
+           ANGL_REP        =SIMP(statut='f',typ='R',max=2),
+           ANGL_L          =SIMP(statut='f',typ='R'),
+           POUR_CENT_L     =SIMP(statut='f',typ='R'),
+           POUR_CENT_T     =SIMP(statut='f',typ='R'),
+           DIST_N          =SIMP(statut='f',typ='R'),
+           ORIG_AXE        =SIMP(statut='f',typ='R',max='**'),
+           AXE             =SIMP(statut='f',typ='R',max='**'),
+           COEF_RIGI_DRZ   =SIMP(statut='f',typ='R',defaut= 1.0E-10 ),
+         ),
+         RIGI_PARASOL    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('COEF_GROUP','FONC_GROUP'),
+                   UN_PARMI('COOR_CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),),
+           GROUP_MA        =SIMP(statut='o',typ=ma,max='**'),
+           FONC_GROUP      =SIMP(statut='f',typ=(fonction) ),
+           COEF_GROUP      =SIMP(statut='f',typ='R',max='**'),
+           REPERE          =SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+           CARA            =SIMP(statut='o',typ='TXM',max='**',into=("K_TR_D_N","A_TR_D_N") ),
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+           COOR_CENTRE     =SIMP(statut='f',typ='R',max='**'),
+         ),
+         ASSE_GRIL       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("K_TR_D_N","K_TR_D_L_T","K_TR_D_L_N",) ),
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           PAS_T           =SIMP(statut='o',typ='R'),
+           PAS_N           =SIMP(statut='o',typ='R'),
+           ANGL_REP        =SIMP(statut='o',typ='R',max='**'),
+           COEF_ECHELLE    =SIMP(statut='o',typ='R'),
+         ),
+) ;
+#& MODIF COMMANDE  DATE 24/05/2000   AUTEUR VABHHTS J.PELLET
+def affe_carte_prod(GRANDEUR,**args):
+  if GRANDEUR == "TEMP_R" : return carte_temp_r
+  if GRANDEUR == "FLUX_R" : return carte_flux_r
+  if GRANDEUR == "DEPL_R" : return carte_depl_r
+  if GRANDEUR == "EPSI_R" : return carte_epsi_r
+  if GRANDEUR == "SIEF_R" : return carte_sief_r
+  if GRANDEUR == "META_R" : return carte_meta_r
+  if GRANDEUR == "NEUT_R" : return carte_neut_r
+  if GRANDEUR == "VAR2_R" : return carte_var2_r
+  if GRANDEUR == "TEMP_F" : return carte_temp_f
+  if GRANDEUR == "NEUT_F" : return carte_neut_f
+  if GRANDEUR == "INST_R" : return carte_inst_r
+  if GRANDEUR == "GEOM_R" : return carte_geom_r
+  raise AsException("type de concept resultat non prevu")
+
+AFFE_CARTE=OPER(nom="AFFE_CARTE",op=  36,sd_prod=affe_carte_prod,
+                fr="Définition d un champ de grandeur constant, qui peut ensuite être utilisé comme champ initial (par exemple une précontrainte en mécanique)",
+                docu="U4.44.13-C",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage ),
+         GRANDEUR        =SIMP(statut='o',typ='TXM',     
+                               into=("DEPL_R","EPSI_R","SIEF_R","VAR2_R",        
+                                     "TEMP_R","META_R","TEMP_F","FLUX_R",
+                                     "NEUT_R","NEUT_F","INST_R","GEOM_R",) ),
+         AFFE            =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           MAILLE          =SIMP(statut='f',typ=ma  ),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
+           VALE            =SIMP(statut='f',typ='R',max='**' ),  
+           VALE_I          =SIMP(statut='f',typ='I',max='**' ),  
+           VALE_C          =SIMP(statut='f',typ='C',max='**' ),  
+           VALE_F          =SIMP(statut='f',typ=fonction),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 31/05/2000   AUTEUR CIBHHLV L.VIVAN
+
+def affe_cham_no_prod(CHAM_NO_AFFE,GRANDEUR,**args):
+  if GRANDEUR == "TEMP_R" : return cham_no_temp_r
+  if GRANDEUR == "TEMP_F" : return cham_no_temp_f
+  if GRANDEUR == "DEPL_R" : return cham_no_depl_r
+  if GRANDEUR == "DEPL_F" : return cham_no_depl_f
+  if GRANDEUR == "SIEF_R" : return cham_no_sief_r
+  if GRANDEUR == "NEUT_R" : return cham_no_neut_r
+  if GRANDEUR == "NEUT_F" : return cham_no_neut_f
+  if GRANDEUR == "INST_R" : return cham_no_inst_r
+  if GRANDEUR == "GEOM_R" : return cham_no_geom_r
+  if GRANDEUR == "VAR2_R" : return cham_no_var2_r
+  if AsType(CHAM_NO_AFFE) == cham_no_temp_r : return cham_no_temp_r
+  if AsType(CHAM_NO_AFFE) == cham_no_depl_r : return cham_no_depl_r
+  if AsType(CHAM_NO_AFFE) == cham_no_sief_r : return cham_no_sief_r
+  raise AsException("type de concept resultat non prevu")
+
+AFFE_CHAM_NO=OPER(nom="AFFE_CHAM_NO",op=  52,sd_prod=affe_cham_no_prod
+                    ,fr="Affectation de grandeurs réelles pour créer un cham_no_*",
+                     docu="U4.44.11-F",reentrant='n',
+         regles=(UN_PARMI('MAILLAGE','CHAM_NO_AFFE'),
+                 PRESENT_PRESENT('MAILLAGE','GRANDEUR','AFFE'),
+                 EXCLUS('NUME_DDL','CHAM_NO'),),
+         CHAM_NO_AFFE    =SIMP(statut='f',typ=(cham_no_temp_r,cham_no_temp_f,cham_no_depl_r,
+                                               cham_no_depl_f,cham_no_sief_r ) ),
+         MAILLAGE        =SIMP(statut='f',typ=maillage ),
+         GRANDEUR        =SIMP(statut='f',typ='TXM',into=("TEMP_R","DEPL_R","SIEF_R","VAR2_R",
+                                                         "TEMP_F","DEPL_F","INST_R","GEOM_R",
+                                                         "NEUT_R","NEUT_F") ),
+         AFFE            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   UN_PARMI('VALE','VALE_F','VALE_R','FONCTION'),),           
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+#  NOM_CMP est il obligatoire           
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           VALE_R          =SIMP(statut='f',typ='R',max='**',defaut= 0.E+0 ),
+           VALE            =SIMP(statut='f',typ='R',max='**'),
+           VALE_F          =SIMP(statut='f',typ=fonction,max='**'),
+           FONCTION        =SIMP(statut='f',typ=fonction,max='**'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         NUME_DDL        =SIMP(statut='f',typ=nume_ddl ),
+         CHAM_NO         =SIMP(statut='f',typ=(cham_no_temp_r,cham_no_temp_f,cham_no_depl_r,
+                                               cham_no_depl_f,cham_no_sief_r ) ),
+)  ;
+#& MODIF COMMANDE  DATE 12/05/99   AUTEUR VABHHTS J.PELLET
+AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
+                    fr="Affectation de charges et conditions aux limites acoustiques constantes",
+                    docu="U4.44.04-E",reentrant='n',
+         regles=(AU_MOINS_UN('PRES_IMPO','VITE_FACE','IMPE_FACE','LIAISON_UNIF' ),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.,),
+         PRES_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           PRES            =SIMP(statut='o',typ='C' ),
+         ),
+         VITE_FACE       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           VNOR            =SIMP(statut='o',typ='C' ),
+         ),
+         IMPE_FACE       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           IMPE            =SIMP(statut='o',typ='C' ),
+         ),
+         LIAISON_UNIF    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE' ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN
+def affe_char_cine_prod(MECA_IMPO,THER_IMPO,ACOU_IMPO,**args):
+  if MECA_IMPO != None  : return char_cine_meca
+  if THER_IMPO != None  : return char_cine_ther
+  if ACOU_IMPO != None  : return char_cine_acou
+  raise AsException("type de concept resultat non prevu")
+
+AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
+                    ,fr="Affectation de conditions aux limites cinématiques pour traitement sans dualisation",
+                     docu="U4.44.03-E",reentrant='n',
+         regles=(AU_MOINS_UN('MECA_IMPO','THER_IMPO','ACOU_IMPO'),
+                 EXCLUS('MECA_IMPO','THER_IMPO'),
+                 EXCLUS('MECA_IMPO','ACOU_IMPO'),
+                 EXCLUS('THER_IMPO','ACOU_IMPO'),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         MECA_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','TEMP','PHI'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DX              =SIMP(statut='f',typ='R' ),
+           DY              =SIMP(statut='f',typ='R' ),
+           DZ              =SIMP(statut='f',typ='R' ),
+           DRX             =SIMP(statut='f',typ='R' ),
+           DRY             =SIMP(statut='f',typ='R' ),
+           DRZ             =SIMP(statut='f',typ='R' ),
+           GRX             =SIMP(statut='f',typ='R' ),
+           PRES            =SIMP(statut='f',typ='R' ),
+           TEMP            =SIMP(statut='f',typ='R' ),
+           PHI             =SIMP(statut='f',typ='R' ),
+         ),
+         THER_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           TEMP_SUP        =SIMP(statut='f',typ='R' ),
+           TEMP            =SIMP(statut='f',typ='R' ),
+           TEMP_INF        =SIMP(statut='f',typ='R' ),
+         ),
+         ACOU_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           PRES            =SIMP(statut='o',typ='C' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN
+def affe_char_cine_f_prod(MECA_IMPO,THER_IMPO,**args):
+  if MECA_IMPO != None  : return char_cine_meca
+  if THER_IMPO != None  : return char_cine_ther
+  raise AsException("type de concept resultat non prevu")
+
+AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_prod
+                    ,fr="Affectation de conditions aux limites cinématiques pour traitement sans dualisation",
+                     docu="U4.44.03-E",reentrant='n',
+         regles=(AU_MOINS_UN('MECA_IMPO','THER_IMPO'),
+                 EXCLUS('MECA_IMPO','THER_IMPO'),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         MECA_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','TEMP','PHI'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DX              =SIMP(statut='f',typ=fonction ),
+           DY              =SIMP(statut='f',typ=fonction ),
+           DZ              =SIMP(statut='f',typ=fonction ),
+           DRX             =SIMP(statut='f',typ=fonction ),
+           DRY             =SIMP(statut='f',typ=fonction ),
+           DRZ             =SIMP(statut='f',typ=fonction ),
+           GRX             =SIMP(statut='f',typ=fonction ),
+           PRES            =SIMP(statut='f',typ=fonction ),
+           TEMP            =SIMP(statut='f',typ=fonction ),
+           PHI             =SIMP(statut='f',typ=fonction ),
+         ),
+         THER_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           TEMP_SUP        =SIMP(statut='f',typ=fonction ),
+           TEMP            =SIMP(statut='f',typ=fonction ),
+           TEMP_INF        =SIMP(statut='f',typ=fonction ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2000   AUTEUR UFBHHLL C.CHAVANT 
+AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
+                    ,fr="Affectation de charges et conditions aux limites mécaniques constantes",
+                     docu="U4.44.01-F",reentrant='n',
+         regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','LIAISON_DDL','FORCE_NODALE',  
+                             'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',       
+                             'PRES_REP','FORCE_POUTRE','FORCE_COQUE','LIAISON_OBLIQUE',        
+                             'FORCE_ELEC','INTE_ELEC','PESANTEUR','ROTATION','IMPE_FACE',      
+                             'VITE_FACE','TEMP_CALCULEE','RELA_CINE_BP','EPSI_INIT','CONTACT', 
+                             'LIAISON_UNIL_NO','LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP',  
+                             'LIAISON_SOLIDE','LIAISON_ELEM','ONDE_FLUI','PRES_CALCULEE',      
+                             'EPSA_CALCULEE','LIAISON_CHAMNO','VECT_ASSE','LIAISON_COQUE',     
+                             'LIAISON_MAIL','FORCE_TUYAU','SECH_CALCULEE','HYDR_CALCULEE',     
+                             'EFFE_FOND'),
+                 EXCLUS('LIAISON_UNIL_NO','CONTACT'),),            
+         
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+         PESANTEUR       =SIMP(statut='f',typ='R',fr="Champ de pesanteur",min=04,max=04),
+         ROTATION        =SIMP(statut='f',typ='R',fr="Champ de rotation",min=04,max=04),
+         b_rotation      =BLOC ( condition = "ROTATION != None",
+           CENTRE          =SIMP(statut='f',typ='R',defaut=(0.,0.,0.),max=03),    
+         ),     
+         PRES_CALCULEE   =SIMP(statut='f',fr="Champ de pression issu d un autre calcul",typ=evol_char ),
+         TEMP_CALCULEE   =SIMP(statut='f',fr="Champ de température issu d un autre calcul",typ=(evol_ther,cham_no_temp_r,carte_temp_r,carte_temp_f ) ),
+         HYDR_CALCULEE   =SIMP(statut='f',fr="Champ d hydratation issu d un autre calcul",typ=evol_ther ),
+         SECH_CALCULEE   =SIMP(statut='f',fr="Champ de séchage issu d un autre calcul",typ=(evol_ther,cham_no_temp_r,carte_temp_r,carte_temp_f ) ),
+         EPSA_CALCULEE   =SIMP(statut='f',fr="Champ de déformation anélastique issu d un autre calcul",typ=evol_noli ),
+         VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+         
+           DDL_IMPO        =FACT(statut='f',min=01,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                     AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                                 'TEMP','PRE1','PRE2','UI2','UI3','VI2','VI3','WI2','WI3','UO2',
+                                 'UO3','VO2','VO3','WO2','WO3','UI4','UI5','VI4','VI5','WI4',
+                                 'WI5','UO4','UO5','VO4','VO5','WO4','WO5','UI6','UO6','VI6',
+                                 'VO6','WI6','WO6','WO','WI1','WO1'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+             GRX             =SIMP(statut='f',typ='R' ),
+             PRES            =SIMP(statut='f',typ='R' ),
+             PHI             =SIMP(statut='f',typ='R' ),
+             TEMP            =SIMP(statut='f',typ='R' ),
+             PRE1            =SIMP(statut='f',typ='R' ),
+             PRE2            =SIMP(statut='f',typ='R' ),
+             UI2             =SIMP(statut='f',typ='R' ),
+             UI3             =SIMP(statut='f',typ='R' ),
+             UI4             =SIMP(statut='f',typ='R' ),
+             UI5             =SIMP(statut='f',typ='R' ),
+             UI6             =SIMP(statut='f',typ='R' ),
+             UO2             =SIMP(statut='f',typ='R' ),
+             UO3             =SIMP(statut='f',typ='R' ),
+             UO4             =SIMP(statut='f',typ='R' ),
+             UO5             =SIMP(statut='f',typ='R' ),
+             UO6             =SIMP(statut='f',typ='R' ),
+             VI2             =SIMP(statut='f',typ='R' ),
+             VI3             =SIMP(statut='f',typ='R' ),
+             VI4             =SIMP(statut='f',typ='R' ),
+             VI5             =SIMP(statut='f',typ='R' ),
+             VI6             =SIMP(statut='f',typ='R' ),
+             VO2             =SIMP(statut='f',typ='R' ),
+             VO3             =SIMP(statut='f',typ='R' ),
+             VO4             =SIMP(statut='f',typ='R' ),
+             VO5             =SIMP(statut='f',typ='R' ),
+             VO6             =SIMP(statut='f',typ='R' ),
+             WI2             =SIMP(statut='f',typ='R' ),
+             WI3             =SIMP(statut='f',typ='R' ),
+             WI4             =SIMP(statut='f',typ='R' ),
+             WI5             =SIMP(statut='f',typ='R' ),
+             WI6             =SIMP(statut='f',typ='R' ),
+             WO2             =SIMP(statut='f',typ='R' ),
+             WO3             =SIMP(statut='f',typ='R' ),
+             WO4             =SIMP(statut='f',typ='R' ),
+             WO5             =SIMP(statut='f',typ='R' ),
+             WO6             =SIMP(statut='f',typ='R' ),
+             WO              =SIMP(statut='f',typ='R' ),
+             WI1             =SIMP(statut='f',typ='R' ),
+             WO1             =SIMP(statut='f',typ='R' ),
+           ),
+           FACE_IMPO       =FACT(statut='f',min=01,max='**',
+             regles=(UN_PARMI('GROUP_MA','MAILLE',),
+                     AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                                 'TEMP','PRE1','PRE2','DNOR','DTAN'),
+                     EXCLUS('DNOR','DX'),
+                     EXCLUS('DNOR','DY'),
+                     EXCLUS('DNOR','DZ'),
+                     EXCLUS('DNOR','DRX'),
+                     EXCLUS('DNOR','DRY'),
+                     EXCLUS('DNOR','DRZ'),
+                     EXCLUS('DTAN','DX'),
+                     EXCLUS('DTAN','DY'),
+                     EXCLUS('DTAN','DZ'),
+                     EXCLUS('DTAN','DRX'),
+                     EXCLUS('DTAN','DRY'),
+                     EXCLUS('DTAN','DRZ'),),
+#  rajout d un mot clé REPERE :/ LOCAL /GLOBAL                     
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+             DNOR            =SIMP(statut='f',typ='R' ),
+             DTAN            =SIMP(statut='f',typ='R' ),
+             GRX             =SIMP(statut='f',typ='R' ),
+             PRES            =SIMP(statut='f',typ='R' ),
+             PHI             =SIMP(statut='f',typ='R' ),
+             TEMP            =SIMP(statut='f',typ='R' ),
+             PRE1            =SIMP(statut='f',typ='R' ),
+             PRE2            =SIMP(statut='f',typ='R' ),
+           ),
+           LIAISON_DDL     =FACT(statut='f',fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",min=01,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             DDL             =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+           ),
+           LIAISON_OBLIQUE =FACT(statut='f',fr="Appliquer à des noeuds la même valeur de déplacement dans un repère oblique quelconque",min=01,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                     UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             ANGL_NAUT       =SIMP(statut='o',typ='R',max=03),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+           ), 
+           LIAISON_GROUP   =FACT(statut='f',fr="Définir des relations linéaires entre certains ddls de couples de noeuds",min=01,max='**',
+             regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),        
+                     UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                     EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                     EXCLUS('GROUP_MA_1','NOEUD_2'),      
+                     EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                     EXCLUS('GROUP_NO_1','MAILLE_2'),
+                     EXCLUS('MAILLE_1','GROUP_NO_2'),
+                     EXCLUS('MAILLE_1','NOEUD_2'),
+                     EXCLUS('NOEUD_1','GROUP_MA_2'),
+                     EXCLUS('NOEUD_1','MAILLE_2'),
+                     EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+             
+               GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+               GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+               GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+               NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+               GROUP_NO_2      =SIMP(statut='f',typ=no,max='**'),
+               NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+             
+             SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+             SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+             DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+             DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+             SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             TRAN            =SIMP(statut='f',typ='R',max=03),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+             CENTRE          =SIMP(statut='f',typ='R',max=03),
+           ),
+           LIAISON_SOLIDE  =FACT(statut='f',fr="Modéliser une partie indéformable d une structure",min=01,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ), 
+           LIAISON_UNIF    =FACT(statut='f',fr="Imposer une meme valeur (inconnue) à des ddls d un emsemble de noeuds",min=01,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           ), 
+           LIAISON_CHAMNO  =FACT(statut='f',fr="définir une relation linéaire entre tous les ddls présents dans un concept cham_nno",min=01,max='**',
+#  type de cham_no CO()
+             CHAM_NO         =SIMP(statut='o',typ=cham_no), #CO()
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ), 
+           LIAISON_ELEM    =FACT(statut='f',fr="Raccorder une poutre à une partie massive 3D ou une coque", min=01,max='**',
+             regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                     UN_PARMI('GROUP_NO_2','NOEUD_2'),),
+             OPTION          =SIMP(statut='o',typ='TXM',into=("3D_TUYAU","3D_POU","COQ_POU","COQ_TUYAU") ),
+             GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+             CARA_ELEM       =SIMP(statut='f',typ=(cara_elem) ),
+             AXE_POUTRE      =SIMP(statut='f',typ='R',max=03),
+             ANGL_MAX        =SIMP(statut='f',typ='R',defaut= 1. ),
+           ),
+           LIAISON_COQUE   =FACT(statut='f',min=01,max='**',
+             GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+           LIAISON_MAIL    =FACT(statut='f',min=01,max='**',
+             regles=(PRESENT_ABSENT('GROUP_MA_1','GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL'),
+                     PRESENT_ABSENT('MAILLE_1','GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL',),     
+                     PRESENT_ABSENT('GROUP_MA_2','GROUP_MA_MAIT','MAILLE_MAIT'),      
+                     PRESENT_ABSENT('MAILLE_2','GROUP_MA_MAIT','MAILLE_MAIT'),        
+                     PRESENT_ABSENT('GROUP_NO_2','GROUP_MA_MAIT','MAILLE_MAIT'),      
+                     PRESENT_ABSENT('NOEUD_2','GROUP_MA_MAIT','MAILLE_MAIT'),         
+                     AU_MOINS_UN('GROUP_MA_1','MAILLE_1','GROUP_MA_MAIT','MAILLE_MAIT'),
+                     AU_MOINS_UN('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2','GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL'),
+                     PRESENT_ABSENT('DDL_1','DDL_MAIT','DDL_ESCL'),    
+                     PRESENT_ABSENT('DDL_2','DDL_MAIT','DDL_ESCL'),
+                     PRESENT_PRESENT('DDL_1','DDL_2'),
+                     PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),),
+              GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_1        =SIMP(statut='f',typ=ma,max='**'), 
+              GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_MAIT     =SIMP(statut='f',typ=ma,max='**'), 
+              GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_2        =SIMP(statut='f',typ=ma,max='**'), 
+              GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+              NOEUD_2         =SIMP(statut='f',typ=no,max='**'), 
+              GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_ESCL     =SIMP(statut='f',typ=ma,max='**'), 
+              GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,max='**'),
+              NOEUD_ESCL      =SIMP(statut='f',typ=no,max='**'), 
+              TRAN            =SIMP(statut='f',typ='R',max=03 ),
+              ANGL_NAUT       =SIMP(statut='f',typ='R',max=03 ),
+              CENTRE          =SIMP(statut='f',typ='R',max=03 ),
+              DDL_1           =SIMP(statut='f',typ='TXM',max='**',into=("DNOR",) ),
+              DDL_2           =SIMP(statut='f',typ='TXM',max='**',into=("DNOR",) ),
+              DDL_MAIT        =SIMP(statut='f',typ='TXM',max='**',into=("DNOR",) ),
+              DDL_ESCL        =SIMP(statut='f',typ='TXM',max='**',into=("DNOR",) ),
+         ),
+         
+         FORCE_NODALE    =FACT(statut='f',fr="Imposer des forces nodales en des noeuds",min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           FX              =SIMP(statut='f',typ='R' ),
+           FY              =SIMP(statut='f',typ='R' ),
+           FZ              =SIMP(statut='f',typ='R' ),
+           MX              =SIMP(statut='f',typ='R' ),
+           MY              =SIMP(statut='f',typ='R' ),
+           MZ              =SIMP(statut='f',typ='R' ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+         ),
+         
+           FORCE_FACE      =FACT(statut='f',fr="Appliquer des forces surfaciques sur une face d éléments volumiques",min=01,max='**',
+             regles=(UN_PARMI('GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+           ), 
+           FORCE_ARETE     =FACT(statut='f',fr="Appliquer des forces linéiques à une arete d élément volumique ou de coque",min=01,max='**',
+             regles=(UN_PARMI('GROUP_MA','MAILLE',),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+             MX              =SIMP(statut='f',typ='R' ),
+             MY              =SIMP(statut='f',typ='R' ),
+             MZ              =SIMP(statut='f',typ='R' ),
+           ), 
+           FORCE_CONTOUR   =FACT(statut='f',fr="Appliquer des forces linéiques au bord d un domaine 2D ou AXIS_FOURIER",min=01,max='**',
+             regles=(UN_PARMI('GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+             MX              =SIMP(statut='f',typ='R' ),
+             MY              =SIMP(statut='f',typ='R' ),
+             MZ              =SIMP(statut='f',typ='R' ),
+           ), 
+           FORCE_INTERNE   =FACT(statut='f',fr="Appliquer des forces volumiques (2D ou 3D) à un domaine volumique",min=01,max='**',
+             regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ' ),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+           ), 
+           PRES_REP        =FACT(statut='f',fr="Appliquer une pression à un domaine de milieu continu 2D ou 3D",min=01,max='**',
+             regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('PRES','CISA_2D' ),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             PRES            =SIMP(statut='f',typ='R' ),
+             CISA_2D         =SIMP(statut='f',typ='R' ),
+           ),
+           EPSI_INIT       =FACT(statut='f',fr="Appliquer un chargement de déformation initiale à un volume 3D ou 2D",min=01,max='**',
+             regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ','EPX',
+                                 'KY','KZ','EXX','EYY','EXY','KXX','KYY','KXY'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             EPXX            =SIMP(statut='f',typ='R' ),
+             EPYY            =SIMP(statut='f',typ='R' ),
+             EPZZ            =SIMP(statut='f',typ='R' ),
+             EPXY            =SIMP(statut='f',typ='R' ),
+             EPXZ            =SIMP(statut='f',typ='R' ),
+             EPYZ            =SIMP(statut='f',typ='R' ),
+             EPX             =SIMP(statut='f',typ='R' ),
+             KY              =SIMP(statut='f',typ='R' ),
+             KZ              =SIMP(statut='f',typ='R' ),
+             EXX             =SIMP(statut='f',typ='R' ),
+             EYY             =SIMP(statut='f',typ='R' ),
+             EXY             =SIMP(statut='f',typ='R' ),
+             KXX             =SIMP(statut='f',typ='R' ),
+             KYY             =SIMP(statut='f',typ='R' ),
+             KXY             =SIMP(statut='f',typ='R' ),
+           ),
+         
+         
+           FORCE_COQUE     =FACT(statut='f',fr="Appliquer des forces surfaciques sur des coques",min=01,max='**',
+             regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),               
+                     PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('F1','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('F2','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('F3','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('MF1','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('MF2','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
+#  rajour d un mot clé REPERE :/ LOCAL /GLOBAL              
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             
+               FX              =SIMP(statut='f',typ='R' ),
+               FY              =SIMP(statut='f',typ='R' ),
+               FZ              =SIMP(statut='f',typ='R' ),
+               MX              =SIMP(statut='f',typ='R' ),
+               MY              =SIMP(statut='f',typ='R' ),
+               MZ              =SIMP(statut='f',typ='R' ),
+             
+               F1              =SIMP(statut='f',typ='R' ),
+               F2              =SIMP(statut='f',typ='R' ),
+               F3              =SIMP(statut='f',typ='R' ),
+               MF1             =SIMP(statut='f',typ='R' ),
+               MF2             =SIMP(statut='f',typ='R' ),
+              
+             PRES            =SIMP(statut='f',typ='R' ),
+             PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL",) ),
+           ),
+           FORCE_POUTRE    =FACT(statut='f',fr="Appliquer des forces linéiques sur des poutres",min=01,max='**',
+             regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','N','VY','VZ'),
+                     PRESENT_ABSENT('FX','N','VY','VZ'),              
+                     PRESENT_ABSENT('FY','N','VY','VZ'),
+                     PRESENT_ABSENT('FZ','N','VY','VZ'),
+                     PRESENT_ABSENT('N','FX','FY','FZ'),
+                     PRESENT_ABSENT('VY','FX','FY','FZ'),
+                     PRESENT_ABSENT('VZ','FX','FY','FZ'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE",) ),
+#  rajour d un mot clé REPERE :/ LOCAL /GLOBAL              
+               FX              =SIMP(statut='f',typ='R' ),
+               FY              =SIMP(statut='f',typ='R' ),
+               FZ              =SIMP(statut='f',typ='R' ),
+             
+               N               =SIMP(statut='f',typ='R' ),
+               VY              =SIMP(statut='f',typ='R' ),
+               VZ              =SIMP(statut='f',typ='R' ),
+              
+           ),
+           FORCE_TUYAU     =FACT(statut='f',fr="imposer une pression dans un élément TUYAU",min=01,max='**',
+             regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             PRES            =SIMP(statut='f',typ='R' ),
+           ),
+             
+         
+           FORCE_ELEC      =FACT(statut='f',fr="Appliquer une force de Laplace due à la présence d un conducteur rectiligne secondaire non maillé",min=01,max='**',
+             regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','POSITION'),
+                     EXCLUS('FX','POSITION'),
+                     EXCLUS('FY','POSITION'),   
+                     EXCLUS('FZ','POSITION'),),
+#  trop de règles : les blocs conditionnels permettent d en suprimer              
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+              
+             FX              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FY              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FZ              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             
+             POSITION        =SIMP(statut='f',typ='TXM',fr="Direction prédéfinie",into=("PARA","INFI","FINI",) ),
+             b_para     =BLOC ( condition = "POSITION == 'PARA'",
+               regles=(UN_PARMI('TRANS','DIST'),),
+               TRANS           =SIMP(statut='f',typ='R',max=03),
+               DIST            =SIMP(statut='f',typ='R' ),
+               b_point2        =BLOC ( condition = "DIST != None", 
+                 POINT2           =SIMP(statut='o',typ='R',max=03),
+               ),
+             ),
+             b_fini_infi     =BLOC ( condition = "(POSITION == 'FINI') or (POSITION == 'INFI')",
+               POINT1          =SIMP(statut='o',typ='R',max=03),
+               POINT2          =SIMP(statut='o',typ='R',max=03),
+             ), 
+           ),
+           INTE_ELEC       =FACT(statut='f',fr="Appliquer une force de Laplace due à la présence d un conducteur non rectiligne secondaire maillé ou non",min=01,max='**',
+             regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('GROUP_MA_2','MAILLE_2','TRANS','SYME'),
+                     EXCLUS('TRANS','SYME'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+             TRANS           =SIMP(statut='f',typ='R',max='**'),
+             SYME            =SIMP(statut='f',typ='R',max='**'),
+           ),
+         
+         
+           VITE_FACE       =FACT(statut='f',fr="Imposer des vitesses acoustiquesnormales à une face",min=01,max='**',
+             regles=(UN_PARMI('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             VNOR            =SIMP(statut='o',typ='R' ),
+           ),
+           ONDE_FLUI       =FACT(statut='f',fr="Appliquer une amplitude de pression d onde incidente",min=01,max='**',
+             regles=(UN_PARMI('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             PRES            =SIMP(statut='o',typ='R' ),
+           ),
+           IMPE_FACE       =FACT(statut='f',fr="Appliquer une impédance acoustique à une face",min=01,max='**',
+             regles=(UN_PARMI('GROUP_MA','MAILLE' ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             IMPE            =SIMP(statut='o',typ='R' ),
+           ),
+         
+         
+           FLUX_THM_REP    =FACT(statut='f',min=01,max='**',
+             regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FLUN            =SIMP(statut='f',typ='R' ),
+             FLUN_HYDR1      =SIMP(statut='f',typ='R' ),
+             FLUN_HYDR2      =SIMP(statut='f',typ='R' ),
+           ),
+         
+         EFFE_FOND       =FACT(statut='f',fr="Imposer un effet de fond",min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA','MAILLE'),),
+           GROUP_MA_INT    =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PRES            =SIMP(statut='o',typ='R' ),
+         ),
+         
+         LIAISON_UNIL_NO =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),# CO()
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),# CO()
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),# CO()
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),# CO()
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max=03 ),  
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=03 ),  
+           CENTRE          =SIMP(statut='f',typ='R',max=03 ),  
+           ANGLE_MAX       =SIMP(statut='f',typ='R' ),  
+           FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",   
+                                 into=("SANS","TRESCA","COULOMB") ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",    
+                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION") ),
+           COULOMB         =SIMP(statut='f',typ='R' ),  
+           TRESCA          =SIMP(statut='f',typ='R' ),  
+           E_T             =SIMP(statut='f',typ='R' ),  
+           COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           CONTACT         =SIMP(statut='f',typ='TXM',into=("MAINTENU",) ),
+           JEU             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+         ),
+         
+         CONTACT         =FACT(statut='f',fr="Imposer du contact avec ou sans frottement",min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA_2','MAILLE_2'),
+                   ENSEMBLE('FROTTEMENT','COULOMB'),
+                                EXCLUS('DIST_2','COEF_IMPO'),
+                   EXCLUS('DIST_1','COEF_IMPO'),
+                   EXCLUS('COEF_MULT_2','GROUP_MA_1'),
+                   EXCLUS('COEF_MULT_2','MAILLE_1'),
+                   EXCLUS('COEF_IMPO','GROUP_MA_1'),
+                   EXCLUS('COEF_IMPO','MAILLE_1'),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP")),
+           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                 into=("NON","NODAL","NODAL_SYME","MAIT_ESCL","MAIT_ESCL_SYME")),
+           RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_VOISIN",into=("NOEUD_BOUCLE","NOEUD_VOISIN")),
+           REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",    
+                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION") ),           
+           FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+           COULOMB         =SIMP(statut='f',typ='R',max=1),
+           E_T             =SIMP(statut='f',typ='R' ),  
+           COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           VECT_NORM_2     =SIMP(statut='f',typ='R',max=03),
+           PROJECTION      =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE",) ),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+           DIST_1          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           DIST_2          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           COEF_IMPO       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           COEF_MULT_2     =SIMP(statut='f',typ='R',defaut= 1. ),
+         ),
+         
+         RELA_CINE_BP    =FACT(statut='f',min=01,max='**',
+           CABLE_BP        =SIMP(statut='o',typ=cabl_precont ),
+           SIGM_BPEL       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           RELA_CINE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 17/05/2000   AUTEUR CIBHHLV L.VIVAN
+AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op=   7,sd_prod=char_meca,
+                     fr="Affectation de charges et conditions aux limites mécaniques complexes",
+                     docu="U4.44.05-C",reentrant='n',
+         regles=(AU_MOINS_UN('DDL_IMPO','FORCE_POUTRE','LIAISON_DDL', ),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+         DDL_IMPO        =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD',),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI', ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DX              =SIMP(statut='f',typ='C' ),
+           DY              =SIMP(statut='f',typ='C' ),
+           DZ              =SIMP(statut='f',typ='C' ),
+           DRX             =SIMP(statut='f',typ='C' ),
+           DRY             =SIMP(statut='f',typ='C' ),
+           DRZ             =SIMP(statut='f',typ='C' ),
+           GRX             =SIMP(statut='f',typ='C' ),
+           PRES            =SIMP(statut='f',typ='C' ),
+           PHI             =SIMP(statut='f',typ='C' ),
+         ),
+         FORCE_POUTRE    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE',),
+                   AU_MOINS_UN('FX','FY','FZ','N','VY','VZ',),
+                   PRESENT_ABSENT('FX','N','VY','VZ',),
+                   PRESENT_ABSENT('FY','N','VY','VZ',),
+                   PRESENT_ABSENT('FZ','N','VY','VZ',),
+                   PRESENT_ABSENT('N','FX','FY','FZ',),
+                   PRESENT_ABSENT('VY', 'FX','FY','FZ',),
+                   PRESENT_ABSENT('VZ','FX','FY','FZ', ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE") ),
+           FX              =SIMP(statut='f',typ='C' ),
+           FY              =SIMP(statut='f',typ='C' ),
+           FZ              =SIMP(statut='f',typ='C' ),
+           N               =SIMP(statut='f',typ='C' ),
+           VY              =SIMP(statut='f',typ='C' ),
+           VZ              =SIMP(statut='f',typ='C' ),
+         ),
+         LIAISON_DDL     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD', ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ='C' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2000   AUTEUR UFBHHLL C.CHAVANT 
+AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
+                      fr="Affectation de charges et conditions aux limites mécaniques fonction d une grandeur (temps, ...)",
+                      docu="U4.44.01-F",reentrant='n',
+        regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','LIAISON_DDL','FORCE_NODALE',
+                            'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',
+                            'PRES_REP','FORCE_POUTRE','VITE_FACE','IMPE_FACE','ONDE_PLANE',
+                            'LIAISON_OBLIQUE','EPSI_INIT','LIAISON_GROUP','LIAISON_UNIF',
+                            'LIAISON_SOLIDE','FORCE_COQUE','LIAISON_COQUE','FORCE_TUYAU',
+                            'CONTACT'),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),         
+         TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+         
+         DDL_IMPO        =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                               'TEMP','PRE1','PRE2'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DX              =SIMP(statut='f',typ=(fonction) ),
+           DY              =SIMP(statut='f',typ=(fonction) ),
+           DZ              =SIMP(statut='f',typ=(fonction) ),
+           DRX             =SIMP(statut='f',typ=(fonction) ),
+           DRY             =SIMP(statut='f',typ=(fonction) ),
+           DRZ             =SIMP(statut='f',typ=(fonction) ),
+           GRX             =SIMP(statut='f',typ=(fonction) ),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           PHI             =SIMP(statut='f',typ=(fonction) ),
+           TEMP            =SIMP(statut='f',typ=(fonction) ),
+           PRE1            =SIMP(statut='f',typ=(fonction) ),
+           PRE2            =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_UNIF    =FACT(statut='f',min=01,max='**',
+                               fr="Imposer une meme valeur (inconnue) à des ddls d un emsemble de noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+         ),
+         LIAISON_SOLIDE  =FACT(statut='f',min=01,max='**',
+                               fr="Modéliser une partie indéformable d une structure",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
+         ),
+         LIAISON_OBLIQUE =FACT(statut='f',min=01,max='**',
+                               fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                   UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           ANGL_NAUT       =SIMP(statut='o',typ='R',max=03),
+           DX              =SIMP(statut='f',typ=(fonction) ),
+           DY              =SIMP(statut='f',typ=(fonction) ),
+           DZ              =SIMP(statut='f',typ=(fonction) ),
+           DRX             =SIMP(statut='f',typ=(fonction) ),
+           DRY             =SIMP(statut='f',typ=(fonction) ),
+           DRZ             =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_COQUE   =FACT(statut='f',min=01,max='**',
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
+         ),
+         FACE_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI','TEMP','PRE1','PRE2','DNOR','DTAN'),
+                   EXCLUS('DNOR','DX'),
+                   EXCLUS('DNOR','DY'),
+                   EXCLUS('DNOR','DZ'),
+                   EXCLUS('DNOR','DRX'),
+                   EXCLUS('DNOR','DRY'),
+                   EXCLUS('DNOR','DRZ'),
+                   EXCLUS('DTAN','DX'),
+                   EXCLUS('DTAN','DY'),
+                   EXCLUS('DTAN','DZ'),
+                   EXCLUS('DTAN','DRX'),
+                   EXCLUS('DTAN','DRY'),
+                   EXCLUS('DTAN','DRZ'),),
+#  rajout d un mot cle REPERE : / GLOBAL / LOCAL
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           DX              =SIMP(statut='f',typ=(fonction) ),
+           DY              =SIMP(statut='f',typ=(fonction) ),
+           DZ              =SIMP(statut='f',typ=(fonction) ),
+           DRX             =SIMP(statut='f',typ=(fonction) ),
+           DRY             =SIMP(statut='f',typ=(fonction) ),
+           DRZ             =SIMP(statut='f',typ=(fonction) ),
+           GRX             =SIMP(statut='f',typ=(fonction) ),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           PHI             =SIMP(statut='f',typ=(fonction) ),
+           TEMP            =SIMP(statut='f',typ=(fonction) ),
+           PRE1            =SIMP(statut='f',typ=(fonction) ),
+           PRE2            =SIMP(statut='f',typ=(fonction) ),
+           DNOR            =SIMP(statut='f',typ=(fonction) ),
+           DTAN            =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_DDL     =FACT(statut='f',min=01,max='**',fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
+         ),
+         LIAISON_GROUP   =FACT(statut='f',min=01,max='**',
+                               fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                   EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                   EXCLUS('GROUP_MA_1','NOEUD_2'),
+                   EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                   EXCLUS('GROUP_NO_1','MAILLE_2'),
+                   EXCLUS('MAILLE_1','GROUP_NO_2'),
+                   EXCLUS('MAILLE_1','NOEUD_2'),
+                   EXCLUS('NOEUD_1','GROUP_MA_2'),
+                   EXCLUS('NOEUD_1','MAILLE_2'),
+                   EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'), 
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'), 
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'), 
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'), 
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'), 
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+           DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+           DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max=03),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+           CENTRE          =SIMP(statut='f',typ='R',max=03),
+         ),
+         
+         FORCE_NODALE    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           MX              =SIMP(statut='f',typ=(fonction) ),
+           MY              =SIMP(statut='f',typ=(fonction) ),
+           MZ              =SIMP(statut='f',typ=(fonction) ),
+           ANGL_NAUT       =SIMP(statut='f',typ=(fonction),max=03 ),
+         ),
+         FORCE_INTERNE   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FORCE_FACE      =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FORCE_ARETE     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           MX              =SIMP(statut='f',typ=(fonction) ),
+           MY              =SIMP(statut='f',typ=(fonction) ),
+           MZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FORCE_CONTOUR   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           MX              =SIMP(statut='f',typ=(fonction) ),
+           MY              =SIMP(statut='f',typ=(fonction) ),
+           MZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         PRES_REP        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('PRES','CISA_2D'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           CISA_2D         =SIMP(statut='f',typ=(fonction) ),
+         ),
+         
+         FORCE_COQUE     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('F1','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('F2','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('F3','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('MF1','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('MF2','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
+#  rajout d un mot cle REPERE : / GLOBAL / LOCAL
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           MX              =SIMP(statut='f',typ=(fonction) ),
+           MY              =SIMP(statut='f',typ=(fonction) ),
+           MZ              =SIMP(statut='f',typ=(fonction) ),
+           F1              =SIMP(statut='f',typ=(fonction) ),
+           F2              =SIMP(statut='f',typ=(fonction) ),
+           F3              =SIMP(statut='f',typ=(fonction) ),
+           MF1             =SIMP(statut='f',typ=(fonction) ),
+           MF2             =SIMP(statut='f',typ=(fonction) ),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",
+                                 into=("SUP","INF","MOY","MAIL") ),
+         ),
+         FORCE_POUTRE    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','N','VY','VZ'),
+                   PRESENT_ABSENT('FX','N','VY','VZ'),
+                   PRESENT_ABSENT('FY','N','VY','VZ'),
+                   PRESENT_ABSENT('FZ','N','VY','VZ'),
+                   PRESENT_ABSENT('N','FX','FY','FZ'),
+                   PRESENT_ABSENT('VY','FX','FY','FZ'),
+                   PRESENT_ABSENT('VZ','FX','FY','FZ'),),
+#  rajout d un mot cle REPERE : / GLOBAL / LOCAL                   
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE") ),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           N               =SIMP(statut='f',typ=(fonction) ),
+           VY              =SIMP(statut='f',typ=(fonction) ),
+           VZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FORCE_TUYAU     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+         ),
+         VITE_FACE       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           VNOR            =SIMP(statut='o',typ=(fonction) ),
+         ),
+         IMPE_FACE       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           IMPE            =SIMP(statut='o',typ=(fonction) ),
+         ),
+         ONDE_PLANE      =FACT(statut='f',min=01,max='**',
+           DIRECTION       =SIMP(statut='o',typ='R',max='**'),
+           TYPE_ONDE       =SIMP(statut='o',typ='TXM' ),
+           FONC_SIGNAL     =SIMP(statut='o',typ=(fonction) ),
+           DIST_ORIG       =SIMP(statut='o',typ='R' ),
+         ),
+         EPSI_INIT       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           EPXX            =SIMP(statut='f',typ=(fonction) ),
+           EPYY            =SIMP(statut='f',typ=(fonction) ),
+           EPZZ            =SIMP(statut='f',typ=(fonction) ),
+           EPXY            =SIMP(statut='f',typ=(fonction) ),
+           EPXZ            =SIMP(statut='f',typ=(fonction) ),
+           EPYZ            =SIMP(statut='f',typ=(fonction) ),
+         ),
+         
+         CONTACT         =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA_2','MAILLE_2'),
+                   ENSEMBLE('FROTTEMENT','COULOMB'),
+                   EXCLUS('DIST_2','COEF_IMPO'),
+                   EXCLUS('DIST_1','COEF_IMPO'),
+                   EXCLUS('COEF_MULT_2','GROUP_MA_1'),
+                   EXCLUS('COEF_MULT_2','MAILLE_1'),
+                   EXCLUS('COEF_IMPO','GROUP_MA_1'),
+                   EXCLUS('COEF_IMPO','MAILLE_1'),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP") ),
+           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                 into=("NON","NODAL","NODAL_SYME","MAIT_ESCL","MAIT_ESCL_SYME") ),
+           RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_VOISIN",
+                                 into=("NOEUD_BOUCLE","NOEUD_VOISIN") ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",    
+                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION") ),           
+           FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+           COULOMB         =SIMP(statut='f',typ='R',max=1),
+           E_T             =SIMP(statut='f',typ='R' ),  
+           COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           VECT_NORM_2     =SIMP(statut='f',typ='R',max=03),
+           PROJECTION      =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE",) ),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'  ),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'  ),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'  ),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+           DIST_1          =SIMP(statut='f',typ=(fonction) ),
+           DIST_2          =SIMP(statut='f',typ=(fonction) ),
+           COEF_IMPO       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           COEF_MULT_2     =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+         ),
+         FLUX_THM_REP    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUN            =SIMP(statut='f',typ=(fonction) ),
+           FLUN_HYDR1      =SIMP(statut='f',typ=(fonction) ),
+           FLUN_HYDR2      =SIMP(statut='f',typ=(fonction) ),
+         ),
+         
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 17/11/1999   AUTEUR CIBHHGB G.BERTRAND 
+AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther,
+                      fr=" ",
+                      docu="          ",reentrant='n',
+         regles=(AU_MOINS_UN('CARA_TORSION', ),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",    
+                               into=("OUI","NON") ),
+         TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),  
+         CARA_TORSION    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/11/2000   AUTEUR CIBHHLV L.VIVAN 
+AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
+                    ,fr="Affectation de charges et conditions aux limites thermiques constantes",
+                    docu="U4.44.02-F",reentrant='n',
+      regles=(AU_MOINS_UN('TEMP_IMPO','SOURCE','FLUX_REP','ECHANGE',
+                          'ECHANGE_PAROI','GRAD_TEMP_INIT','LIAISON_DDL','LIAISON_GROUP',
+                          'LIAISON_UNIF','LIAISON_CHAMNO','RAYONNEMENT','LIAISON_MAIL' ),),
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="OUI"),
+         TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+         LIAISON_DDL     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD', ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ='R' ),
+         ),
+         TEMP_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP_SUP','TEMP','TEMP_INF'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           TEMP            =SIMP(statut='f',typ='R'),
+           TEMP_INF        =SIMP(statut='f',typ='R'),
+           TEMP_SUP        =SIMP(statut='f',typ='R'), ),
+         LIAISON_UNIF    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+         ),
+         LIAISON_CHAMNO  =FACT(statut='f',min=01,max='**',
+           CHAM_NO         =SIMP(statut='o',typ=cham_no),# CO()# "il faut definir une structure de donnee generique chamno"
+           COEF_IMPO       =SIMP(statut='o',typ='R' ),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+         ),
+         SOURCE          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('SOUR','SOUR_CALCULEE',),
+                        PRESENT_ABSENT('SOUR_CALCULEE','TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SOUR            =SIMP(statut='f',typ='R'),
+           SOUR_CALCULEE   =SIMP(statut='f',typ=(cham_elem_sour_r) ),
+         ),
+         FLUX_REP        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                        AU_MOINS_UN('FLUN','FLUN_INF','FLUN_SUP','CARA_TORSION') ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUN            =SIMP(statut='f',typ='R'),
+           FLUN_INF        =SIMP(statut='f',typ='R'),
+           FLUN_SUP        =SIMP(statut='f',typ='R'),
+           CARA_TORSION    =SIMP(statut='f',typ=tabl_aire_int ),
+         ),
+         ECHANGE         =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                        AU_MOINS_UN('COEF_H','COEF_H_INF','COEF_H_SUP'),
+                             ENSEMBLE('COEF_H','TEMP_EXT',),
+                   ENSEMBLE('COEF_H_INF','TEMP_EXT_INF'),
+                             ENSEMBLE('COEF_H_SUP','TEMP_EXT_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           COEF_H          =SIMP(statut='f',typ='R'),
+           TEMP_EXT        =SIMP(statut='f',typ='R'),
+           COEF_H_INF      =SIMP(statut='f',typ='R'),
+           TEMP_EXT_INF    =SIMP(statut='f',typ='R'),
+           COEF_H_SUP      =SIMP(statut='f',typ='R'),
+           TEMP_EXT_SUP    =SIMP(statut='f',typ='R'),
+         ),
+         ECHANGE_PAROI   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                        UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           COEF_H          =SIMP(statut='o',typ='R'),
+           TRAN            =SIMP(statut='f',typ='R',max='**'),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**'),
+           CENTRE          =SIMP(statut='f',typ='R',max='**'),
+                         ),
+         GRAD_TEMP_INIT  =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                        AU_MOINS_UN('FLUX_X','FLUX_Y','FLUX_Z'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUX_X          =SIMP(statut='f',typ='R' ),
+           FLUX_Y          =SIMP(statut='f',typ='R' ),
+           FLUX_Z          =SIMP(statut='f',typ='R' ),
+                         ),
+         LIAISON_GROUP   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                             EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                             EXCLUS('GROUP_MA_1','NOEUD_2'),
+                   EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                             EXCLUS('GROUP_NO_1','MAILLE_2'),
+                             EXCLUS('MAILLE_1','GROUP_NO_2'),
+                             EXCLUS('MAILLE_1','NOEUD_2'),
+                             EXCLUS('NOEUD_1','GROUP_MA_2'),
+                             EXCLUS('NOEUD_1','MAILLE_2'),
+                             EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+           DDL_1           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+           DDL_2           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP",) ),
+           COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ='R' ),
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max='**'),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**'),
+           CENTRE          =SIMP(statut='f',typ='R',max='**'),
+         ),
+         CONVECTION      =FACT(statut='f',min=01,max='**',
+           VITESSE         =SIMP(statut='o',typ=(cham_no_depl_r) ),
+         ),
+         RAYONNEMENT     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE',),
+                        ENSEMBLE('SIGMA','EPSILON','TEMP_EXT'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SIGMA           =SIMP(statut='o',typ='R'),
+           EPSILON         =SIMP(statut='o',typ='R'),
+           TEMP_EXT        =SIMP(statut='o',typ='R'),
+         ),
+         LIAISON_MAIL    =FACT(statut='f',min=01,max='**',
+           regles=(PRESENT_ABSENT('GROUP_MA_1','GROUP_MA_ESCL','MAILLE_ESCL',        
+                                  'GROUP_NO_ESCL','NOEUD_ESCL'),
+                   PRESENT_ABSENT('MAILLE_1','GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL'),     
+                   PRESENT_ABSENT('GROUP_MA_2','GROUP_MA_MAIT','MAILLE_MAIT'),      
+                   PRESENT_ABSENT('MAILLE_2','GROUP_MA_MAIT','MAILLE_MAIT'),        
+                   PRESENT_ABSENT('GROUP_NO_2','GROUP_MA_MAIT','MAILLE_MAIT'),      
+                   PRESENT_ABSENT('NOEUD_2','GROUP_MA_MAIT','MAILLE_MAIT'),         
+                   AU_MOINS_UN('GROUP_MA_1','MAILLE_1','GROUP_MA_MAIT','MAILLE_MAIT'),
+                   AU_MOINS_UN('GROUP_MA_2','MAILLE_2','GROUP_NO_2', 
+                               'NOEUD_2','GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL',          
+                               'NOEUD_ESCL'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'), 
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_MAIT     =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_ESCL     =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_ESCL      =SIMP(statut='f',typ=no,max='**'),
+           TRAN            =SIMP(statut='f',typ='R',max='**' ),  
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**' ),  
+           CENTRE          =SIMP(statut='f',typ='R',max='**' ),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 12/05/99   AUTEUR VABHHTS J.PELLET 
+AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
+                     fr="Affectation de charges et conditions aux limites thermiques fonction dune grandeur (temps, ...)",
+                     docu="U4.44.02-F",reentrant='n',
+      regles=(AU_MOINS_UN('TEMP_IMPO','SOURCE','FLUX_REP','FLUX_NL','ECHANGE',
+                          'ECHANGE_PAROI','LIAISON_DDL','LIAISON_GROUP','LIAISON_UNIF',
+                          'GRAD_TEMP_INIT','RAYONNEMENT'),),
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+         LIAISON_DDL     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
+         ),
+         TEMP_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP_SUP','TEMP','TEMP_INF','EVOL_THER'),
+                   PRESENT_ABSENT('EVOL_THER','TEMP','TEMP_INF','TEMP_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           EVOL_THER       =SIMP(statut='f',typ=(evol_ther) ),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',into=("TEMP",) ),
+           TEMP            =SIMP(statut='f',typ=(fonction) ),
+           TEMP_INF        =SIMP(statut='f',typ=(fonction) ),
+           TEMP_SUP        =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_UNIF    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+         ),
+         SOURCE          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SOUR            =SIMP(statut='o',typ=(fonction) ),
+         ),
+         FLUX_REP        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE',),
+                        AU_MOINS_UN('FLUN','FLUN_INF','FLUN_SUP','FLUX_X','FLUX_Y','FLUX_Z'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUN            =SIMP(statut='f',typ=(fonction) ),
+           FLUN_INF        =SIMP(statut='f',typ=(fonction) ),
+           FLUN_SUP        =SIMP(statut='f',typ=(fonction) ),
+           FLUX_X          =SIMP(statut='f',typ=(fonction) ),
+           FLUX_Y          =SIMP(statut='f',typ=(fonction) ),
+           FLUX_Z          =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FLUX_NL         =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUN            =SIMP(statut='o',typ=(fonction) ),
+         ),
+         ECHANGE         =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE',),
+                        AU_MOINS_UN('COEF_H','COEF_H_INF','COEF_H_SUP'),
+                        ENSEMBLE('COEF_H','TEMP_EXT'),
+                   ENSEMBLE('COEF_H_INF','TEMP_EXT_INF'),
+                        ENSEMBLE('COEF_H_SUP','TEMP_EXT_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           COEF_H          =SIMP(statut='f',typ=(fonction) ),
+           TEMP_EXT        =SIMP(statut='f',typ=(fonction) ),
+           COEF_H_INF      =SIMP(statut='f',typ=(fonction) ),
+           TEMP_EXT_INF    =SIMP(statut='f',typ=(fonction) ),
+           COEF_H_SUP      =SIMP(statut='f',typ=(fonction) ),
+           TEMP_EXT_SUP    =SIMP(statut='f',typ=(fonction) ),
+         ),
+         ECHANGE_PAROI   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                        UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           COEF_H          =SIMP(statut='o',typ=(fonction) ),
+           TRAN            =SIMP(statut='f',typ='R',max='**'),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**'),
+           CENTRE          =SIMP(statut='f',typ='R',max='**'),
+         ),
+         GRAD_TEMP_INIT  =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                        AU_MOINS_UN('FLUX_X','FLUX_Y','FLUX_Z'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUX_X          =SIMP(statut='f',typ=(fonction) ),
+           FLUX_Y          =SIMP(statut='f',typ=(fonction) ),
+           FLUX_Z          =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_GROUP   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                             EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                        EXCLUS('GROUP_MA_1','NOEUD_2'),
+                   EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                        EXCLUS('GROUP_NO_1','MAILLE_2'),
+                        EXCLUS('MAILLE_1','GROUP_NO_2'),
+                        EXCLUS('MAILLE_1','NOEUD_2'),
+                        EXCLUS('NOEUD_1','GROUP_MA_2'),
+                        EXCLUS('NOEUD_1','MAILLE_2'),
+                        EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+           DDL_1           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+           DDL_2           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max='**'),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**'),
+           CENTRE          =SIMP(statut='f',typ='R',max='**'),
+         ),
+         CONVECTION      =FACT(statut='f',min=01,max='**',
+           VITESSE         =SIMP(statut='o',typ=(cham_no_depl_r) ),
+         ),
+         RAYONNEMENT     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),
+                        ENSEMBLE('SIGMA','EPSILON','TEMP_EXT'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SIGMA           =SIMP(statut='o',typ=(fonction) ),
+           EPSILON         =SIMP(statut='o',typ=(fonction) ),
+           TEMP_EXT        =SIMP(statut='o',typ=(fonction) ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 24/09/97   AUTEUR CIBHHLV L.VIVAN 
+AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
+                   fr="Affectation de caractéristiques de matériaux à un maillage",
+                         docu="U4.43.03-F",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         MODELE          =SIMP(statut='f',typ=modele),
+         AFFE            =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           MATER           =SIMP(statut='o',typ=mater),
+           TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 26/09/2000   AUTEUR CIBHHLV L.VIVAN 
+AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-F",
+                 fr="Affectation des éléments finis sur le maillage",reentrant='n',
+         regles=(AU_MOINS_UN('AFFE','AFFE_SOUS_STRUC'),),
+         MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
+         TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',max='**',into=("MAILLE","NOEUD") ),
+         AFFE_SOUS_STRUC =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('TOUT','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PHENOMENE       =SIMP(statut='f',typ='TXM',defaut="MECANIQUE",into=("MECANIQUE",) ),
+         ),
+         AFFE            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           PHENOMENE       =SIMP(statut='o',typ='TXM',
+                                 into=("MECANIQUE","THERMIQUE","ACOUSTIQUE","NON_LOCAL") ),
+                b_mecanique     =BLOC( condition = "PHENOMENE=='MECANIQUE'",
+                                        fr="modelisations mécaniques",
+                    MODELISATION    =SIMP(statut='o',typ='TXM', into=(
+                                                                      "2D_CONTACT",
+                                                                      "2D_DIS_T",
+                                                                      "2D_DIS_TR",
+                                                                      "2D_FLUI_ABSO",
+                                                                      "2D_FLUI_PESA",
+                                                                      "2D_FLUI_STRU",
+                                                                      "2D_FLUIDE",
+                                                                      "3D",
+                                                                      "3D_ABSO",
+                                                                      "3D_CONTACT",
+                                                                      "3D_FAISCEAU",
+                                                                      "3D_FLUI_ABSO",
+                                                                      "3D_FLUIDE",
+                                                                      "3D_HHM" ,
+                                                                      "3D_HM",
+                                                                      "3D_INCO",
+                                                                      "3D_JOINT_CT",
+                                                                      "3D_SI",
+                                                                      "3D_THH",
+                                                                      "3D_THHM",
+                                                                      "3D_THM",
+                                                                      "APPUI_REP",
+                                                                      "ASSE_GRIL",
+                                                                      "AXIS",
+                                                                      "AXIS_FLUI_STRU",
+                                                                      "AXIS_FLUIDE",
+                                                                      "AXIS_FOURIER",
+                                                                      "AXIS_HHM",
+                                                                      "AXIS_HM",
+                                                                      "AXIS_INCO",
+                                                                      "AXIS_SI",
+                                                                      "AXIS_THH",
+                                                                      "AXIS_THHM",
+                                                                      "AXIS_THM",
+                                                                      "BARRE",
+                                                                      "C_PLAN",
+                                                                      "CABLE",
+                                                                      "CABLE_POULIE",
+                                                                      "COQUE_3D",
+                                                                      "COQUE_AXIS",
+                                                                      "COQUE_C_PLAN",
+                                                                      "COQUE_D_PLAN",
+                                                                      "D_PLAN",
+                                                                      "D_PLAN_ABSO",
+                                                                      "D_PLAN_HHM",
+                                                                      "D_PLAN_HM",
+                                                                      "D_PLAN_SI",
+                                                                      "D_PLAN_THH",
+                                                                      "D_PLAN_THHM",
+                                                                      "D_PLAN_THM",
+                                                                      "DIS_T",
+                                                                      "DIS_TR",
+                                                                      "DKT",
+                                                                      "DST",
+                                                                      "FLUI_STRU",
+                                                                      "GRILLE",
+                                                                      "PLAN_INCO",
+                                                                      "POU_C_T",
+                                                                      "POU_D_E",
+                                                                      "POU_D_T",
+                                                                      "POU_D_T_GD",
+                                                                      "POU_D_TG",
+                                                                      "Q4G",
+                                                                      "TUYAU",
+                                                                      "TUYAU_6M"
+                                                                     )  )  ),
+                                                                     
+                b_thermique     =BLOC( condition = "PHENOMENE=='THERMIQUE'",
+                                        fr="modelisations thermiques",
+                    MODELISATION    =SIMP(statut='o',typ='TXM',into=( 
+                                                                      "3D",
+                                                                      "3D_DIAG",
+                                                                      "AXIS",
+                                                                      "AXIS_DIAG",
+                                                                      "AXIS_FOURIER",
+                                                                      "COQUE",
+                                                                      "COQUE_AXIS",
+                                                                      "COQUE_PLAN",
+                                                                      "PLAN",
+                                                                      "PLAN_DIAG",
+                                                                      ),),),
+                                                                     
+                b_acoustique    =BLOC( condition = "PHENOMENE=='ACOUSTIQUE'",
+                                        fr="modelisations acoustiques",
+                     MODELISATION    =SIMP(statut='o',typ='TXM',into=(
+                                                                       "3D",
+                                                                       "PLAN"
+                                                                       ), ),),
+                                                                       
+                b_non_local     =BLOC( condition = "PHENOMENE=='NON_LOCAL'",
+                                        fr="modelisations non locales",
+                     MODELISATION    =SIMP(statut='o',typ='TXM',into=(
+                                                                      "3D",
+                                                                      "AXIS",
+                                                                      "C_PLAN",
+                                                                      "D_PLAN",
+                                                                     ) ), ),
+         ),
+) ;
+#& MODIF COMMANDE DATE 25/10/93 AUTEUR VABHHTS J.PELLET
+AIDE=PROC(nom="AIDE",op=42,docu="U4.02.01-F",
+          fr="Interrogation sur le catalogue des commandes et les concepts produits",                                                                                                                                                                                           
+         regles=(AU_MOINS_UN('COMMANDE','CONCEPT','TYPE_ELEM', ),),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         TYPE_ELEM       =FACT(fr="couple type_elem option",
+                               statut='f',min=01,max=01,
+           INITEL          =SIMP(statut='f',typ='TXM',defaut="NON",
+                                 into=("OUI","NON",) ),
+         ),
+         COMMANDE        =FACT(statut='f',min=01,max='**',
+           NOM             =SIMP(fr="liste des noms de commande", 
+                                 statut='f',typ='TXM',max='**',defaut="*"),
+           OPTION          =SIMP(fr="option d'édition de commande",
+                                 statut='f',typ='TXM',defaut="CATALOGUE",
+                                 into=("CATALOGUE","A_REMPLIR","NUMERO",) ),
+         ),
+         CONCEPT         =FACT(statut='f',min=01,max='**',
+           NOM             =SIMP(fr="liste des noms de concept", 
+                                 statut='f',typ='TXM',max='**',defaut="*"),
+           OPTION          =SIMP(fr="option d'édition de concept",
+                                 statut='f',typ='TXM',defaut="TOUT_TYPE",
+                                 into=("TOUT_TYPE","CREER","A_CREER",) ),
+         ),
+) ;
+#& MODIF COMMANDE DATE 18/03/92 AUTEUR INCONNU INCONNU
+ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage,
+                   fr="Assembler deux maillages sous un seul nom",
+                   docu="U4.23.03-E",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage,min=02,max=02 ),
+)  ;
+#& MODIF COMMANDE  DATE 02/10/96   AUTEUR CIBHHLV L.VIVAN 
+ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=matr_asse_gene_r,
+                    fr="Assemblage des matrices généralisées de macro éléments pour construction de la matrice globale généralisée",
+                    docu="U4.65.04-D",reentrant='n',
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         OPTION          =SIMP(statut='o',typ='TXM',into=("RIGI_GENE","MASS_GENE","AMOR_GENE") ),
+)  ;
+#& MODIF COMMANDE  DATE 02/10/96   AUTEUR CIBHHLV L.VIVAN 
+def asse_matrice_prod(MATR_ELEM,**args):
+  if AsType(MATR_ELEM) == matr_elem_depl_r : return matr_asse_depl_r
+  if AsType(MATR_ELEM) == matr_elem_depl_c : return matr_asse_depl_c
+  if AsType(MATR_ELEM) == matr_elem_temp_r : return matr_asse_temp_r
+  if AsType(MATR_ELEM) == matr_elem_pres_c : return matr_asse_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+ASSE_MATRICE=OPER(nom="ASSE_MATRICE",op=12,sd_prod=asse_matrice_prod,
+                  fr="Construction d une matrice assemblée",docu="U4.61.22-F",reentrant='n',
+         MATR_ELEM       =SIMP(statut='o',
+                               typ=(matr_elem_depl_r,matr_elem_depl_c,matr_elem_temp_r,matr_elem_pres_c) ),
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl),
+         CHAR_CINE       =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE DATE 30/06/93 AUTEUR T8BHHTK T.KERBER
+ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene,
+                    fr="Assemblage de vecteurs de chargement en coordonnées généralisées",
+                    docu="U4.65.05-D",reentrant='n',
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         CHAR_SOUS_STRUC =FACT(statut='o',min=01,max='**',
+           SOUS_STRUC      =SIMP(statut='o',typ='TXM' ),
+           VECT_ASSE       =SIMP(statut='o',typ=cham_no_depl_r ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 02/10/96   AUTEUR CIBHHLV L.VIVAN 
+def asse_vecteur_prod(VECT_ELEM,**args):
+  if AsType(VECT_ELEM) == vect_elem_depl_r : return cham_no_depl_r
+  if AsType(VECT_ELEM) == vect_elem_temp_r : return cham_no_temp_r
+  if AsType(VECT_ELEM) == vect_elem_pres_r : return cham_no_pres_r
+  if AsType(VECT_ELEM) == vect_elem_pres_c : return cham_no_pres_c
+  raise AsException("type de concept resultat non prevu : %s" %`AsType(VECT_ELEM)`)
+
+ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=asse_vecteur_prod,
+                  fr="Assemblage d un second membre",docu="U4.61.23-F",reentrant='n',
+         VECT_ELEM       =SIMP(statut='o',typ=vect_elem,max='**'),
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2,) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/09/98   AUTEUR ACBHHCD G.DEVESA 
+CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8,
+                     fr="Création d'une liste d'amortissements modaux calculés selon la règle du RCC-G",
+                     docu="U4.52.13-C",reentrant='n',
+         ENER_SOL        =FACT(statut='o',min=01,max=01,
+           regles=(UN_PARMI('GROUP_NO_RADIER','GROUP_MA_RADIER'),
+                   PRESENT_ABSENT('COEF_GROUP','FONC_GROUP'),
+#  Peut-on remplacer les deux règles suivantes par un ENSEMBLE_('KRX','KRY','KRZ')
+                   PRESENT_PRESENT('KRX','KRY'),
+                   PRESENT_PRESENT('KRX','KRZ'),
+                   PRESENT_ABSENT('COOR_CENTRE','NOEUD_CENTRE'),
+                   PRESENT_ABSENT('GROUP_NO_CENTRE','NOEUD_CENTRE'),
+                   PRESENT_ABSENT('GROUP_NO_CENTRE','COOR_CENTRE'),),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","RIGI_PARASOL") ),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+           GROUP_NO_RADIER =SIMP(statut='f',typ=grno,max='**'),
+           GROUP_MA_RADIER =SIMP(statut='f',typ=grma,max='**'),
+           FONC_GROUP      =SIMP(statut='f',typ=fonction ),
+           COEF_GROUP      =SIMP(statut='f',typ='R',max='**'),
+           KX              =SIMP(statut='o',typ='R' ),
+           KY              =SIMP(statut='o',typ='R' ),
+           KZ              =SIMP(statut='o',typ='R' ),
+           KRX             =SIMP(statut='f',typ='R' ),
+           KRY             =SIMP(statut='f',typ='R' ),
+           KRZ             =SIMP(statut='f',typ='R' ),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+           COOR_CENTRE     =SIMP(statut='f',typ='R',max=03),
+         ),
+         AMOR_INTERNE    =FACT(statut='o',min=01,max=01,
+           ENER_POT        =SIMP(statut='o',typ=tabl_ener_pot ),
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+           AMOR_REDUIT     =SIMP(statut='o',typ='R',max='**'),
+         ),
+         AMOR_SOL        =FACT(statut='o',min=01,max=01,
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FONC_AMOR_GEO   =SIMP(statut='o',typ=fonction,max='**' ),
+           HOMOGENE        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 0.3 ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 29/08/2000   AUTEUR ADBHHPM P.MASSIN 
+def calc_cham_elem_prod(OPTION,**args):
+  if OPTION == "EQUI_ELGA_SIGM" : return cham_elem_sief_r
+  if OPTION == "EQUI_ELNO_SIGM" : return cham_elem_sief_r
+  if OPTION == "SIGM_ELNO_DEPL" : return cham_elem_sief_r
+  if OPTION == "SIGM_ELNO_LAGR" : return cham_elem_sief_r
+  if OPTION == "SIPO_ELNO_DEPL" : return cham_elem_sief_r
+  if OPTION == "SIEF_ELGA_DEPL" : return cham_elem_sief_r
+  if OPTION == "SIEF_ELGA_LAGR" : return cham_elem_sief_r
+  if OPTION == "SIGM_ELNO_CART" : return cham_elem_sief_r
+  if OPTION == "EFGE_ELNO_CART" : return cham_elem_sief_r
+  if OPTION == "EFGE_ELNO_DEPL" : return cham_elem_sief_r
+  if OPTION == "EQUI_ELGA_EPSI" : return cham_elem_epsi_r
+  if OPTION == "EQUI_ELNO_EPSI" : return cham_elem_epsi_r
+  if OPTION == "DEGE_ELNO_DEPL" : return cham_elem_epsi_r
+  if OPTION == "EPSI_ELNO_DEPL" : return cham_elem_epsi_r
+  if OPTION == "FLUX_ELGA_TEMP" : return cham_elem_flux_r
+  if OPTION == "FLUX_ELNO_TEMP" : return cham_elem_flux_r
+  if OPTION == "SOUR_ELGA_ELEC" : return cham_elem_sour_r
+  if OPTION == "ENEL_ELGA" :      return cham_elem_ener_r
+  if OPTION == "ENEL_ELNO_ELGA" : return cham_elem_ener_r
+  if OPTION == "EPOT_ELEM_DEPL" : return cham_elem_ener_r
+  if OPTION == "ECIN_ELEM_DEPL" : return cham_elem_ener_r
+  if OPTION == "PRES_ELNO_DBEL" : return cham_elem_dbel_r
+  if OPTION == "PRES_ELNO_REEL" : return cham_elem_pres_r
+  if OPTION == "PRES_ELNO_IMAG" : return cham_elem_pres_r
+  if OPTION == "PRES_DBEL_DEPL" : return cham_elem_dbel_r
+  if OPTION == "ENDO_ELNO_SIGM" : return cham_elem_sief_r
+  if OPTION == "COOR_ELGA" :      return cham_elem_geom_r
+  raise AsException("type de concept resultat non prevu")
+
+CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=calc_cham_elem_prod,
+                    fr="Calcul de champs par éléments (contraintes, déformations ou flux) à partir de champs solution (déplacement ou température) ou de champs  par éléments",
+                    docu="U4.81.03-F",reentrant='n',
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+# 
+# 
+#  introduire un mot cle de type modelisation : mécanique,thermique,...
+# 
+
+         OPTION          =SIMP(statut='o',typ='TXM',
+                               into=("DEGE_ELNO_DEPL","EFGE_ELNO_DEPL","EPOT_ELEM_DEPL",
+                                     "EPSI_ELNO_DEPL","PRES_DBEL_DEPL","SIGM_ELNO_DEPL",
+                                     "SIEF_ELGA_DEPL","SIEF_ELGA_LAGR","SIGM_ELNO_LAGR",
+                                     "EFGE_ELNO_CART","ENDO_ELNO_SIGM","EQUI_ELGA_EPSI",
+                                     "EQUI_ELGA_SIGM","EQUI_ELNO_EPSI","EQUI_ELNO_SIGM",
+                                     "SIGM_ELNO_CART","ECIN_ELEM_DEPL","SIPO_ELNO_DEPL",
+                                     "FLUX_ELNO_TEMP","FLUX_ELGA_TEMP","SOUR_ELGA_ELEC",
+                                     "PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
+                                     "COOR_ELGA","ENEL_ELGA","ENEL_ELNO_ELGA"), ),
+         DEPL            =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_depl_c)),
+         PROPAGATION     =SIMP(statut='f',typ='R',defaut= 0.E+0),
+         CHAM_ELEM       =SIMP(statut='f',typ=(cham_elem_sief_r,cham_elem_epsi_r) ),
+         FREQ            =SIMP(statut='f',typ='R'),
+         VITE            =SIMP(statut='f',typ=cham_no_depl_r),
+         EXCIT           =FACT(statut='f',min=01,max='**',
+               regles=(EXCLUS('FONC_MULT','COEF_MULT', ),),
+               CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou)),
+               FONC_MULT       =SIMP(statut='f',typ=fonction),
+               COEF_MULT       =SIMP(statut='f',typ='R'),
+         ),
+         INST            =SIMP(statut='f',typ='R',defaut= 0.E+0),
+         ACCE            =SIMP(statut='f',typ=cham_no_depl_r),
+         NUME_COUCHE     =SIMP(statut='f',typ='I',defaut= 1),
+         NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY") ),
+         MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0 ),
+
+         TEMP            =SIMP(statut='f',typ=(cham_no_temp_r) ),
+
+         PRES            =SIMP(statut='f',typ=(cham_no_pres_c) ),
+
+         TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),
+         ANGLE           =SIMP(statut='f',typ='I',defaut= 0),
+         PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",
+                               into=("SUP","INF","MOY","MAIL"), ),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN
+def calc_char_cine_prod(CHAR_CINE,**args):
+  if AsType(CHAR_CINE) == char_cine_meca : return cham_no_depl_r
+  if AsType(CHAR_CINE) == char_cine_ther : return cham_no_temp_r
+  if AsType(CHAR_CINE) == char_cine_acou : return cham_no_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=calc_char_cine_prod,
+                    fr="Calcul des seconds membres associés à des charges cinématiques (conditions aux limites non dualisées)",
+                    docu="U4.61.03-E",reentrant='n',
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl ),
+         CHAR_CINE       =SIMP(statut='o',typ=(char_cine_meca,char_cine_ther,char_cine_acou ) ),
+         INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE DATE 08/03/94 AUTEUR VABHHT2 G.BERTRAND
+def calc_char_seisme_prod(MATR_MASS,**args ):
+  if AsType(MATR_MASS) == matr_asse_depl_r : return cham_no_depl_r
+  raise AsException("type de concept resultat non prevu")
+
+CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op=  92,sd_prod=calc_char_seisme_prod,
+                      fr="Calcul du chargement sismique (forces d inertie fictives) pour une étude ultérieure de la réponse en mouvement relatif par rapport aux appuis",
+                      docu="U4.63.01-E",reentrant='n',
+         regles=(UN_PARMI('MONO_APPUI','MODE_STAT' ),),
+         MATR_MASS       =SIMP(statut='o',typ=matr_asse_depl_r,fr="Matrice de masse" ),
+         DIRECTION       =SIMP(statut='o',typ='R',max=06,fr="Directions du séisme imposé"),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),         
+         MODE_STAT       =SIMP(statut='f',typ=mode_stat ),
+         b_mode_stat     =BLOC ( condition = "MODE_STAT != None",
+           regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 29/08/2000   AUTEUR ADBHHPM P.MASSIN 
+def calc_elem_prod(RESULTAT,**args):
+  if AsType(RESULTAT) == evol_elas :    return evol_elas
+  if AsType(RESULTAT) == evol_noli :    return evol_noli
+  if AsType(RESULTAT) == evol_ther :    return evol_ther
+  if AsType(RESULTAT) == dyna_trans :   return dyna_trans
+  if AsType(RESULTAT) == dyna_harmo :   return dyna_harmo
+  if AsType(RESULTAT) == acou_harmo :   return acou_harmo
+  if AsType(RESULTAT) == mode_meca :    return mode_meca
+  if AsType(RESULTAT) == mode_flamb :   return mode_flamb
+  if AsType(RESULTAT) == mode_acou :    return mode_acou
+  if AsType(RESULTAT) == mode_stat :    return mode_stat
+  if AsType(RESULTAT) == mult_elas :    return mult_elas
+  if AsType(RESULTAT) == fourier_elas : return fourier_elas
+  if AsType(RESULTAT) == base_modale  : return base_modale
+  raise AsException("type de concept resultat non prevu")
+
+CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,docu="U4.81.01-F",reentrant='f',
+                    fr="Compléter un résultat en calculant des champs par éléments (contraintes, déformations,... )",
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                        'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+
+         LIST_ORDRE      =SIMP(statut='f',typ=listis),
+
+         OPTION          =SIMP(statut='o',typ='TXM',max='**',
+                               into=("EFGE_ELNO_DEPL","EPOT_ELEM_DEPL","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
+                                     "SIGM_ELNO_TUYO","SIGM_ELNO_CART","DEGE_ELNO_DEPL","EFGE_ELNO_CART",
+                                     "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL",
+                                     "EPME_ELNO_DEPL","EPME_ELGA_DEPL","EPMG_ELNO_DEPL","EPMG_ELGA_DEPL",
+                                     "EPSP_ELNO","EPSP_ELGA","ECIN_ELEM_DEPL","SIPO_ELNO_DEPL",
+                                     "EPGR_ELNO","EPGR_ELGA","DURT_ELGA_META","DURT_ELNO_META",
+                                     "SIGM_ELNO_COQU","SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",
+                                     "SIGM_NOZ1_ELGA","ERRE_ELEM_NOZ1","SIGM_NOZ2_ELGA","ERRE_ELEM_NOZ2",
+                                     "VNOR_ELEM_DEPL","SIRE_ELNO_DEPL","ERRE_ELGA_NORE","ERRE_ELNO_ELGA",
+                                     "VARI_ELNO_ELGA","VARI_ELNO_TUYO","EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
+                                     "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
+                                     "DCHA_ELNO_SIGM","DCHA_ELGA_SIGM","RADI_ELNO_SIGM","RADI_ELGA_SIGM",
+                                     "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","ENEL_ELGA","ENEL_ELNO_ELGA","SIEF_ELNO_ELGA",
+                                     "DEUL_ELGA_TEMP","DETE_ELNO_DLTE","DEUL_ELGA_DEPL","DEDE_ELNO_DLDE",
+                                     "DLSI_ELGA_DEPL","DESI_ELNO_DLSI","PMPB_ELNO_SIEF","PMPB_ELGA_SIEF",
+                                     "FLUX_ELGA_TEMP","FLUX_ELNO_TEMP",
+                                     "SOUR_ELGA_ELEC",
+                                     "PRES_ELNO_DBEL","PRES_DBEL_DEPL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
+                                     "INTE_ELNO_ACTI","INTE_ELNO_REAC",
+                                     ) ),
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,mode_meca,
+                                               mode_stat,evol_noli,mult_elas,fourier_elas,
+                                               evol_ther,base_modale,
+                                               acou_harmo,mode_acou,mode_flamb) ),
+         EXCIT           =FACT(statut='f',min=01,max='**',
+             regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+             CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),
+             FONC_MULT       =SIMP(statut='f',typ=fonction),
+             FONC_MULT_C     =SIMP(statut='f',typ=fonction_c),
+             COEF_MULT       =SIMP(statut='f',typ='R'),
+             COEF_MULT_C     =SIMP(statut='f',typ='C'),
+             PHAS_DEG        =SIMP(statut='f',typ='R'),
+             PUIS_PULS       =SIMP(statut='f',typ='I'),
+             TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+         ),
+         NORME           =SIMP(statut='f',typ='TXM',defaut="VMIS",
+                               into=("VMIS","TOTAL","VMIS_CINE","TOTAL_CINE") ),
+         NUME_COUCHE     =SIMP(statut='f',typ='I',defaut= 1 ),
+         NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY") ),
+          
+         ANGLE           =SIMP(statut='f',typ='I',defaut= 0 ),
+         PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL") ),
+         SENSIBILITE     =FACT(statut='f',min=01,max=01,
+           THETA           =SIMP(statut='f',typ=(theta_geom) ),
+         ),  
+         TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),
+         EFGE_REPERE     =FACT(statut='f',min=01,max=01,
+             regles=(UN_PARMI('ANGL_REP','VECT_X_Y','VECT_X_Z'),),
+             ANGL_REP        =SIMP(statut='f',typ='R',max='**'),
+             VECT_X_Y        =SIMP(statut='f',typ='R',max='**'),
+             VECT_X_Z        =SIMP(statut='f',typ='R',max='**'),
+         ),
+         
+         TEMP_INIT       =FACT(statut='f',min=01,max='**',
+             regles=(EXCLUS('META_INIT','EVOL_THER'),),
+             META_INIT       =SIMP(statut='f',typ=carte_meta_r),
+             EVOL_THER       =SIMP(statut='f',typ=evol_ther,),
+             NUME_INIT       =SIMP(statut='f',typ='I'),
+         ),
+                 
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 03/05/2000   AUTEUR CIBHHLV L.VIVAN
+CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=cham_elem_dommag,reentrant='n',
+                  fr="Calcul d un champ de dommage subi par une structure",
+                  docu="U4.83.02-C",                                                                                                                                                                                                             
+      regles=(PRESENT_PRESENT('DOMMAGE','MATER', ),),
+         OPTION          =SIMP(statut='o',typ='TXM',
+                               into=("DOMA_ELNO_SIGM","DOMA_ELGA_SIGM",
+                                     "DOMA_ELNO_EPSI","DOMA_ELGA_EPSI",
+                                     "DOMA_ELNO_EPME","DOMA_ELGA_EPME") ),
+         HISTOIRE        =FACT(statut='o',min=01,max=01,
+           RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,evol_noli) ),
+           EQUI_GD         =SIMP(statut='f',typ='TXM',defaut="VMIS_SG",into=("VMIS_SG","INVA_2_SG") ),
+         ),
+         DOMMAGE         =SIMP(statut='o',typ='TXM',
+                               into=("WOHLER","MANSON_COFFIN","TAHERI_MANSON","TAHERI_MIXTE",) ),
+         MATER           =SIMP(statut='o',typ=(mater) ),
+         TAHERI_NAPPE    =SIMP(statut='f',typ=(fonction) ),
+         TAHERI_FONC     =SIMP(statut='f',typ=(fonction) ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/05/2000   AUTEUR CIBHHAB N.RAHNI 
+CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu,
+                    fr="Calcul des paramètres modaux d une structure soumise à un écoulement, en prenant en compte les forces fluidélastiques",
+                    docu="U4.66.02-C",reentrant='n',
+         VITE_FLUI       =FACT(statut='o',min=01,max=01,
+                               fr="Définir la plage de vitesse fluide étudiée",
+           VITE_MIN        =SIMP(statut='o',typ='R' ),
+           VITE_MAX        =SIMP(statut='o',typ='R' ),
+           NB_POIN         =SIMP(statut='o',typ='I' ),
+         ),
+         BASE_MODALE     =FACT(statut='o',min=01,max=01,
+                               
+           regles=(UN_PARMI('AMOR_REDUIT','AMOR_UNIF'),),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           AMOR_UNIF       =SIMP(statut='f',typ='R' ),
+         ),
+         TYPE_FLUI_STRU  =SIMP(statut='o',typ=type_flui_stru ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+                               fr="Choix des informations à imprimer dans le fichier RESULTAT",
+           PARA_COUPLAGE   =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           DEFORMEE        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN
+CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=fonction,
+                      fr="Construire un concept de type fonction à partir d une fonction réelle de la variable réelle définie par une FORMULE",
+                      docu="U4.32.01-D",reentrant='f',
+         regles=(UN_PARMI('VALE_R','LIST_PARA'),),
+         FONCTION        =SIMP(statut='o',typ=fonction ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE_R          =SIMP(statut='f',typ='R',max='**'),
+         LIST_PARA       =SIMP(statut='f',typ=listr8 ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=02,defaut="LIN",into=("NON","LIN","LOG","INT") ),
+         PROL_DROIT      =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("EXCLU","CONSTANT","LINEAIRE","INTERPRE") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("EXCLU","CONSTANT","LINEAIRE","INTERPRE") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 20/06/2000   AUTEUR ACBHHCD G.DEVESA
+def calc_fonction_prod(DERIVE,EXTRACTION,INTEGRE,RMS,MAX,COMB,COMB_C,ENVELOPPE,SPEC_OSCI,FFT,COMPOSE,**args):
+  if (RMS != None)        : return tabl_fonc_rms
+  if (MAX != None)        : return tabl_fonc_max
+  if (INTEGRE != None)    : return fonction
+  if (DERIVE != None)     : return fonction
+  if (COMB != None)       : return fonction
+  if (ENVELOPPE != None)  : return fonction
+  if (EXTRACTION != None) : return fonction
+  if (SPEC_OSCI != None)  : return fonction
+  if (COMB_C != None)     : return fonction_c
+  if (COMPOSE != None)    : return fonction
+  if (FFT != None)        : 
+     vale=FFT.get_child('FONCTION').get_valeur()
+     if (AsType(vale) == fonction )  : return fonction_c
+     if (AsType(vale) == fonction_c) : return fonction
+  raise AsException("type de concept resultat non prevu")
+
+CALC_FONCTION=OPER(nom="CALC_FONCTION",op=  91,sd_prod=calc_fonction_prod
+                    ,fr="Opérations mathématiques sur des concepts de type fonction",
+                     docu="U4.32.04-E",reentrant='n',
+         regles=(UN_PARMI('DERIVE','INTEGRE','SPEC_OSCI','MAX','COMB','ENVELOPPE','RMS',
+                          'COMB_C','COMPOSE','EXTRACTION','ASSE','FFT' ),),
+         FFT             =FACT(statut='f',min=01,max=01,fr="Calcul de la transformee de Fourier ou de son inverse",
+           FONCTION        =SIMP(statut='o',typ=(fonction,fonction_c) )
+         ),
+         DERIVE          =FACT(statut='f',min=01,max=01,fr="Calcul de la dérivée d une fonction",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="DIFF_CENTREE",into=("DIFF_CENTREE",) ),
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+         ),
+         INTEGRE         =FACT(statut='f',min=01,max=01,fr="Calcul de l intégrale d une fonction",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+           FONCTION        =SIMP(statut='o',typ=fonction),
+           COEF            =SIMP(statut='f',typ='R',defaut= 0.E+0,fr="Valeur de la constante d intégration" ),
+         ),
+         RMS             =FACT(statut='f',min=01,max=01,fr="Calcul de la valeur RMS d une fonction",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           INST_INIT       =SIMP(statut='f',typ='R',fr="Instant initial définissant le début du signal" ),
+           INST_FIN        =SIMP(statut='f',typ='R',fr="Instant final définissant la fin du signal" ),
+           b_inst          =BLOC ( condition = "(INST_INIT != None) or (INST_FIN != None)",
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),  
+         ),
+         SPEC_OSCI       =FACT(statut='f',min=01,max=01,fr="Calcul du spectre d oscillateur",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="NIGAM",into=("NIGAM",) ),
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           NORME           =SIMP(statut='f',typ='R',defaut= 9.81,fr="Valeur de la norme du spectre d oscillateur" ),
+           NATURE          =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("DEPL","VITE","ACCE") ),
+           NATURE_FONC     =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("DEPL","VITE","ACCE") ),
+         ),
+         MAX             =FACT(statut='f',min=01,max=01,fr="Calcul des extrémas locaux d une fonction",
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+         ),
+         COMB            =FACT(statut='f',min=01,max='**',fr="Calcul d une combinaison linéaire réelle de fonctions",
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           COEF            =SIMP(statut='o',typ='R',fr="Coefficient réel de la combinaison linéaire associée à la fonction" ),
+         ),
+         COMB_C          =FACT(statut='f',min=01,max='**',fr="Calcul d une combinaison linéaire complexe de fonctions",
+           regles=(UN_PARMI('COEF_R','COEF_C'),),
+           FONCTION        =SIMP(statut='o',typ=(fonction, fonction_c) ),
+           COEF_R          =SIMP(statut='f',typ='R',fr="Coefficient réel de la combinaison linéaire associée à la fonction" ),
+           COEF_C          =SIMP(statut='f',typ='C',fr="Coefficient complexe de la combinaison linéaire associée à la fonction" ),
+         ),
+         b_comb          =BLOC ( condition = " (COMB != None) or (COMB_C != None)",
+             LIST_PARA      =SIMP(statut='f',typ=listr8 ),  
+         ),
+         COMPOSE         =FACT(statut='f',min=01,max=01,fr="Calcul de la composition de deux fonctions FONC_RESU(FONC_PARA)",
+           FONC_RESU       =SIMP(statut='o',typ=fonction),
+           FONC_PARA       =SIMP(statut='o',typ=fonction),
+         ),
+         EXTRACTION      =FACT(statut='f',min=01,max=01,fr="Opération d extraction sur une fonction complexe",
+           FONCTION        =SIMP(statut='o',typ=fonction_c),
+           PARTIE          =SIMP(statut='o',typ='TXM',into=("REEL","IMAG","MODULE","PHASE"),fr="Partie à extraire"),
+         ),
+         ENVELOPPE       =FACT(statut='f',min=01,max=01,fr="Calcul de l enveloppe d une famille de fonctions",
+           FONCTION        =SIMP(statut='o',typ=fonction,max='**' ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="SUP",into=("SUP","INF"),fr="Type de l enveloppe" ),
+         ),
+         ASSE            =FACT(statut='f',min=01,max=01,fr="Création à partir de la concatenation de fonctions",
+           FONCTION        =SIMP(statut='o',typ=fonction,max='**' ),
+           SURCHARGE       =SIMP(statut='f',typ='TXM',defaut="DROITE",into=("DROITE","GAUCHE")),
+         ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                                          "INST","X","Y","Z","EPSI","FREQ","PULS",
+                                                          "AMOR","ABSC") ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=02,into=("NON","LIN","LOG") ),
+         PROL_DROIT      =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                                          "INST","X","Y","Z","EPSI","FREQ","PULS",
+                                                          "AMOR","ABSC") ),
+         INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=02,into=("NON","LIN","LOG") ),
+         PROL_DROIT_FONC =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2000   AUTEUR VABHHTS J.PELLET 
+CALC_G_LOCAL_T=OPER(nom="CALC_G_LOCAL_T",op=77,sd_prod=tabl_calc_g_loca,
+                    fr="Calcul du taux de restitution local d énergie",docu="U4.82.04-E",reentrant='n',
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         FOND            =SIMP(statut='o',typ=fond_fiss),
+         regles=(UN_PARMI('RESULTAT','DEPL'),
+                 UN_PARMI('R_INF','R_INF_FO'),
+                 PRESENT_PRESENT('R_INF','R_SUP'),
+                 PRESENT_PRESENT('R_INF_FO','R_SUP_FO'), ),
+                         
+         DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+         RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_noli),),
+         b_extrac        =BLOC(condition="RESULTAT != None",fr="extraction d un champ",
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis),
+             INST            =SIMP(statut='f',typ='R',max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8),
+             
+             b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
+               PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+         ),
+         CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
+         SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS") ),
+         COMP_ELAS       =FACT(statut='f',min=01,max=01,
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC") ),
+               ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_LINE  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_TRAC  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","GREEN") ),
+               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         COMP_INCR       =FACT(statut='f',min=01,max=01,
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE") ),
+               ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               VMIS_ISOT_TRAC  =SIMP(statut='f',typ='I',defaut=2,into=(2,) ),
+               VMIS_ISOT_LINE  =SIMP(statut='f',typ='I',defaut=2,into=(2,) ),
+               VMIS_CINE_LINE  =SIMP(statut='f',typ='I',defaut=7,into=(7,) ),
+               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC") ),
+               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           SIGM            =SIMP(statut='f',typ=cham_elem_sief_r),
+           DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+         ),
+
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="CALC_G",into=("CALC_G","CALC_G_LGLO") ),
+         b_g_lglo        =BLOC(condition="OPTION=='CALC_G_LGLO'",
+           PROPAGATION     =SIMP(statut='o',typ='R'),
+           THETA           =SIMP(statut='o',typ=theta_geom),
+           DIRE_THETA      =SIMP(statut='f',typ=cham_no_depl_r),
+         ), 
+         LISSAGE_THETA   =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE") ),
+         LISSAGE_G       =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE","LAGRANGE_NO_NO",) ),
+          
+         DEGRE           =SIMP(statut='f',typ='I',defaut=5,into=(0,1,2,3,4,5,6,7) ),
+
+         R_INF           =SIMP(statut='f',typ='R'),
+         R_SUP           =SIMP(statut='f',typ='R'),
+         R_INF_FO        =SIMP(statut='f',typ=fonction),
+         R_SUP_FO        =SIMP(statut='f',typ=fonction),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2000   AUTEUR VABHHTS J.PELLET 
+CALC_G_THETA_T=OPER(nom="CALC_G_THETA_T",op=53,sd_prod=tabl_calc_g_th,
+                    fr="Calcul du taux de restitution d énergie par la méthode theta en thermo-élasticité en 2D ou en 3D",
+                    docu="U4.82.03-E",reentrant='n',
+         regles=(UN_PARMI('RESULTAT','DEPL'),
+                 EXCLUS('COMP_ELAS','COMP_INCR'),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         THETA           =SIMP(statut='o',typ=theta_geom),
+         DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+         RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_noli),),
+
+         b_extrac        =BLOC(condition="RESULTAT != None",fr="extraction d un champ",
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+            
+           b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           ),
+         ),
+
+         CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
+         SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS") ),
+         COMP_ELAS       =FACT(statut='f',min=01,max=01,
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC") ),
+               ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_LINE  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_TRAC  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","GREEN") ),
+               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),  
+         COMP_INCR       =FACT(statut='f',min=01,max=01,
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE") ),
+               ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               VMIS_ISOT_TRAC  =SIMP(statut='f',typ='I',defaut=2,into=(2,) ),
+               VMIS_ISOT_LINE  =SIMP(statut='f',typ='I',defaut=2,into=(2,) ),
+               VMIS_CINE_LINE  =SIMP(statut='f',typ='I',defaut=7,into=(7,) ),
+               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC") ),
+               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           SIGM            =SIMP(statut='f',typ=cham_elem_sief_r),
+           DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="CALC_G",
+                               into=("CALC_G","CALC_G_LAGR","CALC_K_G","G_BILINEAIRE","CALC_G_MAX") ),
+         b_calc_g_max    =BLOC(condition="OPTION=='CALC_G_MAX'",
+           BORNES          =FACT(statut='o',min=01,max='**',
+                NUME_ORDRE     =SIMP(statut='o',typ='I'),
+                VALE_MIN       =SIMP(statut='o',typ='R'),
+                VALE_MAX       =SIMP(statut='o',typ='R'),
+                                ),
+         ),
+         b_calc_k_g      =BLOC(condition="OPTION=='CALC_K_G'",
+           FOND            =SIMP(statut='o',typ=fond_fiss),
+         ),
+         b_calc_g_lagr   =BLOC(condition="OPTION=='CALC_G_LAGR'",
+           PROPAGATION     =SIMP(statut='o',typ='R'),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 04/02/98   AUTEUR CIBHHLV L.VIVAN 
+CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=tabl_intsp,
+                    fr="Calcul d une matrice interspectrale d une fonction du temps",
+                    docu="U4.36.03-E",reentrant='n',
+         INST_INIT       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         INST_FIN        =SIMP(statut='o',typ='R' ),
+         DUREE_ANALYSE   =SIMP(statut='f',typ='R' ),
+         DUREE_DECALAGE  =SIMP(statut='f',typ='R' ),
+         NB_POIN         =SIMP(statut='o',typ='I' ),
+         FONCTION        =SIMP(statut='o',typ=fonction,max='**' ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 19/05/2000   AUTEUR JFBHHUC C.ROSE
+CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
+                    fr="Calcul des matrices de masse, d amortissement ou de raideur ajoutées",
+                    docu="U4.66.01-C",reentrant='n',
+         regles=(EXCLUS('MODE_MECA','CHAM_NO','MODELE_GENE'),
+                 PRESENT_ABSENT('NUME_DDL_GENE','CHAM_NO'),
+                 PRESENT_PRESENT('MODELE_GENE','NUME_DDL_GENE'),),
+         MODELE_FLUIDE   =SIMP(statut='o',typ=modele ),
+         MODELE_INTERFACE=SIMP(statut='o',typ=modele ),         
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CHARGE          =SIMP(statut='o',typ=char_ther ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         CHAM_NO         =SIMP(statut='f',typ=cham_no_depl_r ),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         NUME_DDL_GENE   =SIMP(statut='f',typ=nume_ddl_gene ), 
+         DIST_REFE       =SIMP(statut='f',typ='R',defaut= 1.E-2 ),   
+         AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         NUME_MODE_MECA  =SIMP(statut='f',typ='I',max='**'),
+         OPTION          =SIMP(statut='o',typ='TXM',into=("MASS_AJOU","AMOR_AJOU","RIGI_AJOU") ),
+         POTENTIEL       =SIMP(statut='f',typ=evol_ther ),
+         NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    = BLOC ( condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="MDA",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC( condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+           ),
+           b_ldlt_mult     =BLOC( condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non iversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),             
+           ),
+           b_gcpc          =BLOC (condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut=0),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps           
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2000   AUTEUR VABHHTS J.PELLET 
+def calc_matr_elem_prod(OPTION,**args):
+  if OPTION == "RIGI_MECA"        : return matr_elem_depl_r
+  if OPTION == "RIGI_FLUI_STRU"   : return matr_elem_depl_r
+  if OPTION == "RIGI_MECA_LAGR"   : return matr_elem_depl_r
+  if OPTION == "MASS_MECA"        : return matr_elem_depl_r
+  if OPTION == "MASS_FLUI_STRU"   : return matr_elem_depl_r
+  if OPTION == "RIGI_GEOM"        : return matr_elem_depl_r
+  if OPTION == "RIGI_ROTA"        : return matr_elem_depl_r
+  if OPTION == "AMOR_MECA"        : return matr_elem_depl_r
+  if OPTION == "IMPE_MECA"        : return matr_elem_depl_r
+  if OPTION == "ONDE_FLUI"        : return matr_elem_depl_r
+  if OPTION == "RIGI_MECA_HYST"   : return matr_elem_depl_c
+  if OPTION == "RIGI_THER"        : return matr_elem_temp_r
+  if OPTION == "MASS_THER"        : return matr_elem_temp_r
+  if OPTION == "MASS_MECA_DIAG"   : return matr_elem_depl_r
+  if OPTION == "RIGI_ACOU"        : return matr_elem_pres_c
+  if OPTION == "MASS_ACOU"        : return matr_elem_pres_c
+  if OPTION == "AMOR_ACOU"        : return matr_elem_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
+                    ,fr="Calcul des matrices élémentaires",docu="U4.61.01-F",reentrant='n',
+         OPTION          =SIMP(statut='o',typ='TXM',
+                               into=("RIGI_MECA","MASS_MECA","RIGI_GEOM",
+                                     "AMOR_MECA","RIGI_THER","MASS_THER","IMPE_MECA",
+                                     "ONDE_FLUI","MASS_FLUI_STRU","RIGI_FLUI_STRU",
+                                     "RIGI_ROTA","MASS_MECA_DIAG","RIGI_ACOU",
+                                     "MASS_ACOU","AMOR_ACOU","RIGI_MECA_HYST",
+                                     "RIGI_MECA_LAGR") ),
+
+         b_rigi_meca = BLOC( condition = "OPTION=='RIGI_MECA'",
+           regles=(AU_MOINS_UN('MODELE','CHARGE' ),),
+           MODELE          =SIMP(statut='f',typ=modele ),
+           b_modele        =BLOC(condition = "MODELE != None",
+             CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+             CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+             MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**' ),
+           b_charge        =BLOC (condition = "CHARGE != None",
+             INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+         ),
+
+         b_rigi_meca_lagr  =BLOC(condition = "OPTION=='RIGI_MECA_LAGR'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='f',typ=char_meca,max='**'  ),
+           b_charge        =BLOC(condition = "CHARGE != None",
+             INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           THETA           =SIMP(statut='o',typ=theta_geom ),
+           PROPAGATION     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+
+         b_mass_meca       =BLOC(condition = "(OPTION=='MASS_MECA') or (OPTION=='MASS_MECA_DIAG')",
+           regles=(AU_MOINS_UN('MODELE','CHARGE'),),
+           MODELE          =SIMP(statut='f',typ=modele ),
+           b_modele          =BLOC(condition = "MODELE != None",
+             CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
+             CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           ),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**' ),
+           b_charge        =BLOC(condition = "CHARGE != None",
+             INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+         ),
+
+         b_rigi_geom       =BLOC(condition = "OPTION=='RIGI_GEOM'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           SIEF_ELGA         =SIMP(statut='o',typ=cham_elem_sief_r ),
+           MODE_FOURIER      =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+
+         b_rigi_rota       =BLOC(condition = "OPTION=='RIGI_ROTA'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='o',typ=char_meca,max='**' ),
+           INST              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+
+         b_amor_meca       =BLOC(condition = "OPTION=='AMOR_MECA'",
+           regles=(AU_MOINS_UN('CARA_ELEM','RIGI_MECA'),
+                   ENSEMBLE('RIGI_MECA','MASS_MECA','CHAM_MATER'), ),
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
+           RIGI_MECA         =SIMP(statut='f',typ=matr_elem_depl_r ),
+           MASS_MECA         =SIMP(statut='f',typ=matr_elem_depl_r ),
+           CHARGE            =SIMP(statut='f',typ=char_meca ,max='**' ),
+         ),
+
+         b_rigi_meca_hyst  =BLOC( condition = "OPTION=='RIGI_MECA_HYST'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHARGE            =SIMP(statut='o',typ=char_meca ,max='**' ),
+           CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           RIGI_MECA         =SIMP(statut='o',typ=matr_elem_depl_r ),
+         ),
+
+         b_rigi_ther       =BLOC(condition = "OPTION=='RIGI_THER'",
+           regles=(AU_MOINS_UN('MODELE','CHARGE' ),),
+           MODELE            =SIMP(statut='f',typ=modele ),
+           b_modele          =BLOC(condition = "MODELE != None",
+             CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+             CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+             MODE_FOURIER      =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           CHARGE            =SIMP(statut='f',typ=char_ther,max='**' ),
+         ),
+
+         b_mass_ther       =BLOC(condition = "OPTION=='MASS_THER'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+         ),
+
+         b_rigi_acou       =BLOC(condition = "(OPTION=='RIGI_ACOU') or (OPTION=='MASS_ACOU') or (OPTION=='AMOR_ACOU')",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='f',typ=char_acou ,max='**' ),
+         ),
+
+         b_rigi_flui       =BLOC(condition = "(OPTION=='RIGI_FLUI_STRU') or (OPTION=='MASS_FLUI_STRU')",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CARA_ELEM         =SIMP(statut='o',typ=cara_elem ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='o',typ=char_meca ,max='**' ),
+           INST              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+
+         b_impe_meca       =BLOC(condition = "(OPTION=='IMPE_MECA') or (OPTION=='ONDE_FLUI')",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHARGE            =SIMP(statut='o',typ=char_meca,max='**' ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+         ),
+
+         b_rigi_conv       =BLOC( condition = "(OPTION=='RIGI_THER_CONV') or (OPTION=='RIGI_THER_CONV_D')",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='o',typ=char_ther,max='**' ),
+         ),
+
+)  ;
+#& MODIF COMMANDE  DATE 04/07/2000   AUTEUR JMBHH01 J.M.PROIX 
+CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,docu="U4.85.01-A",reentrant='o',
+               fr="Calcule la métallurgie à partir du résultat du calcul thermique",
+         MODELE          =SIMP(statut='o',typ=modele ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         RESULTAT        =SIMP(statut='o',typ=evol_ther ),
+         ETAT_INIT       =FACT(statut='o',min=01,max=01,
+      regles=(UN_PARMI('NUME_INIT','META_INIT',),),
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther ),
+           NUME_INIT       =SIMP(statut='f',typ='I' ),  
+           META_INIT       =SIMP(statut='f',typ=carte_var2_r ),
+         ),
+         COMP_INCR       =FACT(statut='o',min=01,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',into=("ACIER","ZIRC",) ),
+           ACIER           =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+           ZIRC            =SIMP(statut='c',typ='I',defaut=3,into=(3,) ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           MAILLE          =SIMP(statut='f',typ=ma),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM'     
+                             ,into=("META_ELNO_TEMP",) ),
+)  ;
+#& MODIF COMMANDE  DATE 12/05/2000   AUTEUR CIBHHAB N.RAHNI
+def calc_no_prod(RESULTAT,**args):
+  if AsType(RESULTAT) == evol_elas :    return evol_elas
+  if AsType(RESULTAT) == evol_noli :    return evol_noli
+  if AsType(RESULTAT) == evol_ther :    return evol_ther
+  if AsType(RESULTAT) == mode_meca :    return mode_meca
+  if AsType(RESULTAT) == mode_stat :    return mode_stat
+  if AsType(RESULTAT) == mode_acou :    return mode_acou
+  if AsType(RESULTAT) == mult_elas :    return mult_elas
+  if AsType(RESULTAT) == dyna_trans :   return dyna_trans
+  if AsType(RESULTAT) == dyna_harmo :   return dyna_harmo
+  if AsType(RESULTAT) == acou_harmo :   return acou_harmo
+  if AsType(RESULTAT) == fourier_elas : return fourier_elas
+  if AsType(RESULTAT) == mode_flamb :   return mode_flamb 
+  if AsType(RESULTAT) == base_modale :  return base_modale
+  raise AsException("type de concept resultat non prevu")
+
+CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,docu="U4.81.02-E",reentrant='o',
+             fr="Compléter un résultat en calculant un champ aux noeuds (forces nodales à partir d un champ de contraintes aux points de GAUSS)",
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,acou_harmo,mode_meca,
+                                               mode_acou,mode_stat,evol_ther,evol_noli,base_modale,
+                                               mult_elas,fourier_elas,mode_flamb ) ),
+
+         MODELE          =SIMP(statut='f',typ=modele),
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                        'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           
+         OPTION          =SIMP(statut='o',typ='TXM',max='**'),
+         
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         GEOMETRIE       =SIMP(statut='f',typ='TXM',defaut="INITIALE",into=("INITIALE","DEFORMEE") ),
+         EXCIT           =FACT(statut='f',min=01,max='**',
+           CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou) ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE","FIXE_PILO","SUIV") ),
+         ),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         TAILLE_BLOC     =SIMP(statut='f',typ='R' ,defaut= 400. ),
+)  ;
+#& MODIF COMMANDE  DATE 20/10/1999   AUTEUR DURAND C.DURAND 
+CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,docu="U4.82.02-D",reentrant='n',
+                fr="Affectation d un champ sur le maillage (mécanique de la rupture)",
+         regles=(UN_PARMI('THETA_2D','THETA_3D','THETA_BANDE'),
+                 PRESENT_PRESENT('THETA_3D','FOND_3D'),
+                 PRESENT_ABSENT('THETA_2D','DIRE_THETA'),
+                 EXCLUS('DIRECTION','DIRE_THETA'),),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="COURONNE",into=("COURONNE","BANDE") ),
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         FOND_3D         =SIMP(statut='f',typ=(fond_fiss) ),
+         THETA_3D        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   UN_PARMI('MODULE','MODULE_FO'),
+                   ENSEMBLE('MODULE','R_INF','R_SUP'),
+                   ENSEMBLE('MODULE_FO','R_INF_FO','R_SUP_FO'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           MODULE          =SIMP(statut='f',typ='R'),
+           R_INF           =SIMP(statut='f',typ='R'),
+           R_SUP           =SIMP(statut='f',typ='R'),
+           MODULE_FO       =SIMP(statut='f',typ=fonction),
+           R_INF_FO        =SIMP(statut='f',typ=fonction),
+           R_SUP_FO        =SIMP(statut='f',typ=fonction),
+                         ),
+         DIRE_THETA      =SIMP(statut='f',typ=(cham_no_depl_r) ),
+         DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+         THETA_2D        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           MODULE          =SIMP(statut='o',typ='R'),
+           R_INF           =SIMP(statut='o',typ='R'),
+           R_SUP           =SIMP(statut='o',typ='R'),
+         ),
+         THETA_BANDE     =FACT(statut='f',min=01,max='**',
+           MODULE          =SIMP(statut='o',typ='R'),
+           R_INF           =SIMP(statut='o',typ='R'),
+           R_SUP           =SIMP(statut='o',typ='R'),
+         ),
+         GRAD_NOEU_THETA =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT",into=("RESULTAT",) ),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="EXCEL",into=("EXCEL","AGRAF") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 11/01/99   AUTEUR VABHHTS J.PELLET 
+def calc_vect_elem_prod(OPTION,**args):
+  if OPTION == "CHAR_MECA" :      return vect_elem_depl_r
+  if OPTION == "CHAR_MECA_LAGR" : return vect_elem_depl_r
+  if OPTION == "CHAR_THER" :      return vect_elem_temp_r
+  if OPTION == "CHAR_ACOU" :      return vect_elem_pres_c
+  if OPTION == "FORC_NODA" :      return vect_elem_depl_r
+  raise AsException("type de concept resultat non prevu")
+
+CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,docu="U4.61.02-F",reentrant='n',
+                    fr="Calcul des seconds membres élémentaires",
+         OPTION          =SIMP(statut='o',typ='TXM',into=("CHAR_MECA","CHAR_THER","CHAR_ACOU",
+                                                           "FORC_NODA","CHAR_MECA_LAGR") ),
+         b_char_meca     =BLOC(condition = "OPTION=='CHAR_MECA'",
+           regles=(AU_MOINS_UN('CHARGE','MODELE'),),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
+           MODELE          =SIMP(statut='f',typ=modele),
+           b_charge     =BLOC(condition = "CHARGE != None", fr="modèle ne contenant pas de sous-structure",
+              CHAM_MATER   =SIMP(statut='f',typ=cham_mater),
+              CARA_ELEM    =SIMP(statut='f',typ=cara_elem),
+              INST         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+              MODE_FOURIER =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),  
+           b_modele     =BLOC(condition = "(MODELE != None)",fr="modèle contenant une sous-structure",
+              SOUS_STRUC      =FACT(statut='o',min=01,
+                regles=(UN_PARMI('TOUT','MAILLE'),),
+                CAS_CHARGE  =SIMP(statut='o',typ='TXM' ),
+                TOUT        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                MAILLE      =SIMP(statut='f',typ=ma,max='**',),
+              ),
+           ),
+         ),
+         b_char_ther     =BLOC(condition = "OPTION=='CHAR_THER'",
+           CARA_ELEM        =SIMP(statut='f',typ=cara_elem),
+           CHARGE           =SIMP(statut='o',typ=char_ther,max='**'),
+           INST             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+              
+         b_char_acou     =BLOC(condition = "OPTION=='CHAR_ACOU'",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater),
+           CHARGE            =SIMP(statut='o',typ=char_acou,max='**'),
+         ),
+         
+         b_forc_noda     =BLOC(condition = "OPTION=='FORC_NODA'",
+           SIEF_ELGA         =SIMP(statut='o',typ=cham_elem_sief_r),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem),
+           MODELE            =SIMP(statut='f',typ=modele),
+         ),
+         
+         b_meca_lagr     =BLOC(condition = "OPTION=='CHAR_MECA_LAGR'",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater),
+           THETA             =SIMP(statut='o',typ=theta_geom),
+           PROPAGATION       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           CHARGE            =SIMP(statut='f',typ=char_meca,max='**'),
+           INST              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+) ;
+#& MODIF COMMANDE  DATE 31/10/2000   AUTEUR VABHHTS J.PELLET 
+def comb_cham_elem_prod(COMB_R=None,COMB_C=None,COMB_FOURIER=None,**args):
+
+  if COMB_R != None:
+    vale=COMB_R.get_child('CHAM_ELEM').get_valeur()
+  elif COMB_C != None:
+    vale=COMB_C.get_child('CHAM_ELEM').get_valeur()
+  elif COMB_FOURIER != None:
+    vale=COMB_FOURIER.get_child('CHAM_ELEM').get_valeur()
+  else :
+    raise AsException("type de concept resultat non prevu")
+
+  if AsType(vale) == cham_elem_sief_r : return cham_elem_sief_r
+  if AsType(vale) == cham_elem_flux_r : return cham_elem_flux_r
+  if AsType(vale) == cham_elem_epsi_r : return cham_elem_epsi_r
+  if AsType(vale) == cham_elem_ener_r : return cham_elem_ener_r
+  if AsType(vale) == cham_elem_crit_r : return cham_elem_crit_r
+  if AsType(vale) == cham_elem_dbel_r : return cham_elem_dbel_r
+  if AsType(vale) == cham_elem_pres_r : return cham_elem_pres_r
+  if AsType(vale) == cham_elem_sief_c : return cham_elem_sief_c
+  raise AsException("type de concept resultat non prevu")
+
+COMB_CHAM_ELEM=OPER(nom="COMB_CHAM_ELEM",op= 139,sd_prod=comb_cham_elem_prod,reentrant='f',
+                    fr="Combinaison linéaire de champs par éléments",docu="U4.72.03-E",
+      regles=(UN_PARMI('COMB_R','COMB_C','COMB_FOURIER'),
+              PRESENT_PRESENT('COMB_FOURIER','ANGL'),),
+      COMB_R          =FACT(statut='f',min=01,max='**',
+        PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
+        COEF_R          =SIMP(statut='o',typ='R'),
+        CHAM_ELEM       =SIMP(statut='o',
+                              typ=(cham_elem_sief_r,cham_elem_flux_r,cham_elem_epsi_r,
+                                   cham_elem_ener_r,cham_elem_crit_r,cham_elem_dbel_r,
+                                   cham_elem_pres_r,cham_elem_sief_c ) ),
+      ),
+      COMB_C          =FACT(statut='f',min=01,max='**',
+        regles=(UN_PARMI('COEF_R','COEF_C', ),),
+        COEF_R          =SIMP(statut='f',typ='R'),
+        COEF_C          =SIMP(statut='f',typ='C'),
+        CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r) ),
+      ),
+      COMB_FOURIER    =FACT(statut='f',min=01,max='**',
+        COEF_R          =SIMP(statut='f',typ='R',defaut= 1.),
+        NUME_MODE       =SIMP(statut='o',typ='I'),
+        TYPE_MODE       =SIMP(statut='o',typ='TXM',into=("SYME","ANTI") ),
+        CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,cham_elem_flux_r,cham_elem_epsi_r ) ),
+      ),
+      ANGL            =SIMP(statut='f',typ='R' ),
+)  ;
+
+#& MODIF COMMANDE DATE 08/03/94 AUTEUR VABHHT2 G.BERTRAND
+def comb_cham_no_prod(COMB_R,COMB_C,COMB_FOURIER,**args):
+  if COMB_C != None:
+    type_mat = AsType(COMB_C.get_child('CHAM_NO').get_valeur())
+    if type_mat in  (cham_no_depl_c,cham_no_depl_r) : return cham_no_depl_c
+    if type_mat in  (cham_no_temp_c,cham_no_temp_r) : return cham_no_temp_c
+    if type_mat in  (cham_no_pres_c,cham_no_pres_r) : return cham_no_pres_c
+  elif COMB_R != None:
+    type_mat = AsType(COMB_R.get_child('CHAM_NO').get_valeur())
+    if type_mat in  (cham_no_depl_c,cham_no_depl_r) : return cham_no_depl_r
+    if type_mat in  (cham_no_temp_c,cham_no_temp_r) : return cham_no_temp_r
+    if type_mat in  (cham_no_pres_c,cham_no_pres_r) : return cham_no_pres_r
+    if type_mat ==  matr_asse_gene_r : return matr_asse_gene_r
+  elif COMB_FOURIER != None:
+    type_mat = AsType(COMB_FOURIER.get_child('CHAM_NO').get_valeur())
+    if type_mat == cham_no_temp_r : return cham_no_temp_r
+    if type_mat == cham_no_depl_r : return cham_no_depl_r
+  raise AsException("type de concept resultat non prevu")
+
+
+COMB_CHAM_NO=OPER(nom="COMB_CHAM_NO",op=  30,sd_prod=comb_cham_no_prod
+                    ,fr="Combinaison linéaire de champs aux noeuds",
+                     docu="U4.72.02-F",reentrant='f',
+         regles=(UN_PARMI('COMB_R','COMB_C','COMB_FOURIER'),),
+         COMB_R          =FACT(statut='f',min=01,max='**',
+           PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG",) ),
+           CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_temp_c,cham_no_depl_r,cham_no_depl_c
+                                                ,cham_no_pres_r,cham_no_pres_c ) ),
+           COEF_R          =SIMP(statut='o',typ='R' ),
+         ),
+         COMB_C          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('COEF_R','COEF_C' ),),
+           CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_r,cham_no_temp_c
+                                                ,cham_no_depl_c,cham_no_pres_c ) ),
+           COEF_R          =SIMP(statut='f',typ='R' ),
+           COEF_C          =SIMP(statut='f',typ='C' ),
+         ),
+         COMB_FOURIER    =FACT(statut='f',min=01,max='**',
+           CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_depl_r) ),
+           COEF_R          =SIMP(statut='f',typ='R',defaut= 1. ),
+           NUME_MODE       =SIMP(statut='o',typ='I' ),
+           TYPE_MODE       =SIMP(statut='o',typ='TXM',into=("SYME","ANTI") ),
+         ),
+         b_angl = BLOC ( condition = "COMB_FOURIER != None",
+           ANGL            =SIMP(statut='o',typ='R' ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 08/11/95   AUTEUR CIBHHLV L.VIVAN 
+COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier,
+                  fr="Recombinaison de FOURIER de tous les modes se trouvant dans la structure de données de type resultat dans une ou des directions particulières",
+                  docu="U4.83.31-C",reentrant='n',
+         RESULTAT        =SIMP(statut='o',typ=fourier_elas ),
+         ANGL            =SIMP(statut='o',typ='R',max='**'),
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',max=05,
+                               into=("DEPL","REAC_NODA","SIEF_ELGA_DEPL","EPSI_ELNO_DEPL","SIGM_ELNO_DEPL") ),
+)  ;
+#& MODIF COMMANDE DATE 06/10/94 AUTEUR BIBERON G.ROUSSEAU
+def comb_matr_asse_prod(COMB_R,COMB_C,**args):
+  if COMB_C != None:
+    type_mat = AsType(COMB_C.get_child('MATR_ASSE').get_valeur())
+    if type_mat in  (matr_asse_depl_c,matr_asse_depl_r) : return matr_asse_depl_c
+    if type_mat in  (matr_asse_temp_c,matr_asse_temp_r) : return matr_asse_temp_c
+    if type_mat in  (matr_asse_pres_c,matr_asse_pres_r) : return matr_asse_pres_c
+    if type_mat in  (matr_asse_gene_c,matr_asse_gene_r) : return matr_asse_gene_c
+  elif COMB_R != None:
+    type_mat = AsType(COMB_R.get_child('MATR_ASSE').get_valeur())
+    if type_mat in  (matr_asse_depl_c,matr_asse_depl_r) : return matr_asse_depl_r
+    if type_mat in  (matr_asse_temp_c,matr_asse_temp_r) : return matr_asse_temp_r
+    if type_mat in  (matr_asse_pres_c,matr_asse_pres_r) : return matr_asse_pres_r
+    if type_mat in  (matr_asse_gene_c,matr_asse_gene_r) : return matr_asse_gene_r
+  raise AsException("type de concept resultat non prevu")
+
+COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op=  31,sd_prod=comb_matr_asse_prod,
+                    fr="Combinaison linéaire de matrices assemblées",
+                    docu="U4.72.01-F",reentrant='f',
+         regles=(UN_PARMI('COMB_R','COMB_C' ),),
+         COMB_R          =FACT(statut='f',min=01,max='**',
+           PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
+           MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,
+                                                 matr_asse_temp_r,matr_asse_temp_c,
+                                                 matr_asse_pres_r,matr_asse_pres_c,
+                                                 matr_asse_gene_r,matr_asse_gene_c ) ),
+           COEF_R          =SIMP(statut='o',typ='R' ),
+         ),
+         COMB_C          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('COEF_R','COEF_C' ),),
+           MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,
+                                                 matr_asse_temp_r,matr_asse_temp_c,
+                                                 matr_asse_pres_r,matr_asse_pres_c,
+                                                 matr_asse_gene_r,matr_asse_gene_c ) ),
+           COEF_R          =SIMP(statut='f',typ='R' ),
+           COEF_C          =SIMP(statut='f',typ='C' ),
+         ),
+         SANS_CMP        =SIMP(statut='f',typ='TXM',into=("LAGR",) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/05/2000   AUTEUR CIBHHAB N.RAHNI 
+COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
+                     fr="Réponse sismique par recombinaison modale par une méthode spectrale",
+                     docu="U4.84.01-D",reentrant='n',
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','FREQ','NUME_MODE','LIST_FREQ','LIST_ORDRE'),
+                 UN_PARMI('AMOR_REDUIT','LIST_AMOR','AMOR_GENE' ),),
+         MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+         b_freq          =BLOC(condition = "FREQ != None or LIST_FREQ != None",
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+         ACCE_UNIF       =SIMP(statut='f',typ=mode_stat ),
+         
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         LIST_AMOR       =SIMP(statut='f',typ=listr8 ),
+         AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r ),
+         
+         MASS_INER       =SIMP(statut='f',typ=tabl_mass_iner ),
+         CORR_FREQ       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         
+         EXCIT           =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('MONO_APPUI','NOEUD','GROUP_NO'),
+                   UN_PARMI('AXE','TRI_AXE','TRI_SPEC' ),),
+           
+           MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           AXE             =SIMP(statut='f',fr="Excitation suivant un seul axe",
+                                 typ='R',max=03),  
+           TRI_AXE         =SIMP(statut='f',fr="Excitation suivant les trois axes mais avec le meme spectre",
+                                 typ='R',max=03),
+           TRI_SPEC        =SIMP(statut='f',fr="Excitation suivant les trois axes  avec trois spectres",
+                                 typ='TXM',into=("OUI",) ),
+           b_axe           =BLOC(condition = "AXE != None",fr="Excitation suivant un seul axe",
+             SPEC_OSCI       =SIMP(statut='o',typ=fonction,max=01 ),
+             ECHELLE         =SIMP(statut='f',typ='R',max=01),
+           ),
+           b_tri_axe       =BLOC(condition = "TRI_AXE != None",fr="Excitation suivant les trois axes mais avec le meme spectre",
+             SPEC_OSCI       =SIMP(statut='o',typ=fonction,max=01 ),
+             ECHELLE         =SIMP(statut='f',typ='R',max=01),
+           ),
+           b_tri_spec      =BLOC(condition = "TRI_SPEC != None",fr="Excitation suivant les trois axes  avec trois spectres",
+             SPEC_OSCI       =SIMP(statut='o',typ=fonction,min=03,max=03 ),
+             ECHELLE         =SIMP(statut='f',typ='R',min=03,max=03),
+           ),       
+           NATURE          =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("ACCE","VITE","DEPL") ),
+         ),
+         COMB_MODE       =FACT(statut='o',min=01,max=01,
+           TYPE            =SIMP(statut='o',typ='TXM',into=("SRSS","CQC","DSC","ABS","DPC") ),
+           DUREE           =SIMP(statut='f',typ='R' ),
+         ),
+         COMB_DIRECTION  =FACT(statut='f',min=01,max=01,
+           TYPE            =SIMP(statut='f',typ='TXM',into=("QUAD","NEWMARK") ),
+         ),
+         COMB_MULT_APPUI =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("QUAD","LINE","ABS") ),
+         ),
+         DEPL_MULT_APPUI =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO'),
+                   AU_MOINS_UN('DX','DY','DZ' ),),
+           MODE_STAT       =SIMP(statut='f',typ=mode_stat ),
+           NOEUD_REFE      =SIMP(statut='f',typ=no),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           DX              =SIMP(statut='f',typ='R' ),
+           DY              =SIMP(statut='f',typ='R' ),
+           DZ              =SIMP(statut='f',typ='R' ),
+         ),
+         OPTION          =SIMP(statut='o',typ='TXM',max=10,
+                               into=("DEPL","VITE","ACCE_ABSOLU","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
+                                     "EFGE_ELNO_DEPL","REAC_NODA","FORC_NODA","EFGE_ELNO_CART",
+                                     "SIPO_ELNO_DEPL",) ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         IMPRESSION      =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('TOUT','NIVEAU'),),
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           NIVEAU          =SIMP(statut='f',typ='TXM',into=("SPEC_OSCI","MASS_EFFE","MAXI_GENE"),max=03 ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 04/12/2000   AUTEUR VABHHTS J.PELLET 
+def crea_champ_prod(TYPE_CHAM,**args):
+  if TYPE_CHAM == "CART_DBEL_R" : return carte_dbel_r
+  if TYPE_CHAM == "CART_DEPL_C" : return carte_depl_c
+  if TYPE_CHAM == "CART_DEPL_F" : return carte_depl_f
+  if TYPE_CHAM == "CART_DEPL_R" : return carte_depl_r
+  if TYPE_CHAM == "CART_DURT_R" : return carte_durt_r
+  if TYPE_CHAM == "CART_ENER_R" : return carte_ener_r
+  if TYPE_CHAM == "CART_EPSI_R" : return carte_epsi_r
+  if TYPE_CHAM == "CART_ERREUR" : return carte_erreur
+  if TYPE_CHAM == "CART_FLUX_R" : return carte_flux_r
+  if TYPE_CHAM == "CART_GEOM_R" : return carte_geom_r
+  if TYPE_CHAM == "CART_G_DEPL_R" : return carte_g_depl_r
+  if TYPE_CHAM == "CART_HYDR_R" : return carte_hydr_r
+  if TYPE_CHAM == "CART_INST_R" : return carte_inst_r
+  if TYPE_CHAM == "CART_INTE_R" : return carte_inte_r
+  if TYPE_CHAM == "CART_META_R" : return carte_meta_r
+  if TYPE_CHAM == "CART_NEUT_F" : return carte_neut_f
+  if TYPE_CHAM == "CART_NEUT_R" : return carte_neut_r
+  if TYPE_CHAM == "CART_PRES_R" : return carte_pres_r
+  if TYPE_CHAM == "CART_SIEF_R" : return carte_sief_r
+  if TYPE_CHAM == "CART_SOUR_R" : return carte_sour_r
+  if TYPE_CHAM == "CART_TEMP_F" : return carte_temp_f
+  if TYPE_CHAM == "CART_TEMP_R" : return carte_temp_r
+  if TYPE_CHAM == "CART_VAR2_R" : return carte_var2_r
+  if TYPE_CHAM == "CART_VNOR_C" : return carte_vnor_c
+  if TYPE_CHAM == "NOEU_DBEL_R" : return cham_no_dbel_r
+  if TYPE_CHAM == "NOEU_DEPL_C" : return cham_no_depl_c
+  if TYPE_CHAM == "NOEU_DEPL_F" : return cham_no_depl_f
+  if TYPE_CHAM == "NOEU_DEPL_R" : return cham_no_depl_r
+  if TYPE_CHAM == "NOEU_DURT_R" : return cham_no_durt_r
+  if TYPE_CHAM == "NOEU_ENER_R" : return cham_no_ener_r
+  if TYPE_CHAM == "NOEU_EPSI_R" : return cham_no_epsi_r
+  if TYPE_CHAM == "NOEU_ERREUR" : return cham_no_erreur
+  if TYPE_CHAM == "NOEU_FLUX_R" : return cham_no_flux_r
+  if TYPE_CHAM == "NOEU_GEOM_R" : return cham_no_geom_r
+  if TYPE_CHAM == "NOEU_G_DEPL_R" : return cham_no_g_depl_r
+  if TYPE_CHAM == "NOEU_HYDR_R" : return cham_no_hydr_r
+  if TYPE_CHAM == "NOEU_INST_R" : return cham_no_inst_r
+  if TYPE_CHAM == "NOEU_INTE_R" : return cham_no_inte_r
+  if TYPE_CHAM == "NOEU_META_R" : return cham_no_meta_r
+  if TYPE_CHAM == "NOEU_NEUT_F" : return cham_no_neut_f
+  if TYPE_CHAM == "NOEU_NEUT_R" : return cham_no_neut_r
+  if TYPE_CHAM == "NOEU_PRES_R" : return cham_no_pres_r
+  if TYPE_CHAM == "NOEU_SIEF_R" : return cham_no_sief_r
+  if TYPE_CHAM == "NOEU_SOUR_R" : return cham_no_sour_r
+  if TYPE_CHAM == "NOEU_TEMP_F" : return cham_no_temp_f
+  if TYPE_CHAM == "NOEU_TEMP_R" : return cham_no_temp_r
+  if TYPE_CHAM == "NOEU_VAR2_R" : return cham_no_var2_r
+  if TYPE_CHAM == "NOEU_VNOR_C" : return cham_no_vnor_c
+  if TYPE_CHAM == "ELEM_DBEL_R" : return cham_elem_dbel_r
+  if TYPE_CHAM == "ELEM_DEPL_C" : return cham_elem_depl_c
+  if TYPE_CHAM == "ELEM_DEPL_F" : return cham_elem_depl_f
+  if TYPE_CHAM == "ELEM_DEPL_R" : return cham_elem_depl_r
+  if TYPE_CHAM == "ELEM_DURT_R" : return cham_elem_durt_r
+  if TYPE_CHAM == "ELEM_ENER_R" : return cham_elem_ener_r
+  if TYPE_CHAM == "ELEM_EPSI_R" : return cham_elem_epsi_r
+  if TYPE_CHAM == "ELEM_ERREUR" : return cham_elem_erreur
+  if TYPE_CHAM == "ELEM_FLUX_R" : return cham_elem_flux_r
+  if TYPE_CHAM == "ELEM_GEOM_R" : return cham_elem_geom_r
+  if TYPE_CHAM == "ELEM_G_DEPL_R" : return cham_elem_g_depl
+  if TYPE_CHAM == "ELEM_HYDR_R" : return cham_elem_hydr_r
+  if TYPE_CHAM == "ELEM_INST_R" : return cham_elem_inst_r
+  if TYPE_CHAM == "ELEM_INTE_R" : return cham_elem_inte_r
+  if TYPE_CHAM == "ELEM_META_R" : return cham_elem_meta_r
+  if TYPE_CHAM == "ELEM_NEUT_F" : return cham_elem_neut_f
+  if TYPE_CHAM == "ELEM_NEUT_R" : return cham_elem_neut_r
+  if TYPE_CHAM == "ELEM_PRES_R" : return cham_elem_pres_r
+  if TYPE_CHAM == "ELEM_SIEF_R" : return cham_elem_sief_r
+  if TYPE_CHAM == "ELEM_SOUR_R" : return cham_elem_sour_r
+  if TYPE_CHAM == "ELEM_TEMP_F" : return cham_elem_temp_f
+  if TYPE_CHAM == "ELEM_TEMP_R" : return cham_elem_temp_r
+  if TYPE_CHAM == "ELEM_VARI_R" : return cham_elem_vari_r
+  if TYPE_CHAM == "ELEM_VNOR_C" : return cham_elem_vnor_c
+  if TYPE_CHAM == "ELNO_DBEL_R" : return cham_elem_dbel_r
+  if TYPE_CHAM == "ELNO_DEPL_C" : return cham_elem_depl_c
+  if TYPE_CHAM == "ELNO_DEPL_F" : return cham_elem_depl_f
+  if TYPE_CHAM == "ELNO_DEPL_R" : return cham_elem_depl_r
+  if TYPE_CHAM == "ELNO_DURT_R" : return cham_elem_durt_r
+  if TYPE_CHAM == "ELNO_ENER_R" : return cham_elem_ener_r
+  if TYPE_CHAM == "ELNO_EPSI_R" : return cham_elem_epsi_r
+  if TYPE_CHAM == "ELNO_ERREUR" : return cham_elem_erreur
+  if TYPE_CHAM == "ELNO_FLUX_R" : return cham_elem_flux_r
+  if TYPE_CHAM == "ELNO_GEOM_R" : return cham_elem_geom_r
+  if TYPE_CHAM == "ELNO_G_DEPL_R" : return cham_elem_g_depl
+  if TYPE_CHAM == "ELNO_HYDR_R" : return cham_elem_hydr_r
+  if TYPE_CHAM == "ELNO_INST_R" : return cham_elem_inst_r
+  if TYPE_CHAM == "ELNO_INTE_R" : return cham_elem_inte_r
+  if TYPE_CHAM == "ELNO_META_R" : return cham_elem_meta_r
+  if TYPE_CHAM == "ELNO_NEUT_F" : return cham_elem_neut_f
+  if TYPE_CHAM == "ELNO_NEUT_R" : return cham_elem_neut_r
+  if TYPE_CHAM == "ELNO_PRES_R" : return cham_elem_pres_r
+  if TYPE_CHAM == "ELNO_SIEF_R" : return cham_elem_sief_r
+  if TYPE_CHAM == "ELNO_SOUR_R" : return cham_elem_sour_r
+  if TYPE_CHAM == "ELNO_TEMP_F" : return cham_elem_temp_f
+  if TYPE_CHAM == "ELNO_TEMP_R" : return cham_elem_temp_r
+  if TYPE_CHAM == "ELNO_VARI_R" : return cham_elem_vari_r
+  if TYPE_CHAM == "ELNO_VNOR_C" : return cham_elem_vnor_c
+  if TYPE_CHAM == "ELGA_DBEL_R" : return cham_elem_dbel_r
+  if TYPE_CHAM == "ELGA_DEPL_C" : return cham_elem_depl_c
+  if TYPE_CHAM == "ELGA_DEPL_F" : return cham_elem_depl_f
+  if TYPE_CHAM == "ELGA_DEPL_R" : return cham_elem_depl_r
+  if TYPE_CHAM == "ELGA_DURT_R" : return cham_elem_durt_r
+  if TYPE_CHAM == "ELGA_ENER_R" : return cham_elem_ener_r
+  if TYPE_CHAM == "ELGA_EPSI_R" : return cham_elem_epsi_r
+  if TYPE_CHAM == "ELGA_ERREUR" : return cham_elem_erreur
+  if TYPE_CHAM == "ELGA_FLUX_R" : return cham_elem_flux_r
+  if TYPE_CHAM == "ELGA_GEOM_R" : return cham_elem_geom_r
+  if TYPE_CHAM == "ELGA_G_DEPL_R" : return cham_elem_g_depl
+  if TYPE_CHAM == "ELGA_HYDR_R" : return cham_elem_hydr_r
+  if TYPE_CHAM == "ELGA_INST_R" : return cham_elem_inst_r
+  if TYPE_CHAM == "ELGA_INTE_R" : return cham_elem_inte_r
+  if TYPE_CHAM == "ELGA_META_R" : return cham_elem_meta_r
+  if TYPE_CHAM == "ELGA_NEUT_F" : return cham_elem_neut_f
+  if TYPE_CHAM == "ELGA_NEUT_R" : return cham_elem_neut_r
+  if TYPE_CHAM == "ELGA_PRES_R" : return cham_elem_pres_r
+  if TYPE_CHAM == "ELGA_SIEF_R" : return cham_elem_sief_r
+  if TYPE_CHAM == "ELGA_SOUR_R" : return cham_elem_sour_r
+  if TYPE_CHAM == "ELGA_TEMP_F" : return cham_elem_temp_f
+  if TYPE_CHAM == "ELGA_TEMP_R" : return cham_elem_temp_r
+  if TYPE_CHAM == "ELGA_VARI_R" : return cham_elem_vari_r
+  if TYPE_CHAM == "ELGA_VNOR_C" : return cham_elem_vnor_c
+  raise AsException("type de concept resultat non prevu")
+
+CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
+                fr="  ",docu="U4.72.04-A",reentrant='n',
+      regles=(EXCLUS('NUME_DDL','CHAM_NO',),ENSEMBLE('CHAM_F','CHAM_PARA',),    
+              EXCLUS('TYPE_MAXI','NUME_ORDRE','INST','FREQ','NUME_MODE',        
+              'NOEUD_CMP','NOM_CAS','ANGL', ),),
+         TYPE_CHAM       =SIMP(statut='o',typ='TXM',     
+                        into=("CART_DBEL_R","NOEU_DBEL_R","ELEM_DBEL_R",  
+                             "ELNO_DBEL_R","ELGA_DBEL_R","CART_DEPL_C",         
+                             "NOEU_DEPL_C","ELEM_DEPL_C","ELNO_DEPL_C",         
+                             "ELGA_DEPL_C","CART_DEPL_F","NOEU_DEPL_F",         
+                             "ELEM_DEPL_F","ELNO_DEPL_F","ELGA_DEPL_F",         
+                             "CART_DEPL_R","NOEU_DEPL_R","ELEM_DEPL_R",         
+                             "ELNO_DEPL_R","ELGA_DEPL_R","CART_DURT_R",         
+                             "NOEU_DURT_R","ELEM_DURT_R","ELNO_DURT_R",         
+                             "ELGA_DURT_R","CART_ENER_R","NOEU_ENER_R",         
+                             "ELEM_ENER_R","ELNO_ENER_R","ELGA_ENER_R",         
+                             "CART_EPSI_R","NOEU_EPSI_R","ELEM_EPSI_R",         
+                             "ELNO_EPSI_R","ELGA_EPSI_R","CART_ERREUR",         
+                             "NOEU_ERREUR","ELEM_ERREUR","ELNO_ERREUR",         
+                             "ELGA_ERREUR","CART_FLUX_R","NOEU_FLUX_R",         
+                             "ELEM_FLUX_R","ELNO_FLUX_R","ELGA_FLUX_R",         
+                             "CART_GEOM_R","NOEU_GEOM_R","ELEM_GEOM_R",         
+                             "ELNO_GEOM_R","ELGA_GEOM_R","CART_G_DEPL_R",       
+                             "NOEU_G_DEPL_R","ELEM_G_DEPL_R","ELNO_G_DEPL_R",   
+                             "ELGA_G_DEPL_R","CART_HYDR_R","NOEU_HYDR_R",       
+                             "ELEM_HYDR_R","ELNO_HYDR_R","ELGA_HYDR_R",         
+                             "CART_INST_R","NOEU_INST_R","ELEM_INST_R",         
+                             "ELNO_INST_R","ELGA_INST_R","CART_INTE_R",         
+                             "NOEU_INTE_R","ELEM_INTE_R","ELNO_INTE_R",         
+                             "ELGA_INTE_R","CART_META_R","NOEU_META_R",         
+                             "ELEM_META_R","ELNO_META_R","ELGA_META_R",         
+                             "CART_NEUT_F","NOEU_NEUT_F","ELEM_NEUT_F",         
+                             "ELNO_NEUT_F","ELGA_NEUT_F","CART_NEUT_R",         
+                             "NOEU_NEUT_R","ELEM_NEUT_R","ELNO_NEUT_R",         
+                             "ELGA_NEUT_R","CART_PRES_R","NOEU_PRES_R",         
+                             "ELEM_PRES_R","ELNO_PRES_R","ELGA_PRES_R",         
+                             "CART_SIEF_R","NOEU_SIEF_R","ELEM_SIEF_R",         
+                             "ELNO_SIEF_R","ELGA_SIEF_R","CART_SOUR_R",         
+                             "NOEU_SOUR_R","ELEM_SOUR_R","ELNO_SOUR_R",         
+                             "ELGA_SOUR_R","CART_TEMP_F","NOEU_TEMP_F",         
+                             "ELEM_TEMP_F","ELNO_TEMP_F","ELGA_TEMP_F",         
+                             "CART_TEMP_R","NOEU_TEMP_R","ELEM_TEMP_R",         
+                             "ELNO_TEMP_R","ELGA_TEMP_R","CART_VAR2_R",         
+                             "NOEU_VAR2_R","ELEM_VARI_R","ELNO_VARI_R",         
+                             "ELGA_VARI_R","CART_VNOR_C","NOEU_VNOR_C",         
+                             "ELEM_VNOR_C","ELNO_VNOR_C","ELGA_VNOR_C",) ),
+         OPERATION       =SIMP(statut='o',typ='TXM',into=("AFFE","ASSE","EVAL","EXTR","DISC",) ),
+         MODELE          =SIMP(statut='f',typ=(modele) ),
+         MAILLAGE        =SIMP(statut='f',typ=(maillage) ),
+         PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         AFFE            =FACT(statut='f',min=01,max='**',
+      regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD',),         
+              UN_PARMI('VALE','VALE_I','VALE_C','VALE_F', ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
+           VALE            =SIMP(statut='f',typ='R',max='**' ),  
+           VALE_R          =SIMP(statut='f',typ='R',max='**' ),  
+           VALE_I          =SIMP(statut='f',typ='I',max='**' ),  
+           VALE_C          =SIMP(statut='f',typ='C',max='**' ),  
+           VALE_F          =SIMP(statut='f',typ=fonction,max='**'), 
+           FONCTION        =SIMP(statut='f',typ=fonction),
+         ),
+         NUME_DDL        =SIMP(statut='f',typ=(nume_ddl) ),
+         CHAM_NO         =SIMP(statut='f',typ=(cham_no_temp_r,cham_no_temp_f,cham_no_depl_r,       
+                                               cham_no_depl_f,cham_no_sief_r ) ),
+         ASSE            =FACT(statut='f',min=01,max='**',
+      regles=(AU_MOINS_UN('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD',),      
+              PRESENT_PRESENT('NOM_CMP_RESU','NOM_CMP', ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           CHAM_GD         =SIMP(statut='f',typ=(cham_elem,cham_no,carte)),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),  
+           NOM_CMP_RESU    =SIMP(statut='f',typ='TXM',max='**' ),  
+           CUMUL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+           COEF_R          =SIMP(statut='f',typ='R',defaut= 1. ),  
+         ),
+         CHAM_F          =SIMP(statut='f',typ=(cham_elem,cham_no,carte)),
+         CHAM_PARA       =SIMP(statut='f',typ=(cham_elem,cham_no,carte),max='**'),
+         CHAM_GD         =SIMP(statut='f',typ=(cham_elem,cham_no,carte)),
+         RESULTAT        =SIMP(statut='f',typ=resultat ),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',     
+                       into=("DEPL","VITE","ACCE","GEOMETRIE",           
+                             "DEPL_ABSOLU","VITE_ABSOLU","TEMP","ACCE_ABSOLU",  
+                             "FORC_NODA","REAC_NODA","EFGE_NOEU_DEPL",          
+                             "EFGE_NOEU_CART","EPSI_NOEU_DEPL",                 
+                             "SIGM_NOEU_DEPL","SIGM_NOEU_CART",                 
+                             "SIPO_NOEU_DEPL","EQUI_NOEU_SIGM",                 
+                             "EQUI_NOEU_EPSI","FLUX_NOEU_TEMP",                 
+                             "FLUX_ELGA_TEMP","FLUX_ELNO_TEMP",                 
+                             "META_ELGA_TEMP","META_ELNO_TEMP",                 
+                             "META_NOEU_TEMP","DURT_ELGA_META",                 
+                             "DURT_ELNO_META","DURT_NOEU_META","SIEF_ELGA",     
+                             "SIEF_ELNO_ELGA","SIEF_ELGA_DEPL",                 
+                             "VARI_ELNO_ELGA","VARI_ELGA","EPOT_ELEM_DEPL",     
+                             "ECIN_ELEM_DEPL","SOUR_ELGA_ELEC",                 
+                             "PRES_ELNO_REEL","PRES_ELNO_IMAG",                 
+                             "PRES_ELNO_DBEL","INTE_ELNO_ACTI",                 
+                             "INTE_ELNO_REAC","EFGE_ELNO_DEPL",                 
+                             "SIGM_ELNO_DEPL","EFGE_ELNO_CART",                 
+                             "SIGM_ELNO_CART","SIPO_ELNO_DEPL",                 
+                             "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL",                 
+                             "EPSG_ELNO_DEPL","EPSG_ELGA_DEPL","EPSP_ELNO",     
+                             "EPSP_ELGA","EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",     
+                             "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI",                 
+                             "ERRE_ELNO_ELGA","ERRE_ELGA_NORE",                 
+                             "ERRE_ELEM_NOZ1","ERRE_ELEM_NOZ2",                 
+                             "SIGM_NOZ1_ELGA","SIGM_NOZ2_ELGA",                 
+                             "DEGE_ELNO_DEPL","SIRE_ELNO_DEPL",                 
+                             "VNOR_ELEM_DEPL","SIEF_ELNO","VARI_ELNO",          
+                             "SIEF_NOEU_ELGA","VARI_NOEU_ELGA",                 
+                             "PRES_NOEU_DBEL","PRES_NOEU_REEL",                 
+                             "PRES_NOEU_IMAG","INTE_NOEU_ACTI",                 
+                             "INTE_NOEU_REAC","DCHA_ELGA_SIGM",                 
+                             "DCHA_ELNO_SIGM","RADI_ELGA_SIGM",                 
+                             "RADI_ELNO_SIGM","ENDO_ELNO_SIGA",                 
+                             "ENDO_ELNO_SINO","ENDO_ELNO_SIGM",                 
+                             "SIGM_ELNO_VARI","SIGM_NOEU_VARI",                 
+                             "EPME_ELNO_DEPL","EPME_ELGA_DEPL",                 
+                             "EPME_ELNO_DPGE","EPMG_ELNO_DEPL",                 
+                             "EPMG_ELGA_DEPL","GRAD_ELGA_THETA",                
+                             "GTHE_ELNO_ELGA","GRAD_NOEU_THETA","HYDR_ELGA",    
+                             "THETA","SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",) ),
+         TYPE_MAXI       =SIMP(statut='f',typ='TXM',into=("MAXI","MINI","MAXI_ABS","MINI_ABS","NORM_TRAN",) ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="VALE",into=("VALE","INST",) ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I'),  
+         INST            =SIMP(statut='f',typ='R'),  
+         FREQ            =SIMP(statut='f',typ='R'),  
+         NUME_MODE       =SIMP(statut='f',typ='I'),  
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),  
+         NOM_CAS         =SIMP(statut='f',typ='TXM'),  
+         ANGL            =SIMP(statut='f',typ='R'),  
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),  
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN",) ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 30/11/1999   AUTEUR JMBHH01 J.M.PROIX 
+CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage
+                    ,fr="Définition d'un nouveau maillage à partir d'un maillage existant en dupliquant des groupes de mailles (le nombre de mailles du maillage peut être augmenté)",
+                     docu="U4.23.02-C",reentrant='n',
+         regles=(EXCLUS('ECLA_PG','CREA_MAILLE'),
+                 EXCLUS('ECLA_PG','CREA_GROUP_MA'),
+                 EXCLUS('ECLA_PG','DETR_GROUP_MA'),
+                 EXCLUS('ECLA_PG','MODI_MAILLE'),),
+         MAILLAGE        =SIMP(statut='o',typ=maillage ),
+         CREA_POI1       =FACT(statut='f',min=01,max='**',fr="Création de mailles de type POI1 à partir de noeuds",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD' ),),
+           NOM_GROUP_MA    =SIMP(statut='f',typ=grma,max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+         ),
+         CREA_MAILLE     =FACT(statut='f',min=01,max='**',fr="Duplication de mailles",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           PREF_MAILLE     =SIMP(statut='o',typ='TXM' ),
+           PREF_NUME       =SIMP(statut='f',typ='I' ),
+         ),
+         CREA_GROUP_MA   =FACT(statut='f',min=01,max='**',fr="Duplication de mailles et création de groupes de mailles",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           NOM             =SIMP(statut='o',typ='TXM'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           PREF_MAILLE     =SIMP(statut='o',typ='TXM' ),
+           PREF_NUME       =SIMP(statut='f',typ='I' ),
+         ),
+         DETR_GROUP_MA   =FACT(statut='f',min=01,max=01,fr="Destruction de groupes de mailles",
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           NB_MAILLE       =SIMP(statut='f',typ='I',defaut= 0,fr="Nombre minimal de mailles que doit contenir le groupe pour être détruit",  ),  
+         ),
+         MODI_MAILLE     =FACT(statut='f',min=01,max='**',fr="Modification du type de mailles",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=ma,max='**'),
+           OPTION          =SIMP(statut='o',typ='TXM',into=("TRIA6_7","QUAD8_9","SEG3_4"),fr="Choix de la transformation" ),
+           PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
+           PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
+         ),
+         REPERE          =FACT(statut='f',min=01,max='**',fr="Réalisation d un changement de repère servant à déterminer les caractéristiques d une section de poutre",
+           TABLE           =SIMP(statut='o',typ=tabl_cara_geom,fr="Nom de la table contenant les caractéristiques de la section de poutre" ),
+           NOM_ORIG        =SIMP(statut='f',typ='TXM',into=("CDG","TORSION"),fr="Origine du nouveau repère" ),
+           NOM_ROTA        =SIMP(statut='f',typ='TXM',into=("INERTIE",),fr="Direction du repére"  ),   
+           b_cdg =BLOC(condition = "NOM_ORIG == 'CDG'",
+             GROUP_MA        =SIMP(statut='f',typ=grma,fr="Nom du groupe de mailles dont le centre de gravité sera l origine du nouveau repère"),
+           ),
+         ),
+         ECLA_PG         =FACT(statut='f',min=01,max=01,fr="Eclatement des mailles en petites mailles contenant chacune un seul point de gauss",
+           MODELE          =SIMP(statut='o',typ=modele ),
+           SHRINK          =SIMP(statut='f',typ='R',defaut= 0.9, fr="Facteur de réduction" ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/06/2000   AUTEUR CIBHHLV L.VIVAN
+def crea_resu_prod(TYPE_RESU,**args):
+  if TYPE_RESU == "EVOL_ELAS"    : return evol_elas
+  if TYPE_RESU == "EVOL_NOLI"    : return evol_noli
+  if TYPE_RESU == "EVOL_THER"    : return evol_ther
+  if TYPE_RESU == "MULT_ELAS"    : return mult_elas
+  if TYPE_RESU == "FOURIER_ELAS" : return fourier_elas
+  raise AsException("type de concept resultat non prevu")
+
+# commentaire C. DURAND : J'ai supprimé tous les blocs.
+# Ce qui avait été fait était faux (plantage EFICAS de nombreux tests et ingérable)
+# il faudra réfléchir à la manière de les réintroduire proprement
+CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-D",reentrant='f',
+               fr="Engendrer ou enrichir une structure de données de type evol_ther en affectant les cham_no associés",
+         regles=(EXCLUS('CHAM_GD','ECLA_PG','PERM_CHAMP',),),
+         TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_THER","FOURIER_ELAS","MULT_ELAS",
+                                                          "EVOL_ELAS","EVOL_NOLI") ),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","TEMP","SIEF_ELGA","VARI_ELGA",),max='**' ),
+         CHAM_GD         =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOM_CAS','NUME_MODE','LIST_INST','INST',),),
+           CHAM_NO         =SIMP(statut='o',typ=(cham_no)),
+           NUME_ORDRE_INIT =SIMP(statut='f',typ='I'),
+           NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+           NUME_MODE       =SIMP(statut='f',typ='I'),
+           TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           NUME_FIN        =SIMP(statut='f',typ='I'),
+         ),  
+
+         ECLA_PG         =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','LIST_INST','LIST_FREQ','LIST_ORDRE'),),
+           MODELE_INIT     =SIMP(statut='o',typ=modele),
+           RESU_INIT       =SIMP(statut='o',typ=resultat),
+           MAILLAGE        =SIMP(statut='o',typ=maillage),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("SIEF_ELGA","VARI_ELGA","SIEF_ELGA_DEPL","FLUX_ELGA_TEMP",) ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+         ),
+
+
+         RESU_INIT       =SIMP(statut='f',typ=evol_noli),
+         INST_INIT       =SIMP(statut='f',typ='R'),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+         CRITERE         =SIMP(statut='f',typ='TXM',into=('RELATIF','ABSOLU'),defaut='RELATIF'),
+         MAILLAGE_INIT   =SIMP(statut='f',typ=maillage,),
+         RESU_FINAL      =SIMP(statut='f',typ=evol_noli,),
+         MAILLAGE_FINAL  =SIMP(statut='f',typ=maillage,),
+         PERM_CHAMP      =FACT(statut='f',min=01,max=01,
+            GROUP_MA_FINAL =SIMP(statut='o',typ=grma),
+            GROUP_MA_INIT  =SIMP(statut='o',typ=grma),
+            TRAN           =SIMP(statut='o',typ='R',max='**'),
+            PRECISION      =SIMP(statut='f',typ='R',defaut=1.0E-3),
+         )
+)  ;
+#& AJOUT COMMANDE    
+DEBUT=PROC(nom="DEBUT",op=0 ,docu="U4.11.01-F",repetable='n',
+           fr="Ouverture d une étude. Allocation des ressources mémoire et disque",
+
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM'),
+         BASE            =FACT(fr="définition des paramètres associés aux bases JEVEUX",
+                               statut='f',min=01,max=03,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM',
+                                 into=('GLOBALE','VOLATILE','LOCALE'),),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           CAS             =SIMP(statut='f',typ='TXM'),
+           NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+           LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+           LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max=03,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='o',typ='I'),
+         ),
+         CATALOGUE       =FACT(statut='f',min=01,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+         CODE            =FACT("définition d un nom pour l'esemble d'une étude",
+                               statut='f',min=01,max=01,
+           NOM             =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I',defaut=15),
+         ),
+         DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
+                               statut='f',min=01,max=01,
+           JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+                                 statut='f',typ='TXM',into=('TEST',)),
+         ),
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=01,max=01,
+           GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),  
+           TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),  
+           TAILLE          =SIMP(statut='f',typ='I'),  
+           PARTITION       =SIMP(statut='f',typ='R'),  
+         ),
+ );
+#& MODIF COMMANDE  DATE 09/09/98   AUTEUR ACBHHCD G.DEVESA
+DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=base_modale
+                    ,fr="Définition d une base modale pour analyse dynamique par superposition modale ou sous structuration dynamique par synthèse modale",
+                     docu="U4.64.02-E",reentrant='f',
+         regles=(UN_PARMI('CLASSIQUE','RITZ'),),
+         CLASSIQUE       =FACT(statut='f',min=01,max=01,
+           INTERF_DYNA     =SIMP(statut='o',typ=interf_dyna_clas ),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca,max='**' ),
+           NMAX_MODE       =SIMP(statut='f',typ='I',defaut= 10 ),
+         ),
+         RITZ            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MODE_STAT','MODE_MECA','MULT_ELAS','BASE_MODALE'),),
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca,max='**'  ),
+           NMAX_MODE       =SIMP(statut='f',typ='I',defaut= 999 ),
+           MODE_STAT       =SIMP(statut='f',typ=mode_stat ),
+           MULT_ELAS       =SIMP(statut='f',typ=mult_elas ),
+           BASE_MODALE     =SIMP(statut='f',typ=base_modale ),
+         ),
+#  le bloc conditionnel remplace-t-il PRESENT_PRESENT('RITZ','NUME_REF'),
+#                                     PRESENT_ABSENT('INTERF_DYNA','CLASSIQUE'),        
+         b_ritz          =BLOC(condition = "RITZ != None",
+           INTERF_DYNA     =SIMP(statut='f',typ=interf_dyna_clas ),
+           NUME_REF        =SIMP(statut='o',typ=nume_ddl ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 06/11/98   AUTEUR CIBHHLV L.VIVAN 
+DEFI_CABLE_BP=OPER(nom="DEFI_CABLE_BP",op= 180,sd_prod=cabl_precont,
+                   fr=" ",
+                   docu="U4.42.04-A",reentrant='n',
+         MODELE          =SIMP(statut='o',typ=modele ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+         GROUP_MA_BETON  =SIMP(statut='o',typ=grma),
+         DEFI_CABLE      =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('NOEUD_ANCRAGE','GROUP_NO_ANCRAGE'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           NOEUD_ANCRAGE   =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO_ANCRAGE=SIMP(statut='f',typ=grno,max='**'),
+           TYPE_ANCRAGE    =SIMP(statut='o',typ='TXM',max='**',     
+                                 into=("ACTIF","PASSIF") ),
+         ),
+         TENSION_INIT    =SIMP(statut='o',typ='R' ),  
+         RECUL_ANCRAGE   =SIMP(statut='o',typ='R' ),  
+         RELAXATION      =FACT(statut='f',min=0,max=1,
+           R_J             =SIMP(statut='o',typ='R' ),  
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 16/07/96   AUTEUR CIBHHRA R.MEDDOURI 
+DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op=   2,sd_prod=fonction,
+                    fr="Définition d une fonction constante",
+                    docu="U4.31.01-F",reentrant='n',
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE            =SIMP(statut='o',typ='R',max=01 ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN 
+DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater,docu="U4.42.03-E",reentrant='n',
+                    fr="Définition d une coque composite couche par couche",
+         COUCHE          =FACT(statut='o',min=01,max='**',
+           EPAIS           =SIMP(statut='o',typ='R' ),
+           MATER           =SIMP(statut='o',typ=(mater) ),
+           ORIENTATION     =SIMP(statut='f',typ='R',defaut= 0.0E+0 ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
+                                 into=("RESULTAT",) ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2000   AUTEUR CIBHHLV L.VIVAN 
+DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
+                    fr="Définition des caractéristiques nécessaires à l'étude du comportement dynamique d'une structure sous écoulement",
+                    docu="U4.25.01-C",reentrant='n',
+         regles=(EXCLUS('FAISCEAU_TRANS','GRAPPE','FAISCEAU_AXIAL','COQUE_COAX',),
+                 AU_MOINS_UN('FAISCEAU_TRANS','GRAPPE','FAISCEAU_AXIAL','COQUE_COAX', ),),
+         FAISCEAU_TRANS  =FACT(statut='f',min=01,max='**',
+           COUPLAGE        =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           PROF_RHO_F_INT  =SIMP(statut='f',typ=fonction ),
+           PROF_RHO_F_EXT  =SIMP(statut='f',typ=fonction ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',into=("DX","DY","DZ") ),
+           COEF_MASS_AJOU  =SIMP(statut='f',typ='R' ),
+           TYPE_PAS        =SIMP(statut='f',typ='TXM',into=("CARRE_LIGN","TRIA_LIGN") ),
+           TYPE_RESEAU     =SIMP(statut='f',typ='I' ),
+           UNITE_CD        =SIMP(statut='f',typ='I',defaut=70),
+           UNITE_CK        =SIMP(statut='f',typ='I',defaut=71),            
+           PAS             =SIMP(statut='f',typ='R' ),
+         ),
+         GRAPPE          =FACT(statut='f',min=00,max=01,
+           regles=(ENSEMBLE('GRAPPE_2','NOEUD','CARA_ELEM','MODELE','RHO_FLUI',),
+                   PRESENT_PRESENT('COEF_MASS_AJOU','GRAPPE_2', ),),
+#  peut on créer un bloc a partir de la valeur de couplage  
+           COUPLAGE        =SIMP(statut='o',typ='TXM',into=("OUI","NON") ),
+           GRAPPE_2        =SIMP(statut='f',typ='TXM',
+                                 into=("ASC_CEN","ASC_EXC","DES_CEN","DES_EXC") ),
+           NOEUD           =SIMP(statut='f',typ=no),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           MODELE          =SIMP(statut='f',typ=modele ),
+           COEF_MASS_AJOU  =SIMP(statut='f',typ='R' ),
+           RHO_FLUI        =SIMP(statut='f',typ='R' ),
+           UNITE_CA        =SIMP(statut='f',typ='I',defaut=70),
+           UNITE_KA        =SIMP(statut='f',typ='I',defaut=71),            
+         ),
+         FAISCEAU_AXIAL  =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA','TRI_GROUP_MA'),
+                   UN_PARMI('CARA_ELEM','RAYON_TUBE'),
+                   ENSEMBLE('RAYON_TUBE','COOR_TUBE'),
+                   PRESENT_ABSENT('RAYON_TUBE','TRI_GROUP_MA'),
+                   ENSEMBLE('CARA_PAROI','VALE_PAROI'),
+                   ENSEMBLE('LONG_TYPG','LARG_TYPG','EPAI_TYPG','RUGO_TYPG','COEF_TRAI_TYPG','COEF_DPOR_TYPG',
+                            'COOR_GRILLE','TYPE_GRILLE', ),),
+#  on doit pouvoir mettre des blocs conditionnels mais pas assez d infos pour le faire                            
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           TRI_GROUP_MA    =SIMP(statut='f',typ='TXM' ),
+           VECT_X          =SIMP(statut='f',typ='R',max=03),
+           PROF_RHO_FLUI   =SIMP(statut='f',typ=fonction ),
+           PROF_VISC_CINE  =SIMP(statut='f',typ=fonction ),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           RAYON_TUBE      =SIMP(statut='f',typ='R' ),
+           COOR_TUBE       =SIMP(statut='f',typ='R',max='**'),
+           PESANTEUR       =SIMP(statut='f',typ='R',min=04,max=04),
+           RUGO_TUBE       =SIMP(statut='f',typ='R' ),
+           CARA_PAROI      =SIMP(statut='f',typ='TXM',max=05,
+                                 into=("YC","ZC","R","HY","HZ") ),
+           VALE_PAROI      =SIMP(statut='f',typ='R',max=05),
+           ANGL_VRIL       =SIMP(statut='f',typ='R' ),
+           LONG_TYPG       =SIMP(statut='f',typ='R',max='**'),
+           LARG_TYPG       =SIMP(statut='f',typ='R',max='**'),
+           EPAI_TYPG       =SIMP(statut='f',typ='R',max='**'),
+           RUGO_TYPG       =SIMP(statut='f',typ='R',max='**'),
+           COEF_TRAI_TYPG  =SIMP(statut='f',typ='R',max='**'),
+           COEF_DPOR_TYPG  =SIMP(statut='f',typ='R',max='**'),
+           COOR_GRILLE     =SIMP(statut='f',typ='R',max='**'),
+           TYPE_GRILLE     =SIMP(statut='f',typ='I',max='**'),
+         ),
+         COQUE_COAX      =FACT(statut='f',min=00,max=01,
+           MASS_AJOU       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           GROUP_MA_INT    =SIMP(statut='o',typ=grma),
+           GROUP_MA_EXT    =SIMP(statut='o',typ=grma),
+           VECT_X          =SIMP(statut='o',typ='R',max='**'),
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           MATER_INT       =SIMP(statut='o',typ=mater ),
+           MATER_EXT       =SIMP(statut='o',typ=mater ),
+           RHO_FLUI        =SIMP(statut='o',typ='R' ),
+           VISC_CINE       =SIMP(statut='o',typ='R' ),
+           RUGOSITE        =SIMP(statut='o',typ='R' ),
+           PDC_MOY_1       =SIMP(statut='o',typ='R' ),
+           PDC_DYN_1       =SIMP(statut='o',typ='R' ),
+           PDC_MOY_2       =SIMP(statut='o',typ='R' ),
+           PDC_DYN_2       =SIMP(statut='o',typ='R' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN 
+DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction,docu="U4.MK.10-A",reentrant='n',
+                    fr="Définition d une fonction du temps pour calculer des forces de LAPLACE",
+      regles=(UN_PARMI('COUR_PRIN','COUR'),
+              EXCLUS('COUR','COUR_SECO'), ),
+         FREQ            =SIMP(statut='f',typ='R',defaut= 50.),
+         SIGNAL          =SIMP(statut='f',typ='TXM',defaut="COMPLET",into=("COMPLET","CONTINU") ),
+         COUR            =FACT(statut='f',min=01,max='**',
+         fr="Définition du courant de court-circuit",
+           regles=(UN_PARMI('PHI_CC_1','INTC_CC_1'),
+                   UN_PARMI('PHI_CC_2','INTC_CC_2'),),
+           INTE_CC_1       =SIMP(statut='o',typ='R'),
+           TAU_CC_1        =SIMP(statut='o',typ='R'),
+           PHI_CC_1        =SIMP(statut='f',typ='R'),
+           INTC_CC_1       =SIMP(statut='f',typ='R'),
+           INTE_CC_2       =SIMP(statut='o',typ='R'),
+           TAU_CC_2        =SIMP(statut='o',typ='R'),
+           PHI_CC_2        =SIMP(statut='f',typ='R'),
+           INTC_CC_2       =SIMP(statut='f',typ='R'),
+           INST_CC_INIT    =SIMP(statut='f',typ='R'),
+           INST_CC_FIN     =SIMP(statut='o',typ='R'),
+         ),
+         COUR_PRIN       =FACT(statut='f',min=01,max=01,
+         fr="Définition du courant de court-circuit avec réenclenchement",
+           regles=(UN_PARMI('PHI_CC_1','INTC_CC_1'),),
+           INTE_CC_1       =SIMP(statut='o',typ='R'),
+           TAU_CC_1        =SIMP(statut='o',typ='R'),
+           PHI_CC_1        =SIMP(statut='f',typ='R'),
+           INTC_CC_1       =SIMP(statut='f',typ='R'),
+           INTE_RENC_1     =SIMP(statut='f',typ='R'),
+           TAU_RENC_1      =SIMP(statut='f',typ='R'),
+           PHI_RENC_1      =SIMP(statut='f',typ='R'),
+           INST_CC_INIT    =SIMP(statut='o',typ='R'),
+           INST_CC_FIN     =SIMP(statut='o',typ='R'),
+           INST_RENC_INIT  =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+           INST_RENC_FIN   =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+         ),
+         COUR_SECO       =FACT(statut='f',min=01,max='**',
+         fr="Définition du courant de court-circuit avec un intervalle de temps différent de celui de COUR_PRIN",
+           regles=(UN_PARMI('PHI_CC_2','INTC_CC_2'),),
+           INTE_CC_2       =SIMP(statut='o',typ='R'),
+           TAU_CC_2        =SIMP(statut='o',typ='R'),
+           PHI_CC_2        =SIMP(statut='f',typ='R'),
+           INTC_CC_2       =SIMP(statut='f',typ='R'),
+           INTE_RENC_2     =SIMP(statut='f',typ='R'),
+           TAU_RENC_2      =SIMP(statut='f',typ='R'),
+           PHI_RENC_2      =SIMP(statut='f',typ='R'),
+           DIST            =SIMP(statut='f',typ='R',defaut=1.0E+0),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN 
+DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction,
+                    fr="Définition des fonctions caractéristiques du fluide le long de la structure (profil de vitesse, profil de masse volumique)",
+                    docu="U4.35.01-C",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
+         NOEUD_INIT      =SIMP(statut='o',typ=no),
+         NOEUD_FIN       =SIMP(statut='o',typ=no),
+         VITE            =FACT(statut='o',min=01,max=01,
+           VALE            =SIMP(statut='f',typ='R',defaut= 1. ),
+           PROFIL          =SIMP(statut='o',typ='TXM',into=("UNIFORME","LEONARD") ),
+           NB_BAV          =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 2 , 3 ) ),
+         ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=02,defaut="LIN",
+                               into=("NON","LIN","LOG") ),
+         PROL_DROIT      =SIMP(statut='f',typ='TXM',defaut="EXCLU",
+                               into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM' ,defaut="EXCLU",
+                               into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 06/09/1999   AUTEUR UFBHHLL C.CHAVANT 
+def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,**args):
+  if VALE != None  : return fonction
+  if VALE_C != None  : return fonction_c
+  if VALE_PARA != None  : return fonction
+  if NOEUD_PARA != None  : return fonction
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
+                    ,fr="Définition des valeurs réelles ou complexes d une fonction réelle",
+                     docu="U4.31.02-F",reentrant='n',
+         regles=(UN_PARMI('VALE','VALE_C','VALE_PARA','NOEUD_PARA'),),
+         NOM_PARA        =SIMP(statut='o',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","META","FREQ","PULS",
+                                     "AMOR","ABSC","SIGM","HYDR","SECH","PORO","SAT",
+                                     "PGAZ","PCAP") ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE            =SIMP(statut='f',typ='R',max='**',
+                               fr ="Fonction réelle définie par une liste de couples (abscisse,ordonnée)"), 
+         VALE_C          =SIMP(statut='f',typ='R',max='**',
+                               fr ="Fonction complexe définie par une liste de couples (abscisse,ordonnée partie réelle, ordonnée partie imaginaire)"), 
+         VALE_PARA       =SIMP(statut='f',typ=listr8,
+                               fr ="Fonction réelle définie par deux concepts de type listr8" ),
+         b_vale_para     =BLOC(condition = "VALE_PARA != None", 
+           VALE_FONC       =SIMP(statut='o',typ=listr8 ),
+         ),
+         NOEUD_PARA      =SIMP(statut='f',typ=no,max='**',
+                               fr ="Fonction réelle définie par une liste de noeuds et un maillage"),
+         b_noeud_para    =BLOC(condition = "NOEUD_PARA != None",
+           MAILLAGE        =SIMP(statut='o',typ=maillage ),
+           VALE_Y          =SIMP(statut='o',typ='R',max='**'), 
+         ),
+                  
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=02,defaut="LIN",into=("NON","LIN","LOG") ),
+         PROL_DROIT      =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         VERIF           =SIMP(statut='f',typ='TXM',into=("CROISSANT",) ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 17/11/1999   AUTEUR CIBHHLV L.VIVAN 
+DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,docu="U4.82.01-E",reentrant='n',
+                    fr="Définition de lèvres et d un fond de fissure en 3D",
+         regles=(UN_PARMI('FOND','FOND_FERME'),
+                 EXCLUS('FOND_FERME','DTAN_ORIG'),
+                 EXCLUS('FOND_FERME','DTAN_EXTR'),
+                      EXCLUS('FOND_FERME','VECT_GRNO_ORIG'),
+                      EXCLUS('FOND_FERME','VECT_GRNO_EXTR'),
+                 UN_PARMI('LEVRE_SUP','NORMALE'),
+                      EXCLUS('LEVRE_INF','NORMALE'),
+                 ENSEMBLE('DTAN_ORIG','DTAN_EXTR'),
+                      ENSEMBLE('VECT_GRNO_ORIG','VECT_GRNO_EXTR'),
+                      EXCLUS('DTAN_ORIG','VECT_GRNO_ORIG'),
+                      EXCLUS('DTAN_EXTR','VECT_GRNO_EXTR') ,),
+           MAILLAGE        =SIMP(statut='o',typ=maillage ),
+           FOND            =FACT(statut='f',min=01,max=01,
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+                     EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+                          EXCLUS('NOEUD_EXTR','GROUP_NO_EXTR'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+#  à mettre à jour le max vaut-il 1  
+             NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
+           ),
+           FOND_FERME      =FACT(statut='f',min=01,max=01,
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+                          EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+             MAILLE_ORIG     =SIMP(statut='f',typ=ma,max=1),
+             GROUP_MA_ORIG   =SIMP(statut='f',typ=ma,max=1),
+           ),
+           LEVRE_SUP       =FACT(statut='f',min=01,max=01,
+             regles=(UN_PARMI('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           ),
+           LEVRE_INF       =FACT(statut='f',min=01,max=01,
+             regles=(UN_PARMI('GROUP_MA','MAILLE', ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           ),
+           NORMALE         =SIMP(statut='f',typ='R',max='**'),
+           DTAN_ORIG       =SIMP(statut='f',typ='R',max='**'),
+           DTAN_EXTR       =SIMP(statut='f',typ='R',max='**'),
+           VECT_GRNO_ORIG  =SIMP(statut='f',typ=grno,max=2),
+           VECT_GRNO_EXTR  =SIMP(statut='f',typ=grno,max=2),
+           INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 27/09/2000   AUTEUR DURAND C.DURAND 
+def defi_group_prod(MAILLAGE,**args):
+  if AsType(MAILLAGE) == maillage : return maillage
+  if AsType(MAILLAGE) == squelette : return squelette
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
+                fr="Définition de nouveaux groupes de noeuds et/ou de mailles dans un concept maillage",
+                docu="U4.22.01-E",reentrant='o',
+         regles=(AU_MOINS_UN('CREA_GROUP_MA','CREA_GROUP_NO'),),            
+         MAILLAGE        =SIMP(statut='o',typ=(maillage,squelette) ),
+         
+         CREA_GROUP_MA   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION'),),
+#  quel est le concept attendu deriere NOM
+           NOM             =SIMP(statut='o',typ=grma),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           INTERSEC        =SIMP(statut='f',typ=grma,max='**'),
+           UNION           =SIMP(statut='f',typ=grma,max='**'),
+           DIFFE           =SIMP(statut='f',typ=grma,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',into=("FACE_NORMALE","SPHERE","CYLINDRE","BANDE") ),
+           b_group_ma      =BLOC(condition = "GROUP_MA != None",
+             regles=(EXCLUS('POSITION','NUME_INIT'),),
+             NUME_INIT       =SIMP(statut='f',typ='I',defaut= 1 ),             
+             POSITION        =SIMP(statut='f',typ='TXM',into=("INIT","FIN","MILIEU") ), 
+             b_nume_init   =BLOC(condition = "NUME_INIT != None",
+               NUME_FIN        =SIMP(statut='f',typ='I' ),
+             ),      
+           ),
+           b_face_normale  =BLOC(condition = "OPTION == 'FACE_NORMALE'",
+             regles=(UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=02),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),
+             ANGL_PREC       =SIMP(statut='f',typ='R',defaut= 0.5 ),
+             VERI_SIGNE      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),     
+           ),
+           b_sphere        =BLOC(condition = "OPTION == 'SPHERE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+             RAYON           =SIMP(statut='o',typ='R' ),    
+           ),
+           b_cylindre      =BLOC(condition = "OPTION == 'CYLINDRE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+             RAYON           =SIMP(statut='o',typ='R' ), 
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=02),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),   
+           ),
+           b_bande         =BLOC(condition = "OPTION == 'BANDE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+             DIST            =SIMP(statut='o',typ='R' ),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=02),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),   
+           ),
+         ),
+         CREA_GROUP_NO   =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT_GROUP_MA','GROUP_MA','NOEUD','INTERSEC','UNION','DIFFE',
+                               'GROUP_NO','OPTION'),),
+
+           TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',into=("OUI",) ),               
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           INTERSEC        =SIMP(statut='f',typ=grno,max='**'),
+           UNION           =SIMP(statut='f',typ=grno,max='**'),
+           DIFFE           =SIMP(statut='f',typ=grno,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',into=("ENV_SPHERE","ENV_CYLINDRE","PLAN",
+                                                            "SEGM_DROI_ORDO","NOEUD_ORDO") ),  
+           b_nom_group_ma  =BLOC(condition = "GROUP_MA != None",
+             NOM             =SIMP(statut='f',typ=grma,max='**'),
+           ),
+           b_nom =BLOC(condition = "GROUP_MA == None and TOUT_GROUP_MA == None" ,
+             NOM             =SIMP(statut='o',typ=geom),
+           ),                                                 
+            
+           b_group_no      =BLOC(condition = "GROUP_NO != None",
+             regles=(EXCLUS('POSITION','NUME_INIT'),),
+             NUME_INIT       =SIMP(statut='f',typ='I',defaut= 1 ),
+             POSITION        =SIMP(statut='f',typ='TXM',into=("INIT","FIN","MILIEU") ), 
+             b_nume_init     =BLOC(condition = "NUME_INIT != None",
+               NUME_FIN        =SIMP(statut='f',typ='I' ),
+             ),      
+           ),
+           b_env_sphere    =BLOC(condition = "OPTION == 'ENV_SPHERE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=01),
+             RAYON           =SIMP(statut='o',typ='R' ),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),                                                 
+           ),
+           b_env_cylindre  =BLOC(condition = "OPTION == 'ENV_CYLINDRE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=01),
+             RAYON           =SIMP(statut='o',typ='R' ),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),                                                 
+           ),
+           b_env_plan      =BLOC(condition = "OPTION == 'PLAN'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=01),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),                                                 
+           ),
+           b_segm_droi_ordo=BLOC(condition = "OPTION == 'SEGM_DROI_ORDO'",
+             regles=(UN_PARMI('NOEUD_ORIG','GROUP_NO_ORIG'),
+                     UN_PARMI('NOEUD_EXTR','GROUP_NO_EXTR'),), 
+             NOEUD_ORIG      =SIMP(statut='f',typ=no),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),                                                 
+           ),
+           b_noeud_ordo    =BLOC(condition = "OPTION == 'NOEUD_ORDO'",
+             regles=(UN_PARMI('NOEUD_ORIG','GROUP_NO_ORIG'),
+                     UN_PARMI('NOEUD_EXTR','GROUP_NO_EXTR'),),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),                                                 
+           ),      
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/05/2000   AUTEUR CIBHHAB N.RAHNI 
+DEFI_INTE_SPEC=OPER(nom="DEFI_INTE_SPEC",op= 115,sd_prod=tabl_intsp,
+                    fr="Définition d'une matrice interspectrale à partir de constantes, de fonctions complexes, ou du filtrage d'un bruit blanc par un oscillateur de KANAI-TAJIMI",
+                    docu="U4.36.02-E",reentrant='n',
+
+         DIMENSION       =SIMP(statut='f',typ='I',defaut= 1 ),
+
+         PAR_FONCTION    =FACT(statut='f',min=01,max='**',
+           NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           FONCTION        =SIMP(statut='o',typ=fonction_c ),
+         ),
+         KANAI_TAJIMI    =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('VALE_R','VALE_C'),),
+           NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           FREQ_MIN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FREQ_MAX        =SIMP(statut='f',typ='R',defaut= 100. ),
+           PAS             =SIMP(statut='f',typ='R',defaut= 1. ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',defaut= 0.6 ),
+           FREQ_MOY        =SIMP(statut='f',typ='R',defaut= 5. ),
+           VALE_R          =SIMP(statut='f',typ='R' ),
+           VALE_C          =SIMP(statut='f',typ='C' ),
+           INTERPOL        =SIMP(statut='f',typ='TXM',max=02,defaut="LIN",into=("NON","LIN","LOG") ),
+           PROL_DROIT      =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         ),
+         CONSTANT        =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('VALE_R','VALE_C'),),
+           NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           FREQ_MIN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FREQ_MAX        =SIMP(statut='f',typ='R',defaut= 100. ),
+           PAS             =SIMP(statut='f',typ='R',defaut= 1. ),
+           VALE_R          =SIMP(statut='f',typ='R' ),
+           VALE_C          =SIMP(statut='f',typ='C' ),
+           INTERPOL        =SIMP(statut='f',typ='TXM',max=02,defaut="LIN",into=("NON","LIN","LOG") ),
+           PROL_DROIT      =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),               
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN 
+DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op=  98,sd_prod=interf_dyna_clas,
+                      fr="Définition des interfaces d une structure pour analyse dynamique par superposition modale ou sous structuration dynamique par synthèse modale",
+                      docu="U4.64.01-E",reentrant='n',
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl ),
+         INTERFACE       =FACT(statut='o',min=01,max='**',
+           regles=(ENSEMBLE('NOM','TYPE'),
+#  erreur doc U sur la condition qui suit
+                   UN_PARMI('NOEUD','GROUP_NO'),),
+           NOM             =SIMP(statut='f',typ='TXM' ),
+           TYPE            =SIMP(statut='f',typ='TXM',into=("MNEAL","CRAIGB","CB_HARMO","AUCUN") ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           DDL_ACTIF       =SIMP(statut='f',typ='TXM',max='**'),
+           MASQUE          =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         FREQ            =SIMP(statut='f',typ='R',defaut= 1.),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN 
+DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis,
+                    fr="Définition d une suite croissante d entiers",
+                    docu="U4.34.02-F",reentrant='n',
+         regles=(UN_PARMI('VALE','DEBUT'),
+                 EXCLUS('VALE','INTERVALLE'),),
+         VALE            =SIMP(statut='f',typ='I',max='**'),
+         DEBUT           =SIMP(statut='f',typ='I'),
+         INTERVALLE      =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOMBRE','PAS'),),
+           JUSQU_A         =SIMP(statut='o',typ='I'),
+           NOMBRE          =SIMP(statut='f',typ='I'),
+           PAS             =SIMP(statut='f',typ='I'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN 
+DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8,
+                    fr="Définition d une suite croissante de réels",
+                    docu="U4.34.01-F",reentrant='n',
+         regles=(UN_PARMI('VALE','DEBUT',),
+                 EXCLUS('VALE','INTERVALLE'),
+                 ENSEMBLE('DEBUT','INTERVALLE'),
+                 ),
+         VALE            =SIMP(statut='f',typ='R',max='**'),
+         DEBUT           =SIMP(statut='f',typ='R'),
+         INTERVALLE      =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOMBRE','PAS'),),
+           JUSQU_A         =SIMP(statut='o',typ='R'),
+           NOMBRE          =SIMP(statut='f',typ='I'),
+           PAS             =SIMP(statut='f',typ='R'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 20/12/94   AUTEUR B7BHHLV L.VIVAN 
+DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage,
+                   fr="Définition d un nouveau maillage à partir de macro éléments",
+                   docu="U4.23.01-E",reentrant='n',
+         DEFI_MAILLE     =FACT(statut='o',min=01,max='**',
+           MACR_ELEM_STAT  =SIMP(statut='o',typ=macr_elem_stat,max='**' ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           TRAN            =SIMP(statut='f',typ='R',max=03),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+           b_angl_naut     =BLOC(condition = "ANGL_NAUT != None",
+             CENTRE          =SIMP(statut='f',typ='R',max=03),
+           ),
+         ),
+         RECO_GLOBAL     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+         ),
+         RECO_MAILLE     =FACT(statut='f',min=01,max='**',
+           MAILLE          =SIMP(statut='o',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='o',typ=grno,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="GEOMETRIQUE",into=("GEOMETRIQUE","NOEUD_A_NOEUD","INVERSE") ),
+           geometrique     =BLOC(condition = "OPTION == 'GEOMETRIQUE'",
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),
+         ),
+         DEFI_NOEUD      =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','NOEUD_INIT'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",),
+                                 fr="Renommage de tous les noeuds" ),
+           NOEUD_INIT      =SIMP(statut='f',typ=no,
+                                 fr="Renommage d un seul noeud"),                     
+           b_tout          =BLOC(condition = "TOUT != None",
+             PREFIXE         =SIMP(statut='f',typ='TXM' ),
+             INDEX           =SIMP(statut='o',typ='I',max='**'),
+           ),
+           b_noeud_init    =BLOC(condition = "NOEUD_INIT != None",
+             MAILLE          =SIMP(statut='o',typ=ma),
+             NOEUD_FIN       =SIMP(statut='o',typ=no),
+           ),        
+         ),
+         DEFI_GROUP_NO   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','MAILLE'),
+                AU_MOINS_UN('INDEX','GROUP_NO_FIN'),
+                   ENSEMBLE('GROUP_NO_INIT','GROUP_NO_FIN'),),
+#  la regle ancien catalogue AU_MOINS_UN__: ( INDEX , GROUP_NO_FIN ) incoherente avec doc U           
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",),
+                                 fr="Création de plusieurs groupes de noeuds" ),
+           MAILLE          =SIMP(statut='f',typ=ma,
+                                 fr="Création de plusieurs groupes de noeuds"),
+           GROUP_NO_INIT   =SIMP(statut='f',typ=grno,
+                                 fr="Création d un seul groupe de noeuds"),
+           PREFIXE         =SIMP(statut='f',typ='TXM' ),
+           INDEX           =SIMP(statut='f',typ='I',max='**'),
+           GROUP_NO_FIN    =SIMP(statut='f',typ=grno),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 28/11/2000   AUTEUR CIBHHLV L.VIVAN 
+DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
+                   fr="Définition des paramètres décrivant le comportement d un matériau",
+                   docu="U4.43.01-F",reentrant='n',
+       regles=(EXCLUS('ELAS','ELAS_FO','ELAS_FLUI','ELAS_ISTR','ELAS_ISTR_FO','ELAS_ORTH',
+                      'ELAS_ORTH_FO','ELAS_COQUE','ELAS_COQUE_FO',
+                     'SURF_ETAT_SATU','CAM_CLAY_THM','SURF_ETAT_NSAT'),
+               EXCLUS('THER','THER_FO','THER_ORTH','THER_NL'),
+               EXCLUS('ECRO_LINE','ECRO_LINE_FO'),
+               EXCLUS('TAHERI','TAHERI_FO'),
+               EXCLUS('ROUSSELIER','ROUSSELIER_FO'),
+               PRESENT_PRESENT('ROUSSELIER','TRACTION'),
+               PRESENT_PRESENT('ROUSSELIER_FO','TRACTION'),
+               EXCLUS('VMIS_CIN1_CHAB','VMIS_CIN1_CHAB_F'),
+               EXCLUS('VISCOCHAB','VISCOCHAB_FO'),
+               EXCLUS('POLY_CFC','POLY_CFC_FO'),
+               PRESENT_PRESENT('NORTON_HOFF','ELAS'),
+               EXCLUS('LEMAITRE','LEMAITRE_FO','ZIRC_CYRA2','ZIRC_EPRI'),
+               EXCLUS('OHNO','OHNO_FO'),
+               EXCLUS('LMARC','LMARC_FO'),
+               EXCLUS('VMIS_POUTRE','VMIS_POUTRE_FO'),
+               EXCLUS('VENDOCHAB','VENDOCHAB_FO'),
+               PRESENT_PRESENT('BPEL_BETON','ELAS'),
+               PRESENT_PRESENT('BPEL_ACIER','ELAS'),
+               EXCLUS('RCCM','RCCM_FO'),),
+#
+# comportement élastique
+#
+           ELAS            =FACT(statut='f',min=00,max=01,
+             E               =SIMP(statut='o',typ='R'),
+             NU              =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+             AMOR_ALPHA      =SIMP(statut='f',typ='R'),
+             AMOR_BETA       =SIMP(statut='f',typ='R'),
+             AMOR_HYST       =SIMP(statut='f',typ='R'),
+           ),
+           ELAS_FO         =FACT(statut='f',min=00,max=01,
+             E               =SIMP(statut='o',typ=fonction),
+             NU              =SIMP(statut='o',typ=fonction),
+             RHO             =SIMP(statut='f',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.),
+             ALPHA           =SIMP(statut='f',typ=fonction),
+             AMOR_ALPHA      =SIMP(statut='f',typ=fonction),
+             AMOR_BETA       =SIMP(statut='f',typ=fonction),
+             AMOR_HYST       =SIMP(statut='f',typ=fonction),
+             K_DESSIC        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             B_ENDOGE        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             VERI_P1         =SIMP(statut='f',typ='TXM',defaut="TEMP",into=("TEMP","INST",) ),
+             VERI_P2         =SIMP(statut='f',typ='TXM',defaut="INST",into=("TEMP","INST",) ),
+             VERI_P3         =SIMP(statut='f',typ='TXM',defaut="HYDR",into=("HYDR",) ),
+             VERI_P4         =SIMP(statut='f',typ='TXM',defaut="SECH",into=("SECH",) ),
+           ),
+           ELAS_FLUI       =FACT(statut='f',min=00,max=01,
+             E               =SIMP(statut='o',typ='R'),
+             NU              =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='o',typ='R'),
+             PROF_RHO_F_INT  =SIMP(statut='o',typ=fonction),
+             PROF_RHO_F_EXT  =SIMP(statut='o',typ=fonction),
+             COEF_MASS_AJOU  =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="ABSC",into=("ABSC",) ),
+           ),
+           ELAS_ISTR       =FACT(statut='f',min=00,max=01,
+             E_L             =SIMP(statut='o',typ='R'),
+             E_N             =SIMP(statut='o',typ='R'),
+             NU_LT           =SIMP(statut='o',typ='R'),
+             NU_LN           =SIMP(statut='o',typ='R'),
+             G_LN            =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA_L         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             ALPHA_N         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           ELAS_ISTR_FO    =FACT(statut='f',min=00,max=01,
+             E_L             =SIMP(statut='o',typ=fonction),
+             E_N             =SIMP(statut='o',typ=fonction),
+             NU_LT           =SIMP(statut='o',typ=fonction),
+             NU_LN           =SIMP(statut='o',typ=fonction),
+             G_LN            =SIMP(statut='o',typ=fonction),
+             RHO             =SIMP(statut='f',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.),
+             ALPHA_L         =SIMP(statut='f',typ=fonction),
+             ALPHA_N         =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='f',typ='TXM',defaut="TEMP",into=("TEMP","INST")),
+           ),
+           ELAS_ORTH       =FACT(statut='f',min=00,max=01,
+             E_L             =SIMP(statut='o',typ='R'),
+             E_T             =SIMP(statut='o',typ='R'),
+             E_N             =SIMP(statut='f',typ='R'),
+             NU_LT           =SIMP(statut='o',typ='R'),
+             NU_LN           =SIMP(statut='f',typ='R'),
+             NU_TN           =SIMP(statut='f',typ='R'),
+             G_LT            =SIMP(statut='o',typ='R'),
+             G_LN            =SIMP(statut='f',typ='R'),
+             G_TN            =SIMP(statut='f',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA_L         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             ALPHA_T         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             ALPHA_N         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             XT              =SIMP(statut='f',typ='R',defaut= 1. ),
+             XC              =SIMP(statut='f',typ='R',defaut= 1. ),
+             YT              =SIMP(statut='f',typ='R',defaut= 1. ),
+             YC              =SIMP(statut='f',typ='R',defaut= 1. ),
+             S_LT            =SIMP(statut='f',typ='R',defaut= 1. ),
+           ),
+           ELAS_ORTH_FO    =FACT(statut='f',min=00,max=01,
+             E_L             =SIMP(statut='o',typ=fonction),
+             E_T             =SIMP(statut='o',typ=fonction),
+             E_N             =SIMP(statut='o',typ=fonction),
+             NU_LT           =SIMP(statut='o',typ=fonction),
+             NU_LN           =SIMP(statut='o',typ=fonction),
+             NU_TN           =SIMP(statut='o',typ=fonction),
+             G_LT            =SIMP(statut='o',typ=fonction),
+             G_LN            =SIMP(statut='o',typ=fonction),
+             G_TN            =SIMP(statut='o',typ=fonction),
+             RHO             =SIMP(statut='f',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1. ),
+             ALPHA_L         =SIMP(statut='f',typ=fonction),
+             ALPHA_T         =SIMP(statut='f',typ=fonction),
+             ALPHA_N         =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='f',typ='TXM',defaut="TEMP",into=("TEMP","INST",) ),
+           ),
+           ELAS_THM        =FACT(statut='f',min=00,max=01,
+             RHO_S           =SIMP(statut='o',typ='R'),  
+             UN_SUR_KS       =SIMP(statut='o',typ='R'),  
+             E               =SIMP(statut='f',typ='R'),  
+             KB              =SIMP(statut='f',typ='R'),  
+             D_KB_T          =SIMP(statut='f',typ='R'),  
+             ALPHA_S         =SIMP(statut='f',typ='R'),  
+             ALPHA_D         =SIMP(statut='f',typ='R'),  
+           ),
+           SURF_ETAT_SATU  =FACT(statut='f',min=00,max=01,
+             E_CHAR          =SIMP(statut='o',typ='R'),  
+             E_DECHAR        =SIMP(statut='o',typ='R'),  
+             XN              =SIMP(statut='f',typ='R'),  
+             RF              =SIMP(statut='f',typ='R'),  
+             EV_KB           =SIMP(statut='f',typ='R'),  
+             EV_XM           =SIMP(statut='f',typ='R'),  
+             D_E_T           =SIMP(statut='f',typ='R'),  
+             ALPHA0          =SIMP(statut='f',typ='R'),  
+             ALPHA1          =SIMP(statut='f',typ='R'),  
+             ALPHA2          =SIMP(statut='f',typ='R'),  
+             ALPHA3          =SIMP(statut='f',typ='R'),  
+             ALPHA_S         =SIMP(statut='f',typ='R'),  
+             ANG_FRT         =SIMP(statut='o',typ='R'),  
+             COHE            =SIMP(statut='o',typ='R'),  
+             RESI_TRAC       =SIMP(statut='o',typ='R'),  
+           ),
+           CAM_CLAY_THM    =FACT(statut='f',min=00,max=01,
+             NU              =SIMP(statut='f',typ='R'),  
+             LAMBDA          =SIMP(statut='o',typ='R'),  
+             KAPA            =SIMP(statut='o',typ='R'),  
+             M               =SIMP(statut='f',typ='R'),  
+             PRES_CRIT       =SIMP(statut='f',typ='R'),  
+             GAMA            =SIMP(statut='o',typ='R'),  
+             A0_PC           =SIMP(statut='o',typ='R'),  
+             A1_PC           =SIMP(statut='f',typ='R'),  
+             A2_PC           =SIMP(statut='f',typ='R'),  
+             ALPHA0_PC       =SIMP(statut='f',typ='R'),  
+             ALPHA1_PC       =SIMP(statut='f',typ='R'),  
+             ALPHA2_PC       =SIMP(statut='f',typ='R'),  
+             ALPHA3_PC       =SIMP(statut='f',typ='R'),  
+             ALPHA_S         =SIMP(statut='f',typ='R'),  
+                         ),
+           SURF_ETAT_NSAT  =FACT(statut='f',min=00,max=01,
+             E_CHAR          =SIMP(statut='o',typ='R'),  
+             E_DECHAR        =SIMP(statut='o',typ='R'),  
+             XN              =SIMP(statut='f',typ='R'),  
+             RF              =SIMP(statut='f',typ='R'),  
+             EV_KB           =SIMP(statut='f',typ='R'),  
+             EV_XM           =SIMP(statut='f',typ='R'),  
+             EV_A            =SIMP(statut='f',typ='R'),  
+             EV_B            =SIMP(statut='f',typ='R'),  
+             EV_CT           =SIMP(statut='f',typ='R'),  
+             EV_SIGB         =SIMP(statut='f',typ='R'),  
+             D_E_T           =SIMP(statut='f',typ='R'),  
+             D_E_SUCC        =SIMP(statut='f',typ='R'),  
+             ANG_FRT         =SIMP(statut='o',typ='R'),  
+             COHE            =SIMP(statut='o',typ='R'),  
+             D_COEH_SUCC     =SIMP(statut='f',typ='R'),  
+             ANG_FRT_ULT     =SIMP(statut='f',typ='R'),  
+             SUCC_ULTM       =SIMP(statut='f',typ='R'),  
+             RESI_TRAC       =SIMP(statut='f',typ='R'),  
+             A_SURF_SATU     =SIMP(statut='f',typ='R'),  
+             B_SURF_SATU     =SIMP(statut='f',typ='R'),  
+             C_SURF_SATU     =SIMP(statut='f',typ='R'),  
+             D_SURF_SATU     =SIMP(statut='f',typ='R'),  
+           ),
+           ELAS_COQUE      =FACT(statut='f',min=00,max=01,
+             regles=(EXCLUS('MEMB_L','M_LLLL',),
+                     PRESENT_PRESENT('MEMB_L','MEMB_LT', 'MEMB_T','MEMB_G_LT','FLEX_L','FLEX_LT',
+                                     'FLEX_T','FLEX_G_LT','CISA_L','CISA_T',),
+                     PRESENT_PRESENT('M_LLLL','M_LLTT','M_LLLT','M_TTTT','M_TTLT','M_LTLT','F_LLLL',
+                                     'F_LLTT','F_LLLT','F_TTTT','F_TTLT','F_LTLT','MF_LLLL',
+                                     'MF_LLTT','MF_LLLT','MF_TTTT','MF_TTLT','MF_LTLT','MC_LLLZ',
+                                     'MC_LLTZ','MC_TTLZ','MC_TTTZ','MC_LTLZ','MC_LTTZ','FC_LLLZ',
+                                     'FC_LLTZ','FC_TTLZ','FC_TTTZ','FC_LTLZ','FC_LTTZ','C_LZLZ',
+                                     'C_LZTZ','C_TZTZ'),),
+             MEMB_L          =SIMP(statut='f',typ='R'),
+             MEMB_LT         =SIMP(statut='f',typ='R'),
+             MEMB_T          =SIMP(statut='f',typ='R'),
+             MEMB_G_LT       =SIMP(statut='f',typ='R'),
+             FLEX_L          =SIMP(statut='f',typ='R'),
+             FLEX_LT         =SIMP(statut='f',typ='R'),
+             FLEX_T          =SIMP(statut='f',typ='R'),
+             FLEX_G_LT       =SIMP(statut='f',typ='R'),
+             CISA_L          =SIMP(statut='f',typ='R'),
+             CISA_T          =SIMP(statut='f',typ='R'),
+             M_LLLL          =SIMP(statut='f',typ='R'),
+             M_LLTT          =SIMP(statut='f',typ='R'),
+             M_LLLT          =SIMP(statut='f',typ='R'),
+             M_TTTT          =SIMP(statut='f',typ='R'),
+             M_TTLT          =SIMP(statut='f',typ='R'),
+             M_LTLT          =SIMP(statut='f',typ='R'),
+             F_LLLL          =SIMP(statut='f',typ='R'),
+             F_LLTT          =SIMP(statut='f',typ='R'),
+             F_LLLT          =SIMP(statut='f',typ='R'),
+             F_TTTT          =SIMP(statut='f',typ='R'),
+             F_TTLT          =SIMP(statut='f',typ='R'),
+             F_LTLT          =SIMP(statut='f',typ='R'),
+             MF_LLLL         =SIMP(statut='f',typ='R'),
+             MF_LLTT         =SIMP(statut='f',typ='R'),
+             MF_LLLT         =SIMP(statut='f',typ='R'),
+             MF_TTTT         =SIMP(statut='f',typ='R'),
+             MF_TTLT         =SIMP(statut='f',typ='R'),
+             MF_LTLT         =SIMP(statut='f',typ='R'),
+             MC_LLLZ         =SIMP(statut='f',typ='R'),
+             MC_LLTZ         =SIMP(statut='f',typ='R'),
+             MC_TTLZ         =SIMP(statut='f',typ='R'),
+             MC_TTTZ         =SIMP(statut='f',typ='R'),
+             MC_LTLZ         =SIMP(statut='f',typ='R'),
+             MC_LTTZ         =SIMP(statut='f',typ='R'),
+             FC_LLLZ         =SIMP(statut='f',typ='R'),
+             FC_LLTZ         =SIMP(statut='f',typ='R'),
+             FC_TTLZ         =SIMP(statut='f',typ='R'),
+             FC_TTTZ         =SIMP(statut='f',typ='R'),
+             FC_LTLZ         =SIMP(statut='f',typ='R'),
+             FC_LTTZ         =SIMP(statut='f',typ='R'),
+             C_LZLZ          =SIMP(statut='f',typ='R'),
+             C_LZTZ          =SIMP(statut='f',typ='R'),
+             C_TZTZ          =SIMP(statut='f',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+           ),
+           ELAS_COQUE_FO   =FACT(statut='f',min=00,max=01,
+             regles=(EXCLUS('MEMB_L','M_LLLL',),
+                     PRESENT_PRESENT('MEMB_L','MEMB_LT','MEMB_T','MEMB_G_LT','FLEX_L','FLEX_LT',
+                                     'FLEX_T','FLEX_G_LT','CISA_L','CISA_T',),
+                     PRESENT_PRESENT('M_LLLL','M_LLTT','M_LLLT','M_TTTT','M_TTLT','M_LTLT','F_LLLL',
+                                     'F_LLTT','F_LLLT','F_TTTT','F_TTLT','F_LTLT','MF_LLLL','MF_LLTT',
+                                     'MF_LLLT','MF_TTTT','MF_TTLT','MF_LTLT','MC_LLLZ','MC_LLTZ',
+                                     'MC_TTLZ','MC_TTTZ','MC_LTLZ','MC_LTTZ','FC_LLLZ','FC_LLTZ',
+                                     'FC_TTLZ','FC_TTTZ','FC_LTLZ','FC_LTTZ','C_LZLZ','C_LZTZ','C_TZTZ'),),
+             MEMB_L          =SIMP(statut='f',typ=fonction),
+             MEMB_LT         =SIMP(statut='f',typ=fonction),
+             MEMB_T          =SIMP(statut='f',typ=fonction),
+             MEMB_G_LT       =SIMP(statut='f',typ=fonction),
+             FLEX_L          =SIMP(statut='f',typ=fonction),
+             FLEX_LT         =SIMP(statut='f',typ=fonction),
+             FLEX_T          =SIMP(statut='f',typ=fonction),
+             FLEX_G_LT       =SIMP(statut='f',typ=fonction),
+             CISA_L          =SIMP(statut='f',typ=fonction),
+             CISA_T          =SIMP(statut='f',typ=fonction),
+             M_LLLL          =SIMP(statut='f',typ=fonction),
+             M_LLTT          =SIMP(statut='f',typ=fonction),
+             M_LLLT          =SIMP(statut='f',typ=fonction),
+             M_TTTT          =SIMP(statut='f',typ=fonction),
+             M_TTLT          =SIMP(statut='f',typ=fonction),
+             M_LTLT          =SIMP(statut='f',typ=fonction),
+             F_LLLL          =SIMP(statut='f',typ=fonction),
+             F_LLTT          =SIMP(statut='f',typ=fonction),
+             F_LLLT          =SIMP(statut='f',typ=fonction),
+             F_TTTT          =SIMP(statut='f',typ=fonction),
+             F_TTLT          =SIMP(statut='f',typ=fonction),
+             F_LTLT          =SIMP(statut='f',typ=fonction),
+             MF_LLLL         =SIMP(statut='f',typ=fonction),
+             MF_LLTT         =SIMP(statut='f',typ=fonction),
+             MF_LLLT         =SIMP(statut='f',typ=fonction),
+             MF_TTTT         =SIMP(statut='f',typ=fonction),
+             MF_TTLT         =SIMP(statut='f',typ=fonction),
+             MF_LTLT         =SIMP(statut='f',typ=fonction),
+             MC_LLLZ         =SIMP(statut='f',typ=fonction),
+             MC_LLTZ         =SIMP(statut='f',typ=fonction),
+             MC_TTLZ         =SIMP(statut='f',typ=fonction),
+             MC_TTTZ         =SIMP(statut='f',typ=fonction),
+             MC_LTLZ         =SIMP(statut='f',typ=fonction),
+             MC_LTTZ         =SIMP(statut='f',typ=fonction),
+             FC_LLLZ         =SIMP(statut='f',typ=fonction),
+             FC_LLTZ         =SIMP(statut='f',typ=fonction),
+             FC_TTLZ         =SIMP(statut='f',typ=fonction),
+             FC_TTTZ         =SIMP(statut='f',typ=fonction),
+             FC_LTLZ         =SIMP(statut='f',typ=fonction),
+             FC_LTTZ         =SIMP(statut='f',typ=fonction),
+             C_LZLZ          =SIMP(statut='f',typ=fonction),
+             C_LZTZ          =SIMP(statut='f',typ=fonction),
+             C_TZTZ          =SIMP(statut='f',typ=fonction),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='f',typ='TXM',defaut="TEMP",into=("TEMP","INST") ),
+           ),
+           APPUI_ELAS      =FACT(statut='f',min=00,max=01,
+             E_N             =SIMP(statut='o',typ='R'),
+             E_TAN           =SIMP(statut='f',typ='R',defaut= 0.E+0),
+           ),
+           CABLE           =FACT(statut='f',min=00,max=01,
+             E               =SIMP(statut='o',typ='R'),
+             EC_SUR_E        =SIMP(statut='f',typ='R',defaut= 1.E-4 ),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+             AMOR_ALPHA      =SIMP(statut='f',typ='R'),
+             AMOR_BETA       =SIMP(statut='f',typ='R'),
+           ),
+#
+# comportement mécanique non linéaire
+#
+           TRACTION        =FACT(statut='f',min=00,max=01,
+             SIGM            =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P3         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
+             VERI_P4         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
+           ),
+           ECRO_LINE       =FACT(statut='f',min=00,max=01,
+             D_SIGM_EPSI     =SIMP(statut='o',typ='R'),
+             SY              =SIMP(statut='o',typ='R'),
+           ),
+           ECRO_LINE_FO    =FACT(statut='f',min=00,max=01,
+             D_SIGM_EPSI     =SIMP(statut='o',typ=fonction),
+             SY              =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           PRAGER          =FACT(statut='f',min=00,max=01,
+             C               =SIMP(statut='o',typ='R'),
+           ),
+           PRAGER_FO       =FACT(statut='f',min=00,max=01,
+             C               =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           ECRO_FLEJOU     =FACT(statut='f',min=00,max=01,
+             EP              =SIMP(statut='o',typ='R'),
+             SY              =SIMP(statut='o',typ='R'),
+             SU              =SIMP(statut='o',typ='R'),
+             PUISS           =SIMP(statut='o',typ='R'),
+           ),
+           TAHERI          =FACT(statut='f',min=00,max=01,
+             R_0             =SIMP(statut='o',typ='R'),
+             ALPHA           =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             A               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             C1              =SIMP(statut='o',typ='R'),
+             C_INF           =SIMP(statut='o',typ='R'),
+             S               =SIMP(statut='o',typ='R'),
+           ),
+           TAHERI_FO       =FACT(statut='f',min=00,max=01,
+             R_0             =SIMP(statut='o',typ=fonction),
+             ALPHA           =SIMP(statut='o',typ=fonction),
+             M               =SIMP(statut='o',typ=fonction),
+             A               =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             C1              =SIMP(statut='o',typ=fonction),
+             C_INF           =SIMP(statut='o',typ=fonction),
+             S               =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           ROUSSELIER      =FACT(statut='f',min=00,max=01,
+             D               =SIMP(statut='o',typ='R'),
+             SIGM_1          =SIMP(statut='o',typ='R'),
+             PORO_INIT       =SIMP(statut='o',typ='R'),
+             PORO_CRIT       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_ACCE       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_LIMI       =SIMP(statut='f',typ='R',defaut= 1. ),
+             D_SIGM_EPSI_NORM=SIMP(statut='f',typ='R',defaut= 1. ),
+           ),
+           ROUSSELIER_FO   =FACT(statut='f',min=00,max=01,
+             D               =SIMP(statut='o',typ=fonction),
+             SIGM_1          =SIMP(statut='o',typ=fonction),
+             PORO_INIT       =SIMP(statut='o',typ=fonction),
+             PORO_CRIT       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_ACCE       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_LIMI       =SIMP(statut='f',typ='R',defaut= 1. ),
+             D_SIGM_EPSI_NORM=SIMP(statut='f',typ='R',defaut= 1. ),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           CHABOCHE        =FACT(statut='f',min=00,max=01,
+             R_I             =SIMP(statut='o',typ='R'),
+             R_0             =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             W               =SIMP(statut='o',typ='R'),
+             A1              =SIMP(statut='o',typ='R'),
+             A2              =SIMP(statut='o',typ='R'),
+             C1              =SIMP(statut='o',typ='R'),
+             C2              =SIMP(statut='o',typ='R'),
+           ),
+           VMIS_CIN1_CHAB  =FACT(statut='f',min=00,max=01,
+             R_0             =SIMP(statut='o',typ='R'),  
+             R_I             =SIMP(statut='f',typ='R'),  
+             B               =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+             C_I             =SIMP(statut='o',typ='R'),  
+             K               =SIMP(statut='f',typ='R',defaut= 1.0E+0),  
+             W               =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+             G_0             =SIMP(statut='o',typ='R'),  
+             A_I             =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+           ),
+           VMIS_CIN1_CHAB_F  =FACT(statut='f',min=00,max=01,
+             R_0             =SIMP(statut='o',typ=fonction),
+             R_I             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             C_I             =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             W               =SIMP(statut='o',typ=fonction),
+             G_0             =SIMP(statut='o',typ=fonction),
+             A_I             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           VMIS_CIN2_CHAB  =FACT(statut='f',min=00,max=01,
+             R_0             =SIMP(statut='o',typ='R'),  
+             R_I             =SIMP(statut='f',typ='R'),  
+             B               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+             C1_I            =SIMP(statut='o',typ='R'),  
+             C2_I            =SIMP(statut='o',typ='R'),  
+             K               =SIMP(statut='f',typ='R',defaut= 1.),  
+             W               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+             G1_0            =SIMP(statut='o',typ='R'),  
+             G2_0            =SIMP(statut='o',typ='R'),  
+             A_I             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),  
+           ),
+           VMIS_CIN2_CHAB_F  =FACT(statut='f',min=00,max=01,
+             R_0             =SIMP(statut='o',typ=fonction),
+             R_I             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             C1_I            =SIMP(statut='o',typ=fonction),
+             C2_I            =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             W               =SIMP(statut='o',typ=fonction),
+             G1_0            =SIMP(statut='o',typ=fonction),
+             G2_0            =SIMP(statut='o',typ=fonction),
+             A_I             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           VISCOCHAB       =FACT(statut='f',min=00,max=01,
+             K_0             =SIMP(statut='o',typ='R'),
+             A_K             =SIMP(statut='o',typ='R'),
+             A_R             =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             ALP             =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             M_R             =SIMP(statut='o',typ='R'),
+             G_R             =SIMP(statut='o',typ='R'),
+             MU              =SIMP(statut='o',typ='R'),
+             Q_M             =SIMP(statut='o',typ='R'),
+             Q_0             =SIMP(statut='o',typ='R'),
+             QR_0            =SIMP(statut='o',typ='R'),
+             ETA             =SIMP(statut='o',typ='R'),
+             C1              =SIMP(statut='o',typ='R'),
+             M_1             =SIMP(statut='o',typ='R'),
+             D1              =SIMP(statut='o',typ='R'),
+             G_X1            =SIMP(statut='o',typ='R'),
+             G1_0            =SIMP(statut='o',typ='R'),
+             C2              =SIMP(statut='o',typ='R'),
+             M_2             =SIMP(statut='o',typ='R'),
+             D2              =SIMP(statut='o',typ='R'),
+             G_X2            =SIMP(statut='o',typ='R'),
+             G2_0            =SIMP(statut='o',typ='R'),
+             A_I             =SIMP(statut='o',typ='R'),
+           ),
+           VISCOCHAB_FO    =FACT(statut='f',min=00,max=01,
+             K_0             =SIMP(statut='o',typ=fonction),
+             A_K             =SIMP(statut='o',typ=fonction),
+             A_R             =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             N               =SIMP(statut='o',typ=fonction),
+             ALP             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             M_R             =SIMP(statut='o',typ=fonction),
+             G_R             =SIMP(statut='o',typ=fonction),
+             MU              =SIMP(statut='o',typ=fonction),
+             Q_M             =SIMP(statut='o',typ=fonction),
+             Q_0             =SIMP(statut='o',typ=fonction),
+             QR_0            =SIMP(statut='o',typ=fonction),
+             ETA             =SIMP(statut='o',typ=fonction),
+             C1              =SIMP(statut='o',typ=fonction),
+             M_1             =SIMP(statut='o',typ=fonction),
+             D1              =SIMP(statut='o',typ=fonction),
+             G_X1            =SIMP(statut='o',typ=fonction),
+             G1_0            =SIMP(statut='o',typ=fonction),
+             C2              =SIMP(statut='o',typ=fonction),
+             M_2             =SIMP(statut='o',typ=fonction),
+             D2              =SIMP(statut='o',typ=fonction),
+             G_X2            =SIMP(statut='o',typ=fonction),
+             G2_0            =SIMP(statut='o',typ=fonction),
+             A_I             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           POLY_CFC        =FACT(statut='f',min=00,max=01,
+             TEXTURE         =SIMP(statut='o',typ=(tabl_texture) ),
+             DL              =SIMP(statut='f',typ='R'),
+             DA              =SIMP(statut='f',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             TAU_0           =SIMP(statut='o',typ='R'),
+             Q1              =SIMP(statut='o',typ='R'),
+             B1              =SIMP(statut='o',typ='R'),
+             HL              =SIMP(statut='o',typ='R'),
+             Q2              =SIMP(statut='o',typ='R'),
+             B2              =SIMP(statut='o',typ='R'),
+             C1              =SIMP(statut='o',typ='R'),
+             D1              =SIMP(statut='o',typ='R'),
+             C2              =SIMP(statut='o',typ='R'),
+           ),
+           POLY_CFC_FO     =FACT(statut='f',min=00,max=01,
+             TEXTURE         =SIMP(statut='o',typ=(tabl_texture) ),
+             DL              =SIMP(statut='o',typ=fonction),
+             DA              =SIMP(statut='o',typ=fonction),
+             N               =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             TAU_0           =SIMP(statut='o',typ=fonction),
+             Q1              =SIMP(statut='o',typ=fonction),
+             B1              =SIMP(statut='o',typ=fonction),
+             HL              =SIMP(statut='o',typ=fonction),
+             Q2              =SIMP(statut='o',typ=fonction),
+             B2              =SIMP(statut='o',typ=fonction),
+             C1              =SIMP(statut='o',typ=fonction),
+             D1              =SIMP(statut='o',typ=fonction),
+             C2              =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           NORTON_HOFF     =FACT(statut='f',min=00,max=01,
+             N               =SIMP(statut='o',typ='R'),
+             SY              =SIMP(statut='o',typ='R'),
+           ),
+           LEMAITRE        =FACT(statut='f',min=00,max=01,
+             N               =SIMP(statut='o',typ='R'),
+             UN_SUR_K        =SIMP(statut='o',typ='R'),
+             UN_SUR_M        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             QSR_K           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           ZIRC_CYRA2      =FACT(statut='f',min=00,max=01,
+             EPSI_FAB        =SIMP(statut='o',typ=fonction),
+             TEMP_RECUIT     =SIMP(statut='o',typ=fonction),
+             FLUX_PHI        =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
+           ),
+           ZIRC_EPRI       =FACT(statut='f',min=00,max=01,
+             FLUX_PHI        =SIMP(statut='o',typ='R'),
+             R_P             =SIMP(statut='o',typ='R'),
+             THETA_MAX       =SIMP(statut='o',typ='R'),
+           ),
+           LEMAITRE_FO     =FACT(statut='f',min=00,max=01,
+             N               =SIMP(statut='o',typ=fonction),
+             UN_SUR_K        =SIMP(statut='o',typ=fonction),
+             UN_SUR_M        =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           GRAN_IRRA       =FACT(statut='f',min=00,max=01,
+             FLUX_L          =SIMP(statut='o',typ=fonction),
+             FLUX_TN         =SIMP(statut='o',typ=fonction),
+             FONC_MULT       =SIMP(statut='f',typ=fonction),
+             A               =SIMP(statut='o',typ='R'),
+             S               =SIMP(statut='f',typ='R'),
+             VERI_P1         =SIMP(statut='f',typ='TXM',defaut="X",into=("X",) ),
+             VERI_P2         =SIMP(statut='f',typ='TXM',defaut="Y",into=("Y",) ),
+             VERI_P3         =SIMP(statut='f',typ='TXM',defaut="Z",into=("Z",) ),
+             VERI_P4         =SIMP(statut='f',typ='TXM',defaut="INST",into=("INST",) ),
+           ),
+           OHNO            =FACT(statut='f',min=00,max=01,
+             R_I             =SIMP(statut='o',typ='R'),
+             R_0             =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             PHI             =SIMP(statut='o',typ='R'),
+             A1              =SIMP(statut='o',typ='R'),
+             A2              =SIMP(statut='o',typ='R'),
+             A3              =SIMP(statut='o',typ='R'),
+             A4              =SIMP(statut='o',typ='R'),
+             A5              =SIMP(statut='o',typ='R'),
+             GAMMA1          =SIMP(statut='o',typ='R'),
+             GAMMA2          =SIMP(statut='o',typ='R'),
+             GAMMA3          =SIMP(statut='o',typ='R'),
+             GAMMA4          =SIMP(statut='o',typ='R'),
+             GAMMA5          =SIMP(statut='o',typ='R'),
+             M1              =SIMP(statut='o',typ='R'),
+             M2              =SIMP(statut='o',typ='R'),
+             M3              =SIMP(statut='o',typ='R'),
+             M4              =SIMP(statut='o',typ='R'),
+             M5              =SIMP(statut='o',typ='R'),
+                           ),
+           OHNO_FO         =FACT(statut='f',min=00,max=01,
+             R_I             =SIMP(statut='o',typ=fonction),
+             R_0             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             PHI             =SIMP(statut='o',typ=fonction),
+             A1              =SIMP(statut='o',typ=fonction),
+             A2              =SIMP(statut='o',typ=fonction),
+             A3              =SIMP(statut='o',typ=fonction),
+             A4              =SIMP(statut='o',typ=fonction),
+             A5              =SIMP(statut='o',typ=fonction),
+             GAMMA1          =SIMP(statut='o',typ=fonction),
+             GAMMA2          =SIMP(statut='o',typ=fonction),
+             GAMMA3          =SIMP(statut='o',typ=fonction),
+             GAMMA4          =SIMP(statut='o',typ=fonction),
+             GAMMA5          =SIMP(statut='o',typ=fonction),
+             M1              =SIMP(statut='o',typ=fonction),
+             M2              =SIMP(statut='o',typ=fonction),
+             M3              =SIMP(statut='o',typ=fonction),
+             M4              =SIMP(statut='o',typ=fonction),
+             M5              =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           LMARC           =FACT(statut='f',min=00,max=01,
+             DE_0            =SIMP(statut='o',typ='R'),
+             R_0             =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             Y_I             =SIMP(statut='o',typ='R'),
+             Y_0             =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             A_0             =SIMP(statut='o',typ='R'),
+             RM              =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             P               =SIMP(statut='o',typ='R'),
+             P1              =SIMP(statut='o',typ='R'),
+             P2              =SIMP(statut='o',typ='R'),
+             M11             =SIMP(statut='o',typ='R'),
+             M22             =SIMP(statut='o',typ='R'),
+             M33             =SIMP(statut='o',typ='R'),
+             M66             =SIMP(statut='o',typ='R'),
+             N11             =SIMP(statut='o',typ='R'),
+             N22             =SIMP(statut='o',typ='R'),
+             N33             =SIMP(statut='o',typ='R'),
+             N66             =SIMP(statut='o',typ='R'),
+             Q11             =SIMP(statut='o',typ='R'),
+             Q22             =SIMP(statut='o',typ='R'),
+             Q33             =SIMP(statut='o',typ='R'),
+             Q66             =SIMP(statut='o',typ='R'),
+             R11             =SIMP(statut='o',typ='R'),
+             R22             =SIMP(statut='o',typ='R'),
+             R33             =SIMP(statut='o',typ='R'),
+             R66             =SIMP(statut='o',typ='R'),
+           ),
+           LMARC_FO        =FACT(statut='f',min=00,max=01,
+             DE_0            =SIMP(statut='o',typ=fonction),
+             R_0             =SIMP(statut='o',typ=fonction),
+             N               =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             Y_I             =SIMP(statut='o',typ=fonction),
+             Y_0             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             A_0             =SIMP(statut='o',typ=fonction),
+             RM              =SIMP(statut='o',typ=fonction),
+             M               =SIMP(statut='o',typ=fonction),
+             P               =SIMP(statut='o',typ=fonction),
+             P1              =SIMP(statut='o',typ=fonction),
+             P2              =SIMP(statut='o',typ=fonction),
+             M11             =SIMP(statut='o',typ=fonction),
+             M22             =SIMP(statut='o',typ=fonction),
+             M33             =SIMP(statut='o',typ=fonction),
+             M66             =SIMP(statut='o',typ=fonction),
+             N11             =SIMP(statut='o',typ=fonction),
+             N22             =SIMP(statut='o',typ=fonction),
+             N33             =SIMP(statut='o',typ=fonction),
+             N66             =SIMP(statut='o',typ=fonction),
+             Q11             =SIMP(statut='o',typ=fonction),
+             Q22             =SIMP(statut='o',typ=fonction),
+             Q33             =SIMP(statut='o',typ=fonction),
+             Q66             =SIMP(statut='o',typ=fonction),
+             R11             =SIMP(statut='o',typ=fonction),
+             R22             =SIMP(statut='o',typ=fonction),
+             R33             =SIMP(statut='o',typ=fonction),
+             R66             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           VMIS_POUTRE     =FACT(statut='f',min=00,max=01,
+             NP              =SIMP(statut='o',typ='R'),
+             MEY             =SIMP(statut='o',typ='R'),
+             MPY             =SIMP(statut='o',typ='R'),
+             CAY             =SIMP(statut='o',typ='R'),
+             CBY             =SIMP(statut='o',typ='R'),
+             MEZ             =SIMP(statut='o',typ='R'),
+             MPZ             =SIMP(statut='o',typ='R'),
+             CAZ             =SIMP(statut='o',typ='R'),
+             CBZ             =SIMP(statut='o',typ='R'),
+             MPX             =SIMP(statut='o',typ='R'),
+           ),
+           VMIS_POUTRE_FO  =FACT(statut='f',min=00,max=01,
+             NP              =SIMP(statut='o',typ=fonction),
+             MEY             =SIMP(statut='o',typ=fonction),
+             MPY             =SIMP(statut='o',typ=fonction),
+             CAY             =SIMP(statut='o',typ=fonction),
+             CBY             =SIMP(statut='o',typ=fonction),
+             MEZ             =SIMP(statut='o',typ=fonction),
+             MPZ             =SIMP(statut='o',typ=fonction),
+             CAZ             =SIMP(statut='o',typ=fonction),
+             CBZ             =SIMP(statut='o',typ=fonction),
+             MPX             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           ARME            =FACT(statut='f',min=00,max=01,
+             KYE             =SIMP(statut='o',typ='R'),
+             DLE             =SIMP(statut='o',typ='R'),
+             KYP             =SIMP(statut='o',typ='R'),
+             DLP             =SIMP(statut='o',typ='R'),
+             KYG             =SIMP(statut='o',typ='R'),
+           ),
+           ASSE_CORN       =FACT(statut='f',min=00,max=01,
+             NU_1            =SIMP(statut='o',typ='R'),
+             MU_1            =SIMP(statut='o',typ='R'),
+             DXU_1           =SIMP(statut='o',typ='R'),
+             DRYU_1          =SIMP(statut='o',typ='R'),
+             C_1             =SIMP(statut='o',typ='R'),
+             NU_2            =SIMP(statut='o',typ='R'),
+             MU_2            =SIMP(statut='o',typ='R'),
+             DXU_2           =SIMP(statut='o',typ='R'),
+             DRYU_2          =SIMP(statut='o',typ='R'),
+             C_2             =SIMP(statut='o',typ='R'),
+             KY              =SIMP(statut='o',typ='R'),
+             KZ              =SIMP(statut='o',typ='R'),
+             KRX             =SIMP(statut='o',typ='R'),
+             KRZ             =SIMP(statut='o',typ='R'),
+           ),
+           DIS_CONTACT     =FACT(statut='f',min=00,max=01,
+             regles=(EXCLUS('RIGI_N_FO','RIGI_N_IRRA'),),
+             RIGI_NOR        =SIMP(statut='f',typ='R' ),
+             DIST_1          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             DIST_2          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             RIGI_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             AMOR_NOR        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             AMOR_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             JEU             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             KT_ULTM         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+             EFFO_N_INIT     =SIMP(statut='f',typ='R'),
+             RIGI_N_FO       =SIMP(statut='f',typ=fonction),
+             RIGI_N_IRRA     =SIMP(statut='f',typ=fonction),
+             RELA_MZ         =SIMP(statut='f',typ=fonction),
+             C_PRAGER_MZ     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="DRZ",into=("DRZ",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
+           ),
+           NADAI_B         =FACT(statut='f',min=00,max=01,
+             F_C             =SIMP(statut='o',typ='R'),
+             F_T             =SIMP(statut='o',typ='R'),
+             CRIT_E_C        =SIMP(statut='o',typ='R'),
+             EPSP_P_C        =SIMP(statut='o',typ='R'),
+             EPSP_R_C        =SIMP(statut='o',typ='R'),
+             EPSI_R_T        =SIMP(statut='o',typ='R'),
+             FAC_T_C         =SIMP(statut='o',typ='R'),
+           ),
+           BETON_DOUBLE_DP =FACT(statut='f',min=00,max=01,
+             F_C             =SIMP(statut='o',typ=fonction),
+             F_T             =SIMP(statut='o',typ=fonction),
+             COEF_BIAX       =SIMP(statut='o',typ=fonction),
+             ENER_COMP_RUPT  =SIMP(statut='o',typ=fonction),
+             ENER_TRAC_RUPT  =SIMP(statut='o',typ=fonction),
+             COEF_ELAS_COMP  =SIMP(statut='o',typ='R'),
+             ECRO_COMP_P_PIC =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","PARABOLE") ),
+             ECRO_TRAC_P_PIC =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","EXPONENT") ),
+             VERI_P1         =SIMP(statut='f',typ='TXM',defaut="TEMP",into=("TEMP","INST",) ),
+             VERI_P2         =SIMP(statut='f',typ='TXM',defaut="INST",into=("TEMP","INST",) ),
+             VERI_P3         =SIMP(statut='f',typ='TXM',defaut="HYDR",into=("HYDR",) ),
+             VERI_P4         =SIMP(statut='f',typ='TXM',defaut="SECH",into=("SECH",) ),
+           ),
+           VENDOCHAB       =FACT(statut='f',min=00,max=01,
+             S_VP            =SIMP(statut='o',typ='R'),
+             SEDVP1          =SIMP(statut='o',typ='R'),
+             SEDVP2          =SIMP(statut='o',typ='R'),
+             N_VP            =SIMP(statut='o',typ='R'),
+             M_VP            =SIMP(statut='o',typ='R'),
+             K_VP            =SIMP(statut='o',typ='R'),
+             R_D             =SIMP(statut='o',typ='R'),
+             A_D             =SIMP(statut='o',typ='R'),
+             K_D             =SIMP(statut='o',typ='R'),
+           ),
+           VENDOCHAB_FO    =FACT(statut='f',min=00,max=01,
+             S_VP            =SIMP(statut='o',typ=fonction),
+             SEDVP1          =SIMP(statut='o',typ=fonction),
+             SEDVP2          =SIMP(statut='o',typ=fonction),
+             N_VP            =SIMP(statut='o',typ=fonction),
+             M_VP            =SIMP(statut='o',typ=fonction),
+             K_VP            =SIMP(statut='o',typ=fonction),
+             R_D             =SIMP(statut='o',typ=fonction),
+             A_D             =SIMP(statut='o',typ=fonction),
+             K_D             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='f',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P2         =SIMP(statut='f',typ='TXM',defaut="X",into=("X",) ),
+           ),
+           PINTO_MENEGOTTO =FACT(statut='f',min=00,max=01,
+             SY              =SIMP(statut='o',typ='R'),
+             EPSI_ULTM       =SIMP(statut='o',typ='R'),
+             SIGM_ULTM       =SIMP(statut='o',typ='R'),
+             ELAN            =SIMP(statut='f',typ='R',defaut= 4. ),
+             EPSP_HARD       =SIMP(statut='o',typ='R'),
+             R_PM            =SIMP(statut='f',typ='R',defaut= 20. ),
+             EP_SUR_E        =SIMP(statut='f',typ='R'),
+             A1_PM           =SIMP(statut='f',typ='R',defaut= 18.5 ),
+             A2_PM           =SIMP(statut='f',typ='R',defaut= 0.15 ),
+             A6_PM           =SIMP(statut='f',typ='R',defaut= 620. ),
+             C_PM            =SIMP(statut='f',typ='R',defaut= 0.5 ),
+             A_PM            =SIMP(statut='f',typ='R',defaut= 6.0E-3 ),
+           ),
+           BPEL_BETON      =FACT(statut='f',min=00,max=01,
+             PERT_FLUA       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PERT_RETR       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           BPEL_ACIER      =FACT(statut='f',min=00,max=01,
+             RELAX_1000      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             MU0_RELAX       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             SY              =SIMP(statut='o',typ='R'),
+             FROT_COURB      =SIMP(statut='o',typ='R'),
+             FROT_LINE       =SIMP(statut='o',typ='R'),
+           ),
+           CJS             =FACT(statut='f',min=00,max=01,
+             regles=(ENSEMBLE('B_CJS','C_CJS','MU_CJS','PCO',),
+                     ENSEMBLE('N_CJS','KP','RC',),
+                     PRESENT_ABSENT('A_CJS','B_CJS',),
+                     PRESENT_PRESENT('A_CJS','N_CJS',),
+                     PRESENT_PRESENT('B_CJS','N_CJS', ),),
+             BETA_CJS        =SIMP(statut='o',typ='R'),
+             RM              =SIMP(statut='o',typ='R'),
+             N_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             KP              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             RC              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             A_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             B_CJS           =SIMP(statut='f',typ='R',defaut= 1.0E+25 ),
+             C_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             GAMMA_CJS       =SIMP(statut='o',typ='R'),
+             MU_CJS          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PCO             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PA              =SIMP(statut='o',typ='R'),
+             Q_INIT          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             R_INIT          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           ECRO_ASYM_LINE  =FACT(statut='f',min=00,max=01,
+             DC_SIGM_EPSI    =SIMP(statut='o',typ='R'),
+             SY_C            =SIMP(statut='o',typ='R'),
+             DT_SIGM_EPSI    =SIMP(statut='o',typ='R'),
+             SY_T            =SIMP(statut='o',typ='R'),
+           ),
+           GRANGER_FP      =FACT(statut='f',min=00,max=01,
+             J1              =SIMP(statut='f',typ='R'),
+             J2              =SIMP(statut='f',typ='R'),
+             J3              =SIMP(statut='f',typ='R'),
+             J4              =SIMP(statut='f',typ='R'),
+             J5              =SIMP(statut='f',typ='R'),
+             J6              =SIMP(statut='f',typ='R'),
+             J7              =SIMP(statut='f',typ='R'),
+             J8              =SIMP(statut='f',typ='R'),
+             TAUX_1          =SIMP(statut='f',typ='R'),
+             TAUX_2          =SIMP(statut='f',typ='R'),
+             TAUX_3          =SIMP(statut='f',typ='R'),
+             TAUX_4          =SIMP(statut='f',typ='R'),
+             TAUX_5          =SIMP(statut='f',typ='R'),
+             TAUX_6          =SIMP(statut='f',typ='R'),
+             TAUX_7          =SIMP(statut='f',typ='R'),
+             TAUX_8          =SIMP(statut='f',typ='R'),
+             FONC_DESORP     =SIMP(statut='f',typ=fonction),
+             QSR_K           =SIMP(statut='f',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
+           ),
+           V_GRANGER_FP    =FACT(statut='f',min=00,max=01,
+             QSR_VEIL        =SIMP(statut='f',typ='R'),
+             FONC_V          =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
+           ),
+#
+# comportement thermique
+#
+           THER_NL         =FACT(statut='f',min=00,max=01,
+             regles=(UN_PARMI('BETA','RHO_CP', ),),
+             LAMBDA          =SIMP(statut='o',typ=fonction),
+             BETA            =SIMP(statut='f',typ=fonction),
+             RHO_CP          =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           THER_HYDR       =FACT(statut='f',min=00,max=01,
+             LAMBDA          =SIMP(statut='o',typ=fonction),
+             BETA            =SIMP(statut='f',typ=fonction),
+             AFFINITE        =SIMP(statut='o',typ=fonction),
+             CHALHYDR        =SIMP(statut='o',typ='R'),
+             QSR_K           =SIMP(statut='o',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("HYDR",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
+           ),
+           THER            =FACT(statut='f',min=00,max=01,
+             LAMBDA          =SIMP(statut='o',typ='R'),
+             RHO_CP          =SIMP(statut='f',typ='R'),
+           ),
+           THER_FO         =FACT(statut='f',min=00,max=01,
+             LAMBDA          =SIMP(statut='o',typ=fonction),
+             RHO_CP          =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
+           ),
+           THER_ORTH       =FACT(statut='f',min=00,max=01,
+             LAMBDA_L        =SIMP(statut='o',typ='R'),
+             LAMBDA_T        =SIMP(statut='o',typ='R'),
+             LAMBDA_N        =SIMP(statut='f',typ='R'),
+             RHO_CP          =SIMP(statut='f',typ='R'),
+           ),
+           THER_COQUE      =FACT(statut='f',min=00,max=01,
+             COND_LMM        =SIMP(statut='o',typ='R'),
+             COND_TMM        =SIMP(statut='o',typ='R'),
+             COND_LMP        =SIMP(statut='o',typ='R'),
+             COND_TMP        =SIMP(statut='o',typ='R'),
+             COND_LPP        =SIMP(statut='o',typ='R'),
+             COND_TPP        =SIMP(statut='o',typ='R'),
+             COND_LSI        =SIMP(statut='o',typ='R'),
+             COND_TSI        =SIMP(statut='o',typ='R'),
+             COND_NMM        =SIMP(statut='o',typ='R'),
+             COND_NMP        =SIMP(statut='o',typ='R'),
+             COND_NPP        =SIMP(statut='o',typ='R'),
+             COND_NSI        =SIMP(statut='o',typ='R'),
+             CMAS_MM         =SIMP(statut='f',typ='R'),
+             CMAS_MP         =SIMP(statut='f',typ='R'),
+             CMAS_PP         =SIMP(statut='f',typ='R'),
+             CMAS_SI         =SIMP(statut='f',typ='R'),
+           ),
+           THER_COQUE_FO   =FACT(statut='f',min=00,max=01,
+             COND_LMM        =SIMP(statut='o',typ=fonction),
+             COND_TMM        =SIMP(statut='o',typ=fonction),
+             COND_LMP        =SIMP(statut='o',typ=fonction),
+             COND_TMP        =SIMP(statut='o',typ=fonction),
+             COND_LPP        =SIMP(statut='o',typ=fonction),
+             COND_TPP        =SIMP(statut='o',typ=fonction),
+             COND_LSI        =SIMP(statut='o',typ=fonction),
+             COND_TSI        =SIMP(statut='o',typ=fonction),
+             COND_NMM        =SIMP(statut='o',typ=fonction),
+             COND_NMP        =SIMP(statut='o',typ=fonction),
+             COND_NPP        =SIMP(statut='o',typ=fonction),
+             COND_NSI        =SIMP(statut='o',typ=fonction),
+             CMAS_MM         =SIMP(statut='f',typ=fonction),
+             CMAS_MP         =SIMP(statut='f',typ=fonction),
+             CMAS_PP         =SIMP(statut='f',typ=fonction),
+             CMAS_SI         =SIMP(statut='f',typ=fonction),
+           ),
+           SECH_GRANGER    =FACT(statut='f',min=00,max=01,
+             A               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             QSR_K           =SIMP(statut='o',typ='R'),
+             TEMP_0_C        =SIMP(statut='o',typ='R'),
+           ),
+           SECH_MENSI      =FACT(statut='f',min=00,max=01,
+             A               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+           ),
+           SECH_BAZANT     =FACT(statut='f',min=00,max=01,
+             D1              =SIMP(statut='o',typ='R'),
+             ALPHA_BAZANT    =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             FONC_DESORP     =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           SECH_NAPPE      =FACT(statut='f',min=00,max=01,
+             FONCTION        =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TSEC",into=("TSEC",) ),
+           ),
+#
+# comportement métallurgique
+#
+           META_ACIER      =FACT(statut='f',min=00,max=01,
+             TRC             =SIMP(statut='o',typ=(tabl_trc) ),
+             AR3             =SIMP(statut='o',typ='R'),
+             ALPHA           =SIMP(statut='o',typ='R'),
+             MS0             =SIMP(statut='o',typ='R'),
+             AC1             =SIMP(statut='o',typ='R'),
+             AC3             =SIMP(statut='o',typ='R'),
+             TAUX_1          =SIMP(statut='o',typ='R'),
+             TAUX_3          =SIMP(statut='o',typ='R'),
+             LAMBDA0         =SIMP(statut='f',typ='R'),  
+             QSR_K           =SIMP(statut='f',typ='R'),  
+             D10             =SIMP(statut='f',typ='R'),  
+             WSR_K           =SIMP(statut='f',typ='R'),  
+           ),
+           META_ZIRC       =FACT(statut='f',min=00,max=01,
+             TDEQ            =SIMP(statut='o',typ='R'),  
+             N               =SIMP(statut='o',typ='R'),  
+             K               =SIMP(statut='o',typ='R'),  
+             TDC             =SIMP(statut='o',typ='R'),  
+             AC              =SIMP(statut='o',typ='R'),  
+             M               =SIMP(statut='o',typ='R'),  
+             QSR_K           =SIMP(statut='f',typ='R'),  
+             TDR             =SIMP(statut='o',typ='R'),  
+             AR              =SIMP(statut='o',typ='R'),  
+             BR              =SIMP(statut='o',typ='R'),  
+           ),
+           DURT_META       =FACT(statut='f',min=00,max=01,
+             F1_DURT         =SIMP(statut='o',typ='R'),  
+             F2_DURT         =SIMP(statut='o',typ='R'),  
+             F3_DURT         =SIMP(statut='o',typ='R'),  
+             F4_DURT         =SIMP(statut='o',typ='R'),  
+             C_DURT          =SIMP(statut='o',typ='R'),  
+           ),
+           ELAS_META       =FACT(statut='f',min=00,max=01,
+             E               =SIMP(statut='o',typ='R'),  
+             NU              =SIMP(statut='o',typ='R'),  
+             F_ALPHA         =SIMP(statut='o',typ='R'),  
+             C_ALPHA         =SIMP(statut='o',typ='R'),  
+             PHASE_REFE      =SIMP(statut='o',typ='TXM',into=("CHAUD","FROID")),
+             EPSF_EPSC_TREF  =SIMP(statut='o',typ='R'),  
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),  
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E+0),  
+             F1_SY           =SIMP(statut='f',typ='R'),  
+             F2_SY           =SIMP(statut='f',typ='R'),  
+             F3_SY           =SIMP(statut='f',typ='R'),  
+             F4_SY           =SIMP(statut='f',typ='R'),  
+             C_SY            =SIMP(statut='f',typ='R'),  
+             SY_MELANGE      =SIMP(statut='f',typ=fonction),
+             F1_S_VP         =SIMP(statut='f',typ='R'),  
+             F2_S_VP         =SIMP(statut='f',typ='R'),  
+             F3_S_VP         =SIMP(statut='f',typ='R'),  
+             F4_S_VP         =SIMP(statut='f',typ='R'),  
+             C_S_VP          =SIMP(statut='f',typ='R' ),  
+             S_VP_MELANGE    =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",)),
+           ),
+           ELAS_META_FO    =FACT(statut='f',min=00,max=01,
+             E               =SIMP(statut='o',typ=fonction),
+             NU              =SIMP(statut='o',typ=fonction),
+             F_ALPHA         =SIMP(statut='o',typ=fonction),
+             C_ALPHA         =SIMP(statut='o',typ=fonction),
+             PHASE_REFE      =SIMP(statut='o',typ='TXM',into=("CHAUD","FROID")),
+             EPSF_EPSC_TREF  =SIMP(statut='o',typ='R'),  
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),  
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E+0),  
+             F1_SY           =SIMP(statut='f',typ=fonction),
+             F2_SY           =SIMP(statut='f',typ=fonction),
+             F3_SY           =SIMP(statut='f',typ=fonction),
+             F4_SY           =SIMP(statut='f',typ=fonction),
+             C_SY            =SIMP(statut='f',typ=fonction),  
+             SY_MELANGE      =SIMP(statut='f',typ=fonction),
+             F1_S_VP         =SIMP(statut='f',typ=fonction),
+             F2_S_VP         =SIMP(statut='f',typ=fonction),
+             F3_S_VP         =SIMP(statut='f',typ=fonction),
+             F4_S_VP         =SIMP(statut='f',typ=fonction),
+             C_S_VP          =SIMP(statut='f',typ=fonction),  
+             S_VP_MELANGE    =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",)),
+           ),
+           META_ECRO_LINE  =FACT(statut='f',min=00,max=01,
+             F1_D_SIGM_EPSI  =SIMP(statut='f',typ=fonction),
+             F2_D_SIGM_EPSI  =SIMP(statut='f',typ=fonction),
+             F3_D_SIGM_EPSI  =SIMP(statut='f',typ=fonction),
+             F4_D_SIGM_EPSI  =SIMP(statut='f',typ=fonction),
+             C_D_SIGM_EPSI   =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           META_TRACTION   =FACT(statut='f',min=00,max=01,
+             SIGM_F1         =SIMP(statut='f',typ=fonction),
+             SIGM_F2         =SIMP(statut='f',typ=fonction),
+             SIGM_F3         =SIMP(statut='f',typ=fonction),
+             SIGM_F4         =SIMP(statut='f',typ=fonction),
+             SIGM_C          =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",)),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           META_VISC_FO    =FACT(statut='f',min=00,max=01,
+             F1_ETA          =SIMP(statut='f',typ=fonction),
+             F1_N            =SIMP(statut='f',typ=fonction),
+             F1_C            =SIMP(statut='f',typ=fonction),
+             F1_M            =SIMP(statut='f',typ=fonction),
+             F2_ETA          =SIMP(statut='f',typ=fonction),
+             F2_N            =SIMP(statut='f',typ=fonction),
+             F2_C            =SIMP(statut='f',typ=fonction),
+             F2_M            =SIMP(statut='f',typ=fonction),
+             F3_ETA          =SIMP(statut='f',typ=fonction),
+             F3_N            =SIMP(statut='f',typ=fonction),
+             F3_C            =SIMP(statut='f',typ=fonction),
+             F3_M            =SIMP(statut='f',typ=fonction),
+             F4_ETA          =SIMP(statut='f',typ=fonction),
+             F4_N            =SIMP(statut='f',typ=fonction),
+             F4_C            =SIMP(statut='f',typ=fonction),
+             F4_M            =SIMP(statut='f',typ=fonction),
+             C_ETA           =SIMP(statut='f',typ=fonction),
+             C_N             =SIMP(statut='f',typ=fonction),
+             C_C             =SIMP(statut='f',typ=fonction),
+             C_M             =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           META_PT         =FACT(statut='f',min=00,max=01,
+             F1_K            =SIMP(statut='f',typ='R'),  
+             F2_K            =SIMP(statut='f',typ='R'),  
+             F3_K            =SIMP(statut='f',typ='R'),  
+             F4_K            =SIMP(statut='f',typ='R'),  
+             F1_D_F_META     =SIMP(statut='f',typ=fonction),
+             F2_D_F_META     =SIMP(statut='f',typ=fonction),
+             F3_D_F_META     =SIMP(statut='f',typ=fonction),
+             F4_D_F_META     =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",) ),
+           ),
+           META_RE         =FACT(statut='f',min=00,max=01,
+             C_F1_THETA      =SIMP(statut='f',typ='R'),  
+             C_F2_THETA      =SIMP(statut='f',typ='R'),  
+             C_F3_THETA      =SIMP(statut='f',typ='R'),  
+             C_F4_THETA      =SIMP(statut='f',typ='R'),  
+             F1_C_THETA      =SIMP(statut='f',typ='R'),  
+             F2_C_THETA      =SIMP(statut='f',typ='R'),  
+             F3_C_THETA      =SIMP(statut='f',typ='R'),  
+             F4_C_THETA      =SIMP(statut='f',typ='R'),  
+           ),
+#
+# comportement fluide
+#
+           FLUIDE          =FACT(statut='f',min=00,max=01,
+             regles=(EXCLUS('CELE_C','CELE_R'),),
+             RHO             =SIMP(statut='o',typ='R'),
+             CELE_C          =SIMP(statut='f',typ='C'),
+             CELE_R          =SIMP(statut='f',typ='R'),
+           ),
+           PORO_JOINT      =FACT(statut='f',min=00,max=01,
+             RHO_FLUI        =SIMP(statut='o',typ='R'),
+             ENTRO_FLUI      =SIMP(statut='o',typ='R'),
+             BIOT_M          =SIMP(statut='o',typ='R'),
+             C_0             =SIMP(statut='o',typ='R'),
+             T_R             =SIMP(statut='o',typ='R'),
+             ALPHA_M         =SIMP(statut='o',typ='R'),
+             LAMBDA_T        =SIMP(statut='o',typ='R'),
+             LAMBDA_H        =SIMP(statut='o',typ='R'),
+             SOURCE_INIT     =SIMP(statut='o',typ='R'),
+             OMEGA_0         =SIMP(statut='o',typ='R'),
+           ),
+           THM_LIQU        =FACT(statut='f',min=00,max=01,
+             RHO             =SIMP(statut='o',typ='R'),
+             UN_SUR_K        =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=fonction),
+             D_VISC_TEMP     =SIMP(statut='f',typ=fonction),
+             LAMBDA          =SIMP(statut='f',typ=fonction),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=fonction),
+             COEF_HENRY      =SIMP(statut='f',typ='R'),  
+             VERI_P1         =SIMP(statut='f',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           THM_GAZ         =FACT(statut='f',min=00,max=01,
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=fonction),
+             D_VISC_TEMP     =SIMP(statut='f',typ=fonction),
+             LAMBDA          =SIMP(statut='f',typ=fonction),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='f',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           THM_VAPE_GAZ    =FACT(statut='f',min=00,max=01,
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=fonction),
+             D_VISC_TEMP     =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='f',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           THM_INIT        =FACT(statut='f',min=00,max=01,
+             TEMP            =SIMP(statut='o',typ='R'),
+             PRE1            =SIMP(statut='o',typ='R'),
+             PRE2            =SIMP(statut='o',typ='R'),
+             PORO            =SIMP(statut='o',typ='R'),
+             PRES_VAPE       =SIMP(statut='o',typ='R'),
+             DEGR_SATU       =SIMP(statut='f',typ='R'),  
+             PRES_ATMO       =SIMP(statut='f',typ='R'),  
+           ),
+           THM_DIFFU       =FACT(statut='f',min=00,max=01,
+             R_GAZ           =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             BIOT_COEF       =SIMP(statut='f',typ='R'),
+             SATU_PRES       =SIMP(statut='f',typ=fonction),
+             D_SATU_PRES     =SIMP(statut='f',typ=fonction),
+             PESA_X          =SIMP(statut='f',typ='R'),
+             PESA_Y          =SIMP(statut='f',typ='R'),
+             PESA_Z          =SIMP(statut='f',typ='R'),
+             PERM_IN         =SIMP(statut='f',typ=fonction),
+             PERM_LIQU       =SIMP(statut='f',typ=fonction),
+             D_PERM_LIQU_SATU=SIMP(statut='f',typ=fonction),
+             PERM_GAZ        =SIMP(statut='f',typ=fonction),
+             D_PERM_SATU_GAZ =SIMP(statut='f',typ=fonction),
+             D_PERM_PRES_GAZ =SIMP(statut='f',typ=fonction),
+             FICK            =SIMP(statut='f',typ=fonction),
+             D_FICK_TEMP     =SIMP(statut='f',typ=fonction),
+             D_FICK_GAZ_PRES =SIMP(statut='f',typ=fonction),
+             LAMBDA          =SIMP(statut='f',typ=fonction),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=fonction),
+             SIGMA_T         =SIMP(statut='f',typ=fonction),
+             D_SIGMA_T       =SIMP(statut='f',typ=fonction),
+             PERM_G_INTR     =SIMP(statut='f',typ=fonction),
+             CHAL_VAPO       =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='f',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P2         =SIMP(statut='f',typ='TXM',defaut="SAT",into=("SAT",) ),
+             VERI_P3         =SIMP(statut='f',typ='TXM',defaut="PORO",into=("PORO",) ),
+             VERI_P4         =SIMP(statut='f',typ='TXM',defaut="PGAZ",into=("PGAZ",) ),
+             VERI_P5         =SIMP(statut='f',typ='TXM',defaut="PGAP",into=("PGAP",) ),
+           ),
+#
+# courbes et coefficients associés à la fatigue et au dommage
+#
+           FATIGUE         =FACT(statut='f',min=00,max=01,
+             regles=(PRESENT_ABSENT('WOHLER','A_BASQUIN','BETA_BASQUIN'),
+                     PRESENT_ABSENT('WOHLER','A0','A1','A2','A3','SL'),
+                     PRESENT_ABSENT('A_BASQUIN','A0','A1','A2','A3','SL'),
+                     ENSEMBLE('A_BASQUIN','BETA_BASQUIN'),
+                     ENSEMBLE('A0','A1','A2','A3','SL'),
+                     PRESENT_PRESENT('A0','E_REFE'),
+                     ENSEMBLE('D0','TAU0'),),
+             WOHLER          =SIMP(statut='f',typ=fonction),
+             A_BASQUIN       =SIMP(statut='f',typ='R'),
+             BETA_BASQUIN    =SIMP(statut='f',typ='R'),
+             A0              =SIMP(statut='f',typ='R'),
+             A1              =SIMP(statut='f',typ='R'),
+             A2              =SIMP(statut='f',typ='R'),
+             A3              =SIMP(statut='f',typ='R'),
+             SL              =SIMP(statut='f',typ='R'),
+             MANSON_COFFIN   =SIMP(statut='f',typ=fonction),
+             E_REFE          =SIMP(statut='f',typ='R'),
+             D0              =SIMP(statut='f',typ='R'),
+             TAU0            =SIMP(statut='f',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="SIGM",into=("SIGM",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",) ),
+           ),
+           DOMMA_LEMAITRE  =FACT(statut='f',min=00,max=01,
+             S               =SIMP(statut='o',typ=fonction),
+             EPSP_SEUIL      =SIMP(statut='o',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+#
+# autres comportements ...
+#
+           WEIBULL         =FACT(statut='f',min=00,max=01,
+             M               =SIMP(statut='o',typ='R'),
+             VOLU_REFE       =SIMP(statut='o',typ='R'),
+             SIGM_REFE       =SIMP(statut='o',typ='R'),
+             SEUIL_EPSP_CUMU =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ),
+           CONTACT         =FACT(statut='f',min=00,max=01,
+             E_N             =SIMP(statut='o',typ='R'),
+             E_T             =SIMP(statut='f',typ='R',defaut= 0.E+0),
+             COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0),
+           ),
+           NON_LOCAL       =FACT(statut='f',min=00,max=01,
+             LONG_CARA       =SIMP(statut='o',typ='R'),
+             COEF_RIGI_MINI  =SIMP(statut='f',typ='R'),
+           ),
+           RUPT_FRAG       =FACT(statut='f',min=00,max=01,
+             GC              =SIMP(statut='o',typ='R'),
+           ),
+           RCCM            =FACT(statut='f',min=00,max=01,
+             SY_02           =SIMP(statut='f',typ='R'),
+             SM              =SIMP(statut='f',typ='R'),
+             SU              =SIMP(statut='f',typ='R'),
+             SC              =SIMP(statut='f',typ='R'),
+             SH              =SIMP(statut='f',typ='R'),
+             N_KE            =SIMP(statut='f',typ='R'),  
+             M_KE            =SIMP(statut='f',typ='R'),  
+           ),
+           RCCM_FO         =FACT(statut='f',min=00,max=01,
+             SY_02           =SIMP(statut='f',typ=fonction),
+             SM              =SIMP(statut='f',typ=fonction),
+             SU              =SIMP(statut='f',typ=fonction),
+             S               =SIMP(statut='f',typ=fonction),
+             N_KE            =SIMP(statut='f',typ=fonction),  
+             M_KE            =SIMP(statut='f',typ=fonction),  
+           ),
+           INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 02/10/96   AUTEUR CIBHHLV L.VIVAN 
+DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene,
+                      fr="Définition d un modèle structure global à partir de macro éléments pour analyse modale ou harmonique par sous structuration",
+                      docu="U4.65.02-D",reentrant='n',
+         SOUS_STRUC      =FACT(statut='o',min=01,max='**',
+           NOM             =SIMP(statut='o',typ='TXM' ),
+           MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+           TRANS           =SIMP(statut='f',typ='R',max=03),
+         ),
+         LIAISON         =FACT(statut='o',min=01,max='**',
+           SOUS_STRUC_1    =SIMP(statut='o',typ='TXM' ),
+           INTERFACE_1     =SIMP(statut='o',typ='TXM' ),
+           SOUS_STRUC_2    =SIMP(statut='o',typ='TXM' ),
+           INTERFACE_2     =SIMP(statut='o',typ='TXM' ),
+         ),
+         VERIF           =FACT(statut='f',min=01,max='**',
+#  dans la doc U stop_erreur est obligatoire         
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 18/01/99   AUTEUR CIBHHBC B.CIREE 
+DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=   4,sd_prod=fonction,
+                fr="Définition des valeurs d une fonction de deux variables réelles",
+                docu="U4.31.03-F",reentrant='n',
+         regles=(UN_PARMI('FONCTION','DEFI_FONCTION'),
+                 EXCLUS('FONCTION','NOM_PARA_FONC',),
+                 ENSEMBLE('NOM_PARA_FONC','DEFI_FONCTION'),),
+         NOM_PARA        =SIMP(statut='o',typ='TXM',into=("TEMP","INST","X","Y","Z","FREQ","PULS",
+                                                          "AMOR","EPAIS","TSEC","HYDR","SECH") ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),       
+         PARA            =SIMP(statut='o',typ='R',max='**'),
+         FONCTION        =SIMP(statut='f',typ=fonction,max='**' ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',into=("TEMP","INST","X","Y","Z","EPSI","FREQ",
+                                                          "PULS","AMOR","EPAIS") ),
+         DEFI_FONCTION   =FACT(statut='f',min=00,max='**',
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           INTERPOL        =SIMP(statut='f',typ='TXM',max=02,defaut="LIN",into=("NON","LIN","LOG") ),
+           PROL_DROIT      =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=02,defaut="LIN",into=("NON","LIN","LOG") ),
+         PROL_DROIT      =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',into=("CROISSANT",) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 06/10/1999   AUTEUR SABJLMA P.LATRUBESSE 
+DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op=  73,sd_prod=obstacle
+                    ,fr="Définition d un obstacle plan perpendiculaire à une structure filaire",
+                     docu="U4.44.21-E",reentrant='n',
+         TYPE            =SIMP(statut='o',typ='TXM',defaut="CERCLE",
+                             into=("CERCLE","PLAN_Y","PLAN_Z","DISCRET",
+                             "BI_CERCLE","BI_PLAN_Y","BI_PLAN_Z","BI_CERC_INT",
+                             "CRAYON_900","CRAYON_1300","GUID_A_CARTE_900",
+                             "GUID_B_CARTE_900","GUID_C_CARTE_900",
+                             "GUID_D_CARTE_900","GUID_E_CARTE_900",
+                             "GUID_F_CARTE_900","GUID_A_CARTE_1300",
+                             "GUID_B_CARTE_1300","GUID_C_CARTE_1300",
+                             "GUID_D_CARTE_1300","GUID_E_CARTE_1300",
+                             "GUID_F_CARTE_1300","GUID_A_CARSP_900",
+                             "GUID_B_CARSP_900","GUID_C_CARSP_900",
+                             "GUID_D_CARSP_900","GUID_E_CARSP_900",
+                             "GUID_F_CARSP_900","GUID_A_CARSP_1300",
+                             "GUID_B_CARSP_1300","GUID_C_CARSP_1300",
+                             "GUID_D_CARSP_1300","GUID_E_CARSP_1300",
+                             "GUID_F_CARSP_1300","GUID_A_GCONT_900",
+                             "GUID_B_GCONT_900","GUID_C_GCONT_900",
+                             "GUID_D_GCONT_900","GUID_E_GCONT_900",
+                             "GUID_F_GCONT_900","GUID_A_GCONT_1300",
+                             "GUID_B_GCONT_1300","GUID_C_GCONT_1300",
+                             "GUID_D_GCONT_1300","GUID_E_GCONT_1300",
+                             "GUID_F_GCONT_1300","GUID_A_GCOMB_900",
+                             "GUID_B_GCOMB_900","GUID_C_GCOMB_900",
+                             "GUID_D_GCOMB_900","GUID_E_GCOMB_900",
+                             "GUID_F_GCOMB_900","GUID_A_GCOMB_1300",
+                             "GUID_B_GCOMB_1300","GUID_C_GCOMB_1300",
+                             "GUID_D_GCOMB_1300","GUID_E_GCOMB_1300",
+                             "GUID_F_GCOMB_1300",) ),
+         VALE            =SIMP(statut='f',typ='R',max='**'),
+         VERIF           =SIMP(statut='f',typ='TXM',defaut="FERME"),
+)  ;
+#& MODIF COMMANDE  DATE 04/03/98   AUTEUR BIBERON G.ROUSSEAU 
+DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre,
+                    fr="Définition d'un spectre d'excitation turbulente",
+                    docu="U4.44.31-C",reentrant='n',
+         regles=(UN_PARMI('SPEC_LONG_COR_1','SPEC_LONG_COR_2','SPEC_LONG_COR_3',
+                          'SPEC_LONG_COR_4','SPEC_CORR_CONV_1','SPEC_CORR_CONV_2',
+                          'SPEC_FONC_FORME','SPEC_EXCI_POINT'),),
+         SPEC_LONG_COR_1 =FACT(statut='f',min=00,max=01,
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           VISC_CINE       =SIMP(statut='o',typ='R' ),
+         ),
+         SPEC_LONG_COR_2 =FACT(statut='f',min=00,max=01,
+           regles=(ENSEMBLE('FREQ_COUP','PHI0','BETA' ),),
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           FREQ_COUP       =SIMP(statut='f',typ='R',defaut= 0.1 ),
+           PHI0            =SIMP(statut='f',typ='R',defaut= 1.5E-3 ),
+           BETA            =SIMP(statut='f',typ='R',defaut= 2.7 ),
+         ),
+         SPEC_LONG_COR_3 =FACT(statut='f',min=00,max=01,
+           regles=(ENSEMBLE('PHI0_1','BETA_1','PHI0_2','BETA_2','FREQ_COUP'),),
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           FREQ_COUP       =SIMP(statut='f',typ='R',defaut= 0.2 ),
+           PHI0_1          =SIMP(statut='f',typ='R',defaut= 5.E-3 ),
+           BETA_1          =SIMP(statut='f',typ='R',defaut= 0.5 ),
+           PHI0_2          =SIMP(statut='f',typ='R',defaut= 4.0E-5 ),
+           BETA_2          =SIMP(statut='f',typ='R',defaut= 3.5 ),
+         ),
+         SPEC_LONG_COR_4 =FACT(statut='f',min=00,max=01,
+           regles=(ENSEMBLE('BETA','GAMMA'),),
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           TAUX_VIDE       =SIMP(statut='o',typ='R' ),
+           BETA            =SIMP(statut='f',typ='R',defaut= 2. ),
+           GAMMA           =SIMP(statut='f',typ='R',defaut= 4. ),
+         ),
+         SPEC_CORR_CONV_1=FACT(statut='f',min=00,max=01,
+           LONG_COR_1      =SIMP(statut='o',typ='R' ),
+           LONG_COR_2      =SIMP(statut='f',typ='R' ),
+           VITE_FLUI       =SIMP(statut='o',typ='R' ),
+           RHO_FLUI        =SIMP(statut='o',typ='R' ),
+           FREQ_COUP       =SIMP(statut='f',typ='R' ),
+           K               =SIMP(statut='f',typ='R',defaut= 5.8E-3 ),
+           D_FLUI          =SIMP(statut='o',typ='R' ),
+           COEF_VITE_FLUI_A=SIMP(statut='f',typ='R' ),
+           COEF_VITE_FLUI_O=SIMP(statut='f',typ='R' ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="GENERALE",
+                                 into=("AU_YANG","GENERALE","CORCOS") ),
+         ),
+         SPEC_CORR_CONV_2=FACT(statut='f',min=00,max=01,
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           VITE_FLUI       =SIMP(statut='o',typ='R' ),
+           FREQ_COUP       =SIMP(statut='f',typ='R' ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="GENERALE",
+                                 into=("AU_YANG","GENERALE","CORCOS",) ),
+           COEF_VITE_FLUI_A=SIMP(statut='f',typ='R' ),
+           COEF_VITE_FLUI_O=SIMP(statut='f',typ='R' ),
+         ),
+         SPEC_FONC_FORME =FACT(statut='f',min=00,max=01,
+           regles=(UN_PARMI('INTE_SPEC','GRAPPE_1'),
+                   ENSEMBLE('INTE_SPEC','FONCTION'),),
+           INTE_SPEC       =SIMP(statut='f',typ=tabl_intsp ),
+           FONCTION        =SIMP(statut='f',typ=fonction,max='**'),
+           GRAPPE_1        =SIMP(statut='f',typ='TXM',into=("DEBIT_180","DEBIT_300",) ),
+           NOEUD           =SIMP(statut='o',typ=no),
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           MODELE          =SIMP(statut='o',typ=modele ),
+         ),
+         SPEC_EXCI_POINT =FACT(statut='f',min=00,max=01,
+           regles=(UN_PARMI('INTE_SPEC','GRAPPE_2'),),         
+           INTE_SPEC       =SIMP(statut='f',typ=tabl_intsp ),
+           GRAPPE_2        =SIMP(statut='f',typ='TXM',
+                                 into=("ASC_CEN","ASC_EXC","DES_CEN","DES_EXC",) ),
+#  Quels sont les statuts des mots cles à l interieur des deux blocs qui suivent
+           b_inte_spec =BLOC(condition = "INTE_SPEC != None",
+             NATURE          =SIMP(statut='o',typ='TXM',max='**',into=("FORCE","MOMENT",) ),
+             ANGL            =SIMP(statut='o',typ='R',max='**'),
+             NOEUD           =SIMP(statut='o',typ=no,max='**'),
+           ),
+           b_grappe_2      =BLOC(condition = "GRAPPE_2 != None",
+             RHO_FLUI        =SIMP(statut='o',typ='R' ),
+             NOEUD           =SIMP(statut='o',typ=no),
+           ),   
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           MODELE          =SIMP(statut='o',typ=modele ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 02/03/99   AUTEUR SABJLMA P.LATRUBESSE 
+DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
+                    fr="Définition d un maillage de visualisation",
+                    docu="U4.24.01-E",reentrant='n',
+         regles=(UN_PARMI('MODE_CYCL','MODELE_GENE','MAILLAGE'),
+                 PRESENT_PRESENT('MODE_CYCL','SECTEUR'),
+                 EXCLUS('SOUS_STRUC','SECTEUR'),
+                 PRESENT_PRESENT('NOM_GROUP_MA','MODELE_GENE'),
+                 PRESENT_PRESENT('NOM_GROUP_MA','SOUS_STRUC'),),
+         MODE_CYCL       =SIMP(statut='f',typ=mode_cycl ),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         SQUELETTE       =SIMP(statut='f',typ=squelette ),
+         RECO_GLOBAL     =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('TOUT','GROUP_NO_1'),
+                   PRESENT_PRESENT('GROUP_NO_1','GROUP_NO_2'),
+                   PRESENT_PRESENT('GROUP_NO_1','SOUS_STRUC_1'),
+                   PRESENT_PRESENT('GROUP_NO_2','SOUS_STRUC_2'),
+                   PRESENT_PRESENT('SOUS_STRUC_1','SOUS_STRUC_2'),),
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           SOUS_STRUC_1    =SIMP(statut='f',typ='TXM' ),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           SOUS_STRUC_2    =SIMP(statut='f',typ='TXM' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           DIST_REFE       =SIMP(statut='f',typ='R' ),
+         ),
+         NOM_GROUP_MA    =FACT(statut='f',min=01,max='**',
+           NOM             =SIMP(statut='o',typ='TXM' ),
+           SOUS_STRUC      =SIMP(statut='o',typ='TXM' ),
+           GROUP_MA        =SIMP(statut='o',typ=grma),
+         ),
+         EXCLUSIF        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         MAILLAGE        =SIMP(statut='f',typ=maillage ),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         TRANS           =SIMP(statut='f',typ='R',max='**'),
+         ANGL_NAUT       =SIMP(statut='f',typ='R',max='**'),
+         SOUS_STRUC      =FACT(statut='f',min=01,max='**',
+           NOM             =SIMP(statut='f',typ='TXM' ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         ),
+         SECTEUR         =FACT(statut='f',min=01,max='**',
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 09/06/98   AUTEUR CIBHHLV L.VIVAN 
+DEFI_TEXTURE=OPER(nom="DEFI_TEXTURE",op= 181,sd_prod=tabl_texture,
+                  fr=" ",docu="U4.43.05-A",reentrant='n',
+         SYST_GLISSEMENT =FACT(statut='o',min=01,max='**',
+           N               =SIMP(statut='o',typ='R',max='**' ),  
+           L               =SIMP(statut='o',typ='R',max='**' ),  
+         ),
+         PLAN            =FACT(statut='o',min=01,max='**',
+           ANGL_NAUT       =SIMP(statut='o',typ='R',max='**' ),  
+           PROPORTION      =SIMP(statut='o',typ='R' ),  
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 16/07/96   AUTEUR CIBHHRA R.MEDDOURI 
+DEFI_THER_JOULE=OPER(nom="DEFI_THER_JOULE",op= 121,sd_prod=fonction,docu="U4.MK.20-A",reentrant='n',
+                    fr="Calculer la fonction d évolution temporelle de la température due à l effet JOULE dans un câble",
+         LIST_INST       =SIMP(statut='o',typ=listr8),
+         INST_CC_INIT    =SIMP(statut='f',typ='R',defaut= 0.0E+0 ),
+         INST_CC_FIN     =SIMP(statut='f',typ='R',defaut= 1.0E+10),
+         INST_RENC_INIT  =SIMP(statut='f',typ='R',defaut= 1.0E+10),
+         INST_RENC_FIN   =SIMP(statut='f',typ='R',defaut= 1.0E+10),
+         TEMP_EXT_POSE   =SIMP(statut='f',typ='R',defaut= 15.0E+0),
+         TEMP_EXT        =SIMP(statut='f',typ='R',defaut= 15.0E+0),
+         TEMP_RESI_REF   =SIMP(statut='f',typ='R',defaut= 20.0E+0),
+         PARA_COND_1D    =FACT(statut='f',min=01,max='**',
+           INTE_CC         =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+           INTE_RENC       =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+           A               =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           SECTION         =SIMP(statut='f',typ='TXM',defaut="CERCLE",into=("CERCLE",) ),
+           RESI_R0         =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+           RESI_R1         =SIMP(statut='f',typ='R',defaut= 0.E+0),
+           RHO_CP          =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           COEF_H          =SIMP(statut='f',typ='R',defaut= 40.0E+0),
+           TEMP_INIT       =SIMP(statut='f',typ='R',defaut= 15.0E+0),
+         ),
+)  ;
+
+#& MODIF COMMANDE  DATE 04/07/2000   AUTEUR JMBHH01 J.M.PROIX 
+DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=tabl_trc,docu="U4.43.04-E",reentrant='n',
+              fr="Définition d un diagramme de transformations en refroidissement continu d un acier",
+         HIST_EXP        =FACT(statut='o',min=01,max='**',
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+         ),
+         TEMP_MS         =FACT(statut='o',min=01,max='**',
+           SEUIL           =SIMP(statut='o',typ='R'),
+           AKM             =SIMP(statut='o',typ='R'),
+           BKM             =SIMP(statut='o',typ='R'),
+           TPLM            =SIMP(statut='o',typ='R'),
+         ),
+         GRAIN_AUST      =FACT(statut='f',min=01,max='**',
+           DREF           =SIMP(statut='f',typ='R'),
+           A              =SIMP(statut='f',typ='R'),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+def defi_valeur_prod(self,IS=None,R8=None,TX=None,C8=None,LS=None):
+  if IS != None  : return entier
+  if R8 != None  : return reel
+  if TX != None  : return chaine
+  if C8 != None  : return complexe
+  if LS != None  : return liste
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_VALEUR=MACRO(nom="DEFI_VALEUR",op=-4,sd_prod=defi_valeur_prod,
+                 fr="Affectation d une valeur à une variable Superviseur",
+                 docu="U4.31.04-e",reentrant='f',
+         regles=(UN_PARMI('IS','R8','TX','C8','LS'),),
+         IS              =SIMP(statut='f',typ='I',max='**'),
+         R8              =SIMP(statut='f',typ='R',max='**'),
+         TX              =SIMP(statut='f',typ='TXM',max='**'),
+         C8              =SIMP(statut='f',typ='C',max='**'),
+         LS              =SIMP(statut='f',typ='L',max='**'),
+)  ;
+#& MODIF COMMANDE DATE 04/10/90 AUTEUR INCONNU INCONNU
+DEFUFI=PROC(nom="DEFUFI",op=21,docu="U4.12.01-D",
+            fr="Modification / ajoût d une unité logique en sortie en complément de celles définies dans DEBUT",
+         IMPRESSION      =FACT(statut='o',min=01,max='**',
+           NOM             =SIMP(statut='o',typ='TXM',max='**'),
+           UNITE           =SIMP(statut='o',typ='I' ),
+         ),
+)  ;
+#& MODIF COMMANDE DATE 16/01/92 AUTEUR INCONNU INCONNU
+DEPL_INTERNE=OPER(nom="DEPL_INTERNE",op=89,sd_prod=cham_no_depl_r,docu="U4.62.02-E",reentrant='n',
+                  fr="Récupération du champ de déplacement interne à une sous-structure",
+         DEPL_GLOBAL     =SIMP(statut='o',typ=cham_no_depl_r),
+         MAILLE          =SIMP(statut='o',typ=ma,max=1),
+         NOM_CAS         =SIMP(statut='f',typ='TXM',defaut=" "),
+)  ;
+#& MODIF COMMANDE DATE 23/03/93 AUTEUR GJBHHDU G.DUMONT
+DETRUIRE=PROC(nom="DETRUIRE",op=-7,docu="U4.14.01-D",
+              fr="Destruction d un concept utilisateur dans la base GLOBALE",
+             op_init=ops.detruire,
+            CONCEPT     =FACT(statut='o',min=01,
+            NOM         =SIMP(statut='o',typ=assd,max='**'),
+        ),
+);
+#& MODIF COMMANDE  DATE 03/05/2000   AUTEUR CIBHHLV L.VIVAN 
+DIST_LIGN_3D=OPER(nom="DIST_LIGN_3D",op= 133,sd_prod=fonction,docu="U4.MK.30-A",reentrant='n', 
+                  fr="Calcul sous forme d une fonction du temps de la distance minimale entre deux structures filaires",
+      regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),
+              UN_PARMI('GROUP_MA_2','POIN_FIXE'),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,evol_noli) ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         GROUP_MA_1      =SIMP(statut='o',typ=grma,max='**'),
+         GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+         POIN_FIXE       =SIMP(statut='f',typ='R',min=3,max=3),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/05/2000   AUTEUR CIBHHAB N.RAHNI
+DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=tabl_intsp
+                    ,fr="Calcule la réponse spectrale d une structure linéaire sous une excitation connue par sa DSP",
+                     docu="U4.53.22-D",reentrant='n',
+         BASE_MODALE     =FACT(statut='o',min=01,max=01,
+           regles=(UN_PARMI('NUME_ORDRE','BANDE'),),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+           BANDE           =SIMP(statut='f',typ='R',max=02),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           b_bande =BLOC(condition = "BANDE != None",
+             AMOR_UNIF       =SIMP(statut='o',typ='R' ),
+           ),
+           b_nume_ordre =BLOC(condition = "NUME_ORDRE != None",
+             AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           ),
+         ),
+         MODE_STAT       =SIMP(statut='f',typ=mode_stat ),
+         EXCIT           =FACT(statut='o',min=01,max=01,
+           regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I'), 
+                   EXCLUS('CHAM_NO','NOEUD'),),
+           DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
+           MODAL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+#  dans la doc U il y a plus de choix pour GRANDEUR
+           GRANDEUR        =SIMP(statut='f',typ='TXM',defaut="DEPL_R",
+                                 into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
+           INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
+           NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG",) ),
+#  Toutes les regles ne semblent pas avoir été ecrites dans la doc U
+           NUME_ORDRE_I    =SIMP(statut='f',typ='I',max='**'),
+           NOEUD_I         =SIMP(statut='f',typ=no,max='**'),
+           b_nume_ordre_i  =BLOC(condition = "NUME_ORDRE_I != None",
+             NUME_ORDRE_J    =SIMP(statut='o',typ='I',max='**'),
+           ),
+           b_noeud_i       =BLOC(condition = "NOEUD_I != None",
+             NOEUD_J         =SIMP(statut='o',typ=no,max='**'),
+             NOM_CMP_I       =SIMP(statut='o',typ='TXM',max='**'),
+             NOM_CMP_J       =SIMP(statut='o',typ='TXM',max='**'),
+           ),
+           CHAM_NO         =SIMP(statut='f',typ=cham_no),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           b_noeud         =BLOC(condition = "NOEUD != None",
+             NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+           ),           
+         ),
+         REPONSE         =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('FREQ_MIN','NB_POIN_MODE'),
+                   EXCLUS('FREQ_MIN','FREQ_EXCIT'),
+                   ENSEMBLE('FREQ_MIN','FREQ_MAX'),),
+#  Toutes les regles ne semblent pas avoir été ecrites dans la doc U
+           DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ,) ),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
+           FREQ_MIN        =SIMP(statut='f',typ='R' ),
+           FREQ_MAX        =SIMP(statut='f',typ='R' ),
+           PAS             =SIMP(statut='f',typ='R' ),
+           FREQ_EXCIT      =SIMP(statut='f',typ='TXM',defaut="AVEC",into=("AVEC","SANS") ),
+           NB_POIN_MODE    =SIMP(statut='f',typ='I',defaut= 50 ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 08/03/2000   AUTEUR CIBHHPD P.DAVID 
+def dyna_line_harm_prod(MATR_MASS,**args):
+  if AsType(MATR_MASS) == matr_asse_depl_r : return dyna_harmo
+  if AsType(MATR_MASS) == matr_asse_depl_c : return dyna_harmo
+  if AsType(MATR_MASS) == matr_asse_pres_c : return acou_harmo
+  if AsType(MATR_MASS) == matr_asse_gene_r : return harm_gene
+  raise AsException("type de concept resultat non prevu")
+
+DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
+                    fr="Réponse dynamique complexe d un système à une excitation harmonique",
+                    docu="U4.53.11-E",reentrant='n',
+         regles=(PRESENT_ABSENT('AMOR_REDUIT','MATR_AMOR'),
+                 PRESENT_ABSENT('AMOR_REDUIT','LIST_AMOR'),
+                 PRESENT_ABSENT('MATR_AMOR','LIST_AMOR'),
+                 UN_PARMI('FREQ','LIST_FREQ'),),
+         MODELE          =SIMP(statut='f',typ=modele ),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+         MATR_MASS       =SIMP(statut='o',typ=(matr_asse_depl_r,
+                                               matr_asse_pres_c,
+                                               matr_asse_gene_r ) ),
+         MATR_RIGI       =SIMP(statut='o',typ=(matr_asse_depl_r,
+                                               matr_asse_depl_c,
+                                               matr_asse_pres_c,
+                                               matr_asse_gene_r,
+                                               matr_asse_gene_c ) ),
+         MATR_AMOR       =SIMP(statut='f',typ=(matr_asse_depl_r,
+                                               matr_asse_pres_c,
+                                               matr_asse_gene_r ) ),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         LIST_AMOR       =SIMP(statut='f',typ=listr8 ),
+         MATR_IMPE_PHI   =SIMP(statut='f',typ=(matr_asse_depl_r,
+                                               matr_asse_gene_r) ),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',max=03,into=("DEPL","VITE","ACCE") ),
+         EXCIT           =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('VECT_ASSE','CHARGE'),
+                   UN_PARMI('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+           VECT_ASSE       =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_pres_c,vect_asse_gene ) ),
+           CHARGE          =SIMP(statut='f',typ=char_meca ),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+           FONC_MULT_C     =SIMP(statut='f',typ=fonction_c ),
+           COEF_MULT_C     =SIMP(statut='f',typ='C' ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           PHAS_DEG        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           PUIS_PULS       =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 08/06/99   AUTEUR ACBHHCD G.DEVESA 
+DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
+                    fr="Réponse temporelle d un système à une excitation transitoire",
+                    docu="U4.53.02-F",reentrant='f',
+         regles=(UN_PARMI('NEWMARK','WILSON','DIFF_CENTRE','ADAPT'),),
+         MODELE          =SIMP(statut='f',typ=modele ),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+         MATR_MASS       =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_RIGI       =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         MODE_STAT       =SIMP(statut='f',typ=mode_stat ),
+         NEWMARK         =FACT(statut='f',min=01,max=01,
+           ALPHA           =SIMP(statut='f',typ='R',defaut= 0.25 ),
+           DELTA           =SIMP(statut='f',typ='R',defaut= 0.5 ),
+         ),
+         WILSON          =FACT(statut='f',min=01,max=01,
+           THETA           =SIMP(statut='f',typ='R',defaut= 1.4 ),
+         ),
+         DIFF_CENTRE     =FACT(statut='f',min=01,max=01,
+         ),
+         ADAPT           =FACT(statut='f',min=01,max=01,
+         ),
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('DYNA_TRANS','DEPL_INIT'),
+                   EXCLUS('DYNA_TRANS','VITE_INIT'),),
+           DYNA_TRANS      =SIMP(statut='f',typ=dyna_trans ),
+#  j ai interprete la doc U : est-ce bon           
+           b_dyna_trans    =BLOC(condition = "DYNA_TRANS != None",
+             regles=(EXCLUS('NUME_INIT','INST_INIT' ),),
+             NUME_INIT       =SIMP(statut='f',typ='I' ),
+             INST_INIT       =SIMP(statut='f',typ='R' ),
+             b_inst_init     =BLOC(condition = "INST_INIT != None",
+               PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+           ),
+           DEPL_INIT       =SIMP(statut='f',typ=(cham_no_depl_r) ),
+           VITE_INIT       =SIMP(statut='f',typ=(cham_no_depl_r) ),
+         ),
+         EXCIT           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('CHARGE','VECT_ASSE'),
+                   EXCLUS('CHARGE','COEF_MULT'),
+                   EXCLUS('FONC_MULT','COEF_MULT'),
+                   EXCLUS('ACCE','COEF_MULT'),
+                   PRESENT_ABSENT('ACCE','FONC_MULT'),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
+                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+           CHARGE          =SIMP(statut='f',typ=char_meca ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+           ACCE            =SIMP(statut='f',typ=fonction ),
+           VITE            =SIMP(statut='f',typ=fonction ),
+           DEPL            =SIMP(statut='f',typ=fonction ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         ),
+         AMOR_MODAL      =FACT(statut='f',min=01,max=01,
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+           REAC_VITE       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+#  ce n est pas le mot clesolveur standard
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+           STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+           NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         INCREMENT       =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('LIST_INST','FONC_INST','PAS'),),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ), 
+           FONC_INST       =SIMP(statut='f',typ=fonction ),       
+           PAS             =SIMP(statut='f',typ='R' ),
+           b_pas           =BLOC(condition = "PAS != None",
+               INST_INIT       =SIMP(statut='f',typ='R' ),
+               INST_FIN        =SIMP(statut='f',typ='R' ),    
+           ),
+           b_list_fonc     =BLOC(condition = "LIST_INST != None or FONC_INST != None",
+               regles=(EXCLUS('INST_FIN','NUME_FIN'),),
+               NUME_FIN        =SIMP(statut='f',typ='I' ), 
+               INST_FIN        =SIMP(statut='f',typ='R' ),   
+           ),
+           VITE_MIN        =SIMP(statut='f',typ='TXM',defaut="NORM",into=("MAXI","NORM") ),
+           COEF_MULT_PAS   =SIMP(statut='f',typ='R',defaut= 1.1 ),
+           COEF_DIVI_PAS   =SIMP(statut='f',typ='R',defaut= 1.33334 ),
+           PAS_LIMI_RELA   =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+           NB_POIN_PERIODE =SIMP(statut='f',typ='I',defaut= 50 ),
+           NMAX_ITER_PAS   =SIMP(statut='f',typ='I',defaut= 16 ),
+           PAS_CALCUL      =SIMP(statut='f',typ='I',defaut= 1 ),
+         ),
+         ARCHIVAGE       =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH', ),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',into=("DEPL","VITE","ACCE") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2000   AUTEUR VABHHTS J.PELLET 
+DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 95,sd_prod=evol_noli,reentrant='f',
+                   fr="Analyse mécanique dynamique non linéaire",docu="U4.53.01-E",
+         regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS',),
+                 UN_PARMI('NEWMARK','HHT', ),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         MODE_STAT       =SIMP(statut='f',typ=mode_stat),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+
+         EXCIT           =FACT(statut='o',min=01,max='**',
+           regles=(PRESENT_ABSENT('FONC_MULT','ACCE'),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
+                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("SUIV","FIXE") ),
+           CHARGE          =SIMP(statut='o',typ=char_meca),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           DEPL            =SIMP(statut='f',typ=fonction),
+           ACCE            =SIMP(statut='f',typ=fonction),
+           VITE            =SIMP(statut='f',typ=fonction),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),  
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         ),
+         AMOR_MODAL      =FACT(statut='f',min=01,max=01,
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**' ),  
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),  
+           REAC_VITE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         COMP_INCR       =FACT(statut='f',min=01,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="VMIS_ISOT_LINE",    
+                                 into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_ISOT_META",
+                                       "VMIS_ECMI_TRAC","VMIS_ECMI_LINE","ENDO_FRAGILE","META_EP",       
+                                       "META_EP_PT","META_EP_RE","META_EP_PT_RE","META_EVP",
+                                       "META_EVP_PT","META_EVP_RE","META_EVP_PT_RE","VMIS_CINE_LINE",
+                                       "TAHERI","VISC_TAHERI","CHABOCHE","VISCOCHAB",
+                                       "VMIS_CIN1_CHAB","VMIS_CIN2_CHAB","POLY_CFC", 
+                                       "LMARC","ROUSSELIER","VMIS_POU_LINE","VMIS_POU_FLEJOU",
+                                       "COULOMB","ARME","ASSE_CORN","NORTON_HOFF","LEMAITRE",
+                                       "ZIRC_CYRA2","ZIRC_EPRI","ASSE_COMBU","VENDOCHAB","NADAI_B",  
+                                       "DIS_CONTACT","DIS_CHOC","DIS_GOUJ2E_PLAS","DIS_GOUJ2E_ELAS",
+                                       "GRILLE_ISOT_LINE","GRILLE_CINE_LINE","GRILLE_PINTO_MEN",           
+                                       "PINTO_MENEGOTTO","CJS","OHNO","GRANGER_FP","GRANGER_FP_V",
+                                       "BETON_DOUBLE_DP","VMIS_ASYM_LINE") ),
+           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,) ),
+           VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut=2,into=(2,) ),
+           VMIS_ISOT_LINE  =SIMP(statut='c',typ='I',defaut=2,into=(2,) ),
+           VMIS_ISOT_META  =SIMP(statut='c',typ='I',defaut=2,into=(2,) ),
+           VMIS_CINE_LINE  =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+           VMIS_ECMI_TRAC  =SIMP(statut='c',typ='I',defaut=8,into=(8,) ),
+           VMIS_ECMI_LINE  =SIMP(statut='c',typ='I',defaut=8,into=(8,) ),
+           ENDO_FRAGILE    =SIMP(statut='c',typ='I',defaut=4,into=(4,) ),
+           META_EP         =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+           META_EP_PT      =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+           META_EP_RE      =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+           META_EP_PT_RE   =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+           META_EVP        =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+           META_EVP_PT     =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+           META_EVP_RE     =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+           META_EVP_PT_RE  =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+           CHABOCHE        =SIMP(statut='c',typ='I',defaut=14,into=(14,) ),
+           VISCOCHAB       =SIMP(statut='c',typ='I',defaut=28,into=(28,) ),
+           VMIS_CIN1_CHAB  =SIMP(statut='c',typ='I',defaut=8,into=(8,) ),
+           VMIS_CIN2_CHAB  =SIMP(statut='c',typ='I',defaut=14,into=(14,) ),
+           POLY_CFC        =SIMP(statut='c',typ='I',defaut=1688,into=(1688,) ),
+           LMARC           =SIMP(statut='c',typ='I',defaut=20,into=(20,) ),
+           TAHERI          =SIMP(statut='c',typ='I',defaut=15,into=(15,) ),
+           VISC_TAHERI     =SIMP(statut='c',typ='I',defaut=9,into=(9,) ),
+           ROUSSELIER      =SIMP(statut='c',typ='I',defaut=3,into=(3,) ),
+           VMIS_POU_LINE   =SIMP(statut='c',typ='I',defaut=9,into=(9,) ),
+           VMIS_POU_FLEJOU =SIMP(statut='c',typ='I',defaut=9,into=(9,) ),
+           COULOMB         =SIMP(statut='c',typ='I',defaut=4,into=(4,) ),
+           ASSE_CORN       =SIMP(statut='c',typ='I',defaut=4,into=(4,) ),
+           ARME            =SIMP(statut='c',typ='I',defaut=1,into=(1,) ),
+           NORTON_HOFF     =SIMP(statut='c',typ='I',defaut=1,into=(1,) ),
+           LEMAITRE        =SIMP(statut='c',typ='I',defaut=2,into=(2,) ),
+           ZIRC_CYRA2      =SIMP(statut='c',typ='I',defaut=2,into=(2,) ),
+           ZIRC_EPRI       =SIMP(statut='c',typ='I',defaut=2,into=(2,) ),
+           ASSE_COMBU      =SIMP(statut='c',typ='I',defaut=5,into=(5,) ),
+           NADAI_B         =SIMP(statut='c',typ='I',defaut=34,into=(34,) ),
+           VENDOCHAB       =SIMP(statut='c',typ='I',defaut=10,into=(10,) ),
+           GRILLE_ISOT_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,) ),
+           GRILLE_CINE_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,) ),
+           GRILLE_PINTO_MEN=SIMP(statut='c',typ='I',defaut=16,into=(16,) ),
+           DIS_CONTACT     =SIMP(statut='c',typ='I',defaut=6,into=(6,) ),
+           DIS_CHOC        =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+           DIS_GOUJ2E_PLAS =SIMP(statut='c',typ='I',defaut=2,into=(2,) ),
+           DIS_GOUJ2E_ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,) ),
+           PINTO_MENEGOTTO =SIMP(statut='c',typ='I',defaut=8,into=(8,) ),
+           CJS             =SIMP(statut='c',typ='I',defaut=16,into=(16,) ),
+           OHNO            =SIMP(statut='c',typ='I',defaut=32,into=(32,) ),
+           GRANGER_FP      =SIMP(statut='c',typ='I',defaut=55,into=(55,) ),
+           GRANGER_FP_V    =SIMP(statut='c',typ='I',defaut=55,into=(55,) ),
+           BETON_DOUBLE_DP =SIMP(statut='c',typ='I',defaut=4,into=(4,) ),
+           VMIS_ASYM_LINE  =SIMP(statut='c',typ='I',defaut=4,into=(4,) ),
+#
+           COQUE_NCOU      =SIMP(statut='f',typ='I'),  
+           TUYAU_NCOU      =SIMP(statut='f',typ='I'),  
+           TUYAU_NSEC      =SIMP(statut='f',typ='I'),  
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC",) ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         COMP_ELAS       =FACT(statut='f',min=01,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",    
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_POUTRE_GR","CABLE") ),
+           ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+           ELAS_VMIS_TRAC  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+           ELAS_VMIS_LINE  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+           ELAS_POUTRE_GR  =SIMP(statut='f',typ='I',defaut=3,into=(3,) ),
+           CABLE           =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+#
+           COQUE_NCOU      =SIMP(statut='f',typ='I'),  
+           TUYAU_NCOU      =SIMP(statut='f',typ='I'),  
+           TUYAU_NSEC      =SIMP(statut='f',typ='I'),  
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","GREEN","GREEN_GR") ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('EVOL_NOLI','DEPL_INIT',),
+                   EXCLUS('EVOL_NOLI','VITE_INIT', ),),
+           INST_INIT       =SIMP(statut='f',typ='R' ),  
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+           DEPL_INIT       =SIMP(statut='f',typ=cham_no_depl_r),
+           VITE_INIT       =SIMP(statut='f',typ=cham_no_depl_r),
+         ),
+         INCREMENT       =FACT(statut='o',min=01,max=01,
+           LIST_INST       =SIMP(statut='o',typ=listr8),
+           INST_INIT       =SIMP(statut='f',typ='R'),  
+         ),
+         NEWMARK         =FACT(statut='f',min=01,max=01,
+           ALPHA           =SIMP(statut='f',typ='R',defaut= 0.25),  
+           DELTA           =SIMP(statut='f',typ='R',defaut= 0.5),  
+         ),
+         HHT             =FACT(statut='f',min=01,max=01,
+           ALPHA           =SIMP(statut='f',typ='R'     
+                                ,defaut= -0.29999999999999999 ),  
+         ),
+         NEWTON          =FACT(statut='d',min=01,max=01,
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),  
+           PREDICTION      =SIMP(statut='f',typ='TXM',into=("TANGENTE","ELASTIQUE") ),
+           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0),  
+         ),
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition= "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="MDA",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition= "METHODE == 'LDLT'",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+           ),
+           b_ldlt_mult     =BLOC(condition="METHODE == 'LDLT' or METHODE == 'MULT_FRONT'",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),             
+           ),
+           b_gcpc          =BLOC(condition="METHODE == 'GCPC'",fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut=0),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+         CONVERGENCE     =FACT(statut='d',min=01,max=01,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),  
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),  
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),  
+           INCO_GLOB_RELA  =SIMP(statut='f',typ='R'),  
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),  
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-6),  
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10),  
+           TYPE_MATR_COMP  =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT","TANG_INC") ),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE") ),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM',max='**',defaut="ELNO",    
+                               into=("SIEF_ELNO_ELGA","VARI_ELNO_ELGA","EFGE_ELNO_CART","ELNO","SANS") ),
+         ARCHIVAGE       =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH','LIST_INST','INST', ),),
+           LIST_ARCH       =SIMP(statut='f',typ=(listis) ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+           INST            =SIMP(statut='f',typ='R',max='**' ),  
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PAS_ARCH        =SIMP(statut='f',typ='I'),  
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',into=("DEPL","VITE","ACCE") ),
+         ),
+         OBSERVATION     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO','MAILLE'),
+                   PRESENT_PRESENT('MAILLE','POINT'),),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("DEPL","VITE","ACCE","SIEF_ELGA","VARI_ELGA") ),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
+           LIST_ARCH       =SIMP(statut='f',typ=listis),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           INST            =SIMP(statut='f',typ='R',max='**' ),  
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PAS_OBSE        =SIMP(statut='f',typ='I'),  
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           POINT           =SIMP(statut='f',typ='I',max='**'),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 16/12/97   AUTEUR CIBHHLV L.VIVAN 
+DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=tabl_intsp,
+                     fr="Calcul de la réponse par recombinaison modale d'une structure linéaire pour une excitation aléatoire",
+                     docu="U4.53.23-C",reentrant='n',
+         BASE_ELAS_FLUI  =SIMP(statut='o',typ=melasflu ),
+         EXCIT           =FACT(statut='o',min=00,max=01,
+           INTE_SPEC_GENE  =SIMP(statut='o',typ=tabl_intsp ),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 29/08/2000   AUTEUR ACBHHCD G.DEVESA 
+DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
+                     fr="Réponse dynamique transitoire en coordonnées généralisées par recombinaison modale",
+                     docu="U4.53.21-E",reentrant='f',
+      regles=(EXCLUS('AMOR_REDUIT','AMOR_GENE','LIST_AMOR'), 
+              PRESENT_ABSENT('MODE_STAT','MODE_CORR'),),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="EULER",
+                               into=("EULER","NEWMARK","DEVOGE","ADAPT","ITMI") ),
+         MASS_GENE       =SIMP(statut='o',typ=matr_asse_gene_r ),
+         RIGI_GENE       =SIMP(statut='o',typ=matr_asse_gene_r ),
+         AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r ),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         LIST_AMOR       =SIMP(statut='f',typ=listr8 ),
+         MODE_STAT       =SIMP(statut='f',typ=mode_stat ),
+         MODE_CORR       =SIMP(statut='f',typ=mult_elas ),
+         
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('RESU_GENE','DEPL_INIT_GENE'),
+                   EXCLUS('RESU_GENE','VITE_INIT_GENE'),),
+           RESU_GENE       =SIMP(statut='f',typ=tran_gene ),
+           b_resu_gene     =BLOC(condition = "RESU_GENE != None",
+             INST_INIT       =SIMP(statut='f',typ='R' ),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           ),
+           DEPL_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+           VITE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+         ),
+         INCREMENT       =FACT(statut='o',min=01,max='**',
+           INST_INIT       =SIMP(statut='f',typ='R' ),
+           INST_FIN        =SIMP(statut='o',typ='R' ),
+           PAS             =SIMP(statut='f',typ='R' ),
+           VERI_PAS        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           VITE_MIN        =SIMP(statut='f',typ='TXM',defaut="NORM",into=("MAXI","NORM") ),
+           COEF_MULT_PAS   =SIMP(statut='f',typ='R',defaut= 1.1 ),
+           COEF_DIVI_PAS   =SIMP(statut='f',typ='R',defaut= 1.3333334 ),
+           PAS_LIMI_RELA   =SIMP(statut='f',typ='R',defaut= 1.0E-6 ),
+           NB_POIN_PERIODE =SIMP(statut='f',typ='I',defaut= 50 ),
+           NMAX_ITER_PAS   =SIMP(statut='f',typ='I',defaut= 16 ),
+         ),
+         ARCHIVAGE       =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH'),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+         ),
+         
+         NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 20 ),
+         RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         LAMBDA          =SIMP(statut='f',typ='R',defaut= 10. ),
+         
+         EXCIT           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('FONC_MULT','COEF_MULT','ACCE'),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
+                   PRESENT_PRESENT('D_FONC_DT','D_FONC_DT2'),
+                   PRESENT_ABSENT('NUME_MODE','VECT_GENE','COEF_MULT'),
+                   PRESENT_ABSENT('MULT_APPUI','CORR_STAT'),
+                   PRESENT_ABSENT('MULT_APPUI','COEF_MULT'),
+                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+           VECT_GENE       =SIMP(statut='f',typ=vect_asse_gene ),
+           NUME_MODE       =SIMP(statut='f',typ='I' ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           ACCE            =SIMP(statut='f',typ=fonction ),
+           VITE            =SIMP(statut='f',typ=fonction ),
+           DEPL            =SIMP(statut='f',typ=fonction ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           b_loca          =BLOC(condition= "DIRECTION != None",
+             regles=(EXCLUS('NOEUD','GROUP_NO'),),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           ),
+           CORR_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           D_FONC_DT       =SIMP(statut='f',typ=fonction ),
+           D_FONC_DT2      =SIMP(statut='f',typ=fonction ),
+         ),
+         CHOC            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1' ),
+                   PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
+           INTITULE        =SIMP(statut='f',typ='TXM' ),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           OBSTACLE        =SIMP(statut='o',typ=obstacle ),
+           ORIG_OBST       =SIMP(statut='f',typ='R',max='**'),
+           NORM_OBST       =SIMP(statut='o',typ='R',max='**'),
+           ANGL_VRIL       =SIMP(statut='f',typ='R' ),
+           JEU             =SIMP(statut='f',typ='R',defaut= 1. ),
+           DIST_1          =SIMP(statut='f',typ='R' ),
+           DIST_2          =SIMP(statut='f',typ='R' ),
+           SOUS_STRUC_1    =SIMP(statut='f',typ='TXM' ),
+           SOUS_STRUC_2    =SIMP(statut='f',typ='TXM' ),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL"),
+           RIGI_NOR        =SIMP(statut='f',typ='R' ),
+           AMOR_NOR        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           RIGI_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           AMOR_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+
+           LAME_FLUIDE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           b_lame          =BLOC(condition="LAME_FLUIDE=='OUI'",
+               ALPHA           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               BETA            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               CHI             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               DELTA           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+         ),
+         VERI_CHOC       =FACT(statut='f',min=01,max='**',
+           STOP_CRITERE    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 0.5 ),
+         ),
+         FLAMBAGE        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           OBSTACLE        =SIMP(statut='o',typ=obstacle ),
+           ORIG_OBST       =SIMP(statut='f',typ='R',max='**'),
+           NORM_OBST       =SIMP(statut='o',typ='R',max='**'),
+           ANGL_VRIL       =SIMP(statut='f',typ='R' ),
+           JEU             =SIMP(statut='f',typ='R',defaut= 1. ),
+           DIST_1          =SIMP(statut='f',typ='R' ),
+           DIST_2          =SIMP(statut='f',typ='R' ),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL"),
+           RIGI_NOR        =SIMP(statut='f',typ='R' ),
+           FNOR_CRIT       =SIMP(statut='f',typ='R' ),
+           FNOR_POST_FL    =SIMP(statut='f',typ='R' ),
+           RIGI_NOR_POST_FL=SIMP(statut='f',typ='R' ),
+         ),
+         ANTI_SISM       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+                   UN_PARMI('NOEUD_2','GROUP_NO_2'),
+                   PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           RIGI_K1         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           RIGI_K2         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SEUIL_FX        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           C               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           PUIS_ALPHA      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           DX_MAX          =SIMP(statut='f',typ='R',defaut= 1. ),
+         ),
+         RELA_EFFO_DEPL  =FACT(statut='f',min=01,max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=fonction ),
+         ),
+         RELA_TRANSIS    =FACT(statut='f',min=01,max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=fonction ),
+         ),
+         RELA_EFFO_VITE  =FACT(statut='f',min=01,max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=fonction ),
+         ),
+         b_itmi          =BLOC(condition = "METHODE=='ITMI'",
+                regles=(ENSEMBLE('BASE_ELAS_FLUI','NUME_VITE_FLUI'),),
+                BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu ),
+                NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+                ETAT_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                PREC_DUREE      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+                CHOC_FLUI       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                NB_MODE         =SIMP(statut='f',typ='I' ),
+                NB_MODE_FLUI    =SIMP(statut='f',typ='I' ),
+                NB_MODE_DIAG    =SIMP(statut='f',typ='I' ),
+                TS_REG_ETAB     =SIMP(statut='f',typ='R' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         IMPRESSION      =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('TOUT','NIVEAU'),),
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           NIVEAU          =SIMP(statut='f',typ='TXM',into=("DEPL_LOC","VITE_LOC","FORC_LOC","TAUX_CHOC") ),
+           INST_INIT       =SIMP(statut='f',typ='R' ),
+           INST_FIN        =SIMP(statut='f',typ='R' ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+ )  ;
+#& MODIF COMMANDE  DATE 30/09/97   AUTEUR VABHHTS J.PELLET 
+ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,docu="U4.92.11-B",
+                   fr="Ecriture dans le fichier RESULTAT des lignes que l'on peut insérer dans la commande TEST_RESU pour tester la non-régression du contenu des objets JEVEUX composant les concepts créés au cours d'une exécution",
+      regles=(UN_PARMI('TOUT','CO'),),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         CO              =SIMP(statut='f',typ=assd,max='**'),
+         TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut="SOMME",into=("SOMME","RESUME") ),
+         FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5"),
+         PREC_R          =SIMP(statut='f',typ='TXM',defaut="1.E-5"),
+)  ;
+#& MODIF COMMANDE  DATE 17/06/98   AUTEUR D6BHHJP J.P.LEFEBVRE 
+EXEC_LOGICIEL=PROC(nom="EXEC_LOGICIEL",op= 183,fr="",docu="U7.00.01-A",
+         LOGICIEL        =SIMP(statut='f',typ='TXM' ),  
+         ARGUMENT        =FACT(statut='f',min=01,max='**',
+           NOM_PARA        =SIMP(statut='f',typ='TXM' ),  
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 02/04/96   AUTEUR ACBHHCD G.DEVESA 
+#def extr_mode_prod(FILTRE_MODE,TITRE,IMPRESSION ):
+#  Sait-on faire  
+def extr_mode_prod(FILTRE_MODE,**args):
+  vale=FILTRE_MODE[0]['MODE']
+  if AsType(vale) == mode_meca   : return mode_meca
+  if AsType(vale) == mode_meca_c : return mode_meca_c
+  if AsType(vale) == mode_gene   : return mode_gene
+  raise AsException("type de concept resultat non prevu")
+
+EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod,
+               fr="Extraction dans une structure de données de type mode_meca_* ou mode_gene des modes qui vérifient un certain critère et concaténation de plusieurs structures de données de même type",
+               docu="U4.52.12-C",reentrant='n',
+         FILTRE_MODE     =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','NUME_MODE','NUME_MODE_EXCLU','FREQ_MIN','CRIT_EXTR',),),
+           MODE            =SIMP(statut='o',typ=(mode_meca,mode_meca_c,mode_gene ) ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+           NUME_MODE_EXCLU =SIMP(statut='f',typ='I',max='**'),
+           FREQ_MIN        =SIMP(statut='f',typ='R' ),
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN"
+                                  ,into=("MASS_EFFE_UN","MASS_GENE") ),
+           b_freq_min      =BLOC(condition = "FREQ_MIN != None",  
+             FREQ_MAX        =SIMP(statut='o',typ='R' ),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),
+           b_crit_extr     =BLOC(condition = "CRIT_EXTR != None",
+             SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),    
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           CUMUL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",into=("MASS_EFFE_UN","MASS_GENE") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 03/05/2000   AUTEUR CIBHHLV L.VIVAN 
+def extr_resu_prod(RESULTAT,**args):
+  if AsType(RESULTAT) == evol_elas    : return evol_elas
+  if AsType(RESULTAT) == evol_noli    : return evol_noli
+  if AsType(RESULTAT) == evol_ther    : return evol_ther
+  if AsType(RESULTAT) == dyna_trans   : return dyna_trans
+  if AsType(RESULTAT) == dyna_harmo   : return dyna_harmo
+  if AsType(RESULTAT) == acou_harmo   : return acou_harmo
+  if AsType(RESULTAT) == mode_meca    : return mode_meca
+  if AsType(RESULTAT) == mode_acou    : return mode_acou
+  if AsType(RESULTAT) == mode_stat    : return mode_stat
+  if AsType(RESULTAT) == mult_elas    : return mult_elas
+  if AsType(RESULTAT) == fourier_elas : return fourier_elas
+  raise AsException("type de concept resultat non prevu")
+
+EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,docu="U4.71.04-B",reentrant='f',
+               fr="Extraction de champs pour des numéros d ordre donnés et réduction de l encombrement d une Structure de Données de type resultat",
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,acou_harmo,mode_meca,          
+                                               mode_acou,mode_stat,evol_ther,evol_noli,   
+                                               mult_elas,fourier_elas ) ),
+         ARCHIVAGE       =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH'),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis),
+           PAS_ARCH        =SIMP(statut='f',typ='I'),  
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',into=("VARI",) ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 03/05/2000   AUTEUR VABHHTS J.PELLET 
+def fact_grad_prod(MATR_ASSE,**args):
+  if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_depl_r
+  if AsType(MATR_ASSE) == matr_asse_temp_r : return matr_asse_temp_r
+  if AsType(MATR_ASSE) == matr_asse_pres_r : return matr_asse_pres_r
+  raise AsException("type de concept resultat non prevu")
+
+FACT_GRAD=OPER(nom="FACT_GRAD",op=85,sd_prod=fact_grad_prod,docu="U4.55.03-E",
+               fr="Préconditionnement pour résolution par gradient conjugué",
+               reentrant='n',
+         MATR_ASSE       =SIMP(statut='o',
+                               typ=(matr_asse_depl_r,matr_asse_temp_r,
+                                    matr_asse_pres_r) ),
+         PRE_COND        =SIMP(statut='f',typ='TXM',defaut="LDLT_INC",into=("LDLT_INC",) ),
+         NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),  
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 16/12/97   AUTEUR CIBHHLV L.VIVAN 
+FACT_INTE_SPEC=OPER(nom="FACT_INTE_SPEC",op= 117,sd_prod=interspfact,
+                    fr="Factorisation d une matrice interspectrale hermitienne",
+                    docu="U4.36.04-E",reentrant='n',
+         regles=(ENSEMBLE('FREQ_FIN','NB_POIN'),),
+#  regle non indiquée dans la doc U         
+         INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
+         NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+         FREQ_INIT       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         FREQ_FIN        =SIMP(statut='f',typ='R' ),
+         NB_POIN         =SIMP(statut='f',typ='I',defaut= 0 ),
+         SUR_ECHAN       =SIMP(statut='f',typ='R',defaut= 1. ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 25/11/97   AUTEUR VABHHTS J.PELLET 
+def fact_ldlt_prod(MATR_ASSE,**args):
+  if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_depl_r
+  if AsType(MATR_ASSE) == matr_asse_depl_c : return matr_asse_depl_c
+  if AsType(MATR_ASSE) == matr_asse_temp_r : return matr_asse_temp_r
+  if AsType(MATR_ASSE) == matr_asse_temp_c : return matr_asse_temp_c
+  if AsType(MATR_ASSE) == matr_asse_pres_r : return matr_asse_pres_r
+  if AsType(MATR_ASSE) == matr_asse_pres_c : return matr_asse_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+FACT_LDLT=OPER(nom="FACT_LDLT",op=14,sd_prod=fact_ldlt_prod,fr="Factorisation en place ou hors place",
+               docu="U4.55.01-F",reentrant='f',
+         regles=(EXCLUS('BLOC_DEBUT','DDL_DEBUT'),
+                 EXCLUS('BLOC_FIN','DDL_FIN'),),
+         MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,
+                                               matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ),
+         STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         NPREC           =SIMP(statut='f',typ='I',defaut=8),
+         PRE_COND        =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","DIAG") ),
+         BLOC_DEBUT      =SIMP(statut='f',typ='I'),
+         DDL_DEBUT       =SIMP(statut='f',typ='I'),
+         BLOC_FIN        =SIMP(statut='f',typ='I'),
+         DDL_FIN         =SIMP(statut='f',typ='I'),
+#
+         EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+# 
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 23/02/99   AUTEUR D6BHHJP J.P.LEFEBVRE 
+# NEW 5.3.23
+FERMER=PROC(nom="FERMER",op=  10,fr=" ",
+            docu="U4.12.02-A",
+         UNITE           =SIMP(statut='o',typ='I',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 17/11/97   AUTEUR CIBHHLV L.VIVAN 
+FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude",
+         docu="U4.11.02-F",
+         RETASSAGE       =SIMP(fr="provoque le retassage de la base GLOBALE",
+                               statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         PERFORMANCE     =SIMP(fr="provoque l'impression d'un résumé des mesures de temps ",
+                               statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+         INFO_RESU       =SIMP(fr="provoque l'impression des informations sur les structures de données",
+                               statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="MESSAGE"),
+)  ;
+#& MODIF COMMANDE  DATE 06/05/96   AUTEUR KXBADNG T.FRIOU 
+FONC_FLUI_STRU=OPER(nom="FONC_FLUI_STRU",op= 169,sd_prod=fonction,
+                    fr="Création d'une fonction constante (concept de type fonction), paramétrée par l'abscisse curviligne et donnant la valeur du coefficient de masse ajoutée pour une configuration du type faisceau de tubes sous écoulement transverse",
+                    docu="U4.35.02-C",reentrant='n',
+         TYPE_FLUI_STRU  =SIMP(statut='o',typ=(type_flui_stru) ),
+)  ;
+#& MODIF COMMANDE  DATE 12/09/2001   AUTEUR MCOURTOI M.COURTOIS 
+FORMULE = FORM( nom='FORMULE',op=-5,sd_prod=fonction,
+                fr="Définition d une fonction",reentrant = 'n',
+                regles=(UN_PARMI('REEL','ENTIER','COMPLEXE'),),
+                REEL = SIMP(typ = 'shell',max=1),
+                ENTIER = SIMP(typ = 'shell',max=1),
+                COMPLEXE = SIMP(typ = 'shell',max=1),
+) ;
+#& MODIF COMMANDE  DATE 04/02/98   AUTEUR CIBHHLV L.VIVAN 
+GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=tabl_fonc,
+                    fr="Génération de la fonction temporelle à partir d une matrice interspectrale factorisée",
+                    docu="U4.36.05-E",reentrant='n',
+         INTE_SPEC_FACT  =SIMP(statut='o',typ=interspfact ),
+         INIT_ALEA       =SIMP(statut='f',typ='I',defaut= 12312745 ),
+         NB_TIRAGE       =SIMP(statut='f',typ='I',defaut= 1 ),
+         NB_POIN         =SIMP(statut='f',typ='I' ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 17/10/95   AUTEUR ACBHHLB L.VIVAN 
+IMPR_CHARGE=PROC(nom="IMPR_CHARGE",op= 158,
+                 fr="Impression des charges mécaniques de type degrés de liberté imposés et relations linéaires entre les degrés de liberté au format fichier universel IDEAS",
+                 docu="U7.04.31-C",
+         FICHIER         =SIMP(statut='f',typ='TXM' ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",) ),
+         VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+         CHARGE          =SIMP(statut='o',typ=char_meca,max='**', ),
+)  ;
+#& MODIF COMMANDE  DATE 30/09/98   AUTEUR SABJLMA P.LATRUBESSE 
+IMPR_CLASSI=PROC(nom="IMPR_CLASSI",op= 114,docu="U7.04.21-A",
+                 fr="Ecriture sur fichier, du rèsultat d une analyse modale au format du code CLASSI (interaction sol structure) utilisè au SEPTEN",
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','FREQ','NUME_MODE','LIST_FREQ',
+                        'LIST_ORDRE' ),),
+         UNITE_CLASSI    =SIMP(statut='o',typ='I' ),
+         MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+         b_prec_crit     =BLOC(condition = "LIST_FREQ != None or FREQ != None",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
+                                   into=("RELATIF","ABSOLU") ),
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO', ),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         AMOR            =SIMP(statut='o',typ='R',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 12/05/98   AUTEUR CIBHHLV L.VIVAN 
+IMPR_CO=PROC(nom="IMPR_CO",op=17,docu="U4.91.11-F",
+             fr="Impression du contenu d un concept utilisateur (pour développeur)",
+         regles=(UN_PARMI('CO','CHAINE', ),),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),  
+         NIVEAU          =SIMP(statut='f',typ='I',defaut=2,into=(0,1,2) ),
+         ATTRIBUT        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","OUI") ),
+         CONTENU         =SIMP(statut='f',typ='TXM',defaut="OUI",into=("NON","OUI") ),
+         BASE            =SIMP(statut='f',typ='TXM',defaut="G",into=("","G","V","L") ),
+         CO              =SIMP(statut='f',typ=assd),
+         CHAINE          =SIMP(statut='f',typ='TXM'),  
+         POSITION        =SIMP(statut='f',typ='I',defaut=1),  
+)  ;
+#& MODIF COMMANDE  DATE 03/05/2000   AUTEUR CIBHHLV L.VIVAN 
+IMPR_COURBE=PROC(nom="IMPR_COURBE",op= 141,fr="Impression, sur fichiers,  sous formats appropriés, de concepts de type fonction ou de fonctions extraites de listes, de tables et de concepts résultats",
+                 docu="U4.33.01-D",
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         FORMAT          =SIMP(statut='f',typ='TXM',position='global'
+                              ,into=("AGRAF","POSTSCRIPT","RESULTAT","COMMANDE","SEISME") ),
+         b_agraf_post =BLOC(condition = "(FORMAT=='AGRAF') or (FORMAT=='POSTSCRIPT')",fr="Mots-clés communs AGRAF et POSTCRIPT",
+           BORNE_X         =SIMP(statut='f',typ='R',max=02,fr="Intervalles de variation des abcisses"),
+           ECHELLE_X       =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),fr="Type d'échelle pour les abcisses" ),
+           BORNE_Y         =SIMP(statut='f',typ='R',max=02,fr="Intervalles de variation des ordonnées"),
+           ECHELLE_Y       =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),fr="Type d'échelle pour les ordonnées" ),
+         ),
+         b_agraf =BLOC(condition = "(FORMAT=='AGRAF')",fr="Mots-clés propres à AGRAF",
+           TITRE_GRAPHIQUE =SIMP(statut='f',typ='TXM',fr="Titre associé au graphique" ),
+           COMMENTAIRE     =SIMP(statut='f',typ='TXM',max='**',fr="Commentaires associés au graphique"),
+           LEGENDE_X       =SIMP(statut='f',typ='TXM',fr="Légende associée à l axe des abcisses" ),
+           LEGENDE_Y       =SIMP(statut='f',typ='TXM',fr="Légende associée à l axe des ordonnées" ),
+           FREQ_GRILLE_X   =SIMP(statut='f',typ='I',defaut= 0,fr="Fréquence de tracage du quadrillage vertical" ),
+           FREQ_GRILLE_Y   =SIMP(statut='f',typ='I',defaut= 0,fr="Fréquence de tracage du quadrillage horizontal" ),
+         ), 
+         b_post = BLOC (  condition = "(FORMAT=='POSTSCRIPT')",fr="Mots-clés propres à POSTCRIPT",
+           TITRE           =SIMP(statut='f',typ='TXM',fr="Titre associé au graphique" ),
+           LABEL_X         =SIMP(statut='f',typ='TXM',fr="Légende associée à l axe des abcisses" ),
+           LABEL_Y         =SIMP(statut='f',typ='TXM',fr="Légende associée à l axe des ordonnées" ),
+           SORTIE          =SIMP(statut='f',typ='TXM',defaut="COULEUR",into=("MONOCHROME","COULEUR"),fr="Type d impression" ),
+           DATE            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),fr="Impression de la date" ),
+           GRILLE          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),fr="Impression du quadrillage" ),
+           AXE_ZERO_X      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),fr="Impression de l axe x égal zéro" ),
+           AXE_ZERO_Y      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),fr="Impression de l axe y égal zéro" ),
+           PRESENTATION    =SIMP(statut='f',typ='TXM',defaut="PAYSAGE",into=("PAYSAGE","PORTRAIT"),fr="Disposition du graphique sur la feuille" ),
+           FENETRE         =SIMP(statut='f',typ='TXM',defaut="RECTANGLE",into=("CARREE","RECTANGLE"),fr="Forme de la fenêtre contenant le graphique" ),
+         ),  
+         COURBE          =FACT(statut='o',min=01,max='**',fr="Définition de la courbe à tracer",
+           regles=(UN_PARMI('FONCTION','LIST_RESU','TABLE','FONC_X','RESU_GENE'),),
+           FONCTION        =SIMP(statut='f',typ=(fonction, fonction_c),
+                                 fr="Fonction réelle ou complexe", ),
+           LIST_RESU       =SIMP(statut='f',typ=listr8,
+                                 fr="Liste des ordonnees d une fonction réelle définie par deux listes", ),
+#  creer le type table            
+           TABLE           =SIMP(statut='f',typ=table,
+                                 fr="Nom de la table dont 2 colonnes définissent la fonction",),
+           FONC_X          =SIMP(statut='f',typ=fonction,
+                                 fr="Fonction abscisses d une fonction paramétrique",),
+           RESU_GENE       =SIMP(statut='f',typ=tran_gene,
+                                 fr="Nom du RESU_GENE qui contient les informations liées à des noeuds de choc et qui seront tracées sous forme de fonction", ), 
+           b_fonction      =BLOC(condition = "FONCTION != None",                          
+             LIST_PARA       =SIMP(statut='f',typ=listr8 ),
+             b_fonction_c  =BLOC(condition = "AsType(FONCTION) == fonction_c",
+                                   fr="Fonction complexe définie par le mot-clé fonction",
+               PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),           
+             ),
+           ),   
+           b_list_resu     =BLOC(condition = "LIST_RESU != None",                                
+             LIST_PARA       =SIMP(statut='o',typ=listr8 ),
+           ),  
+           b_table         =BLOC(condition = "TABLE != None",                                         
+             PARA_X          =SIMP(statut='o',typ='TXM',fr="Paramètre de la table associé aux abcisses de la fonction à tracer" ),
+             PARA_Y          =SIMP(statut='o',typ='TXM',fr="Paramètre de la table associé aux ordonnées de la fonction à tracer" ),        
+           ), 
+           b_fonc_x        =BLOC(condition = "FONC_X != None",                                          
+             FONC_Y          =SIMP(statut='o',typ=fonction,fr="Fonction ordonnées d une fonction paramétrique" ),
+             PARA            =SIMP(statut='f',typ='TXM',defaut="FONC_X",into=("FONC_X","FONC_Y"),fr="Permutation des rôles des deux fonctions" ),
+             LIST_PARA       =SIMP(statut='f',typ=listr8 ),                
+           ),
+           b_resu_gene     =BLOC(condition = "RESU_GENE != None",                                
+             regles=(UN_PARMI('NOEUD_CHOC','GROUP_NO_CHOC'),),                      
+             NOEUD_CHOC      =SIMP(statut='f',typ=no),
+             GROUP_NO_CHOC   =SIMP(statut='f',typ=grno),
+             PARA_X          =SIMP(statut='o',typ='TXM',fr="Paramètre associé aux abcisses de la fonction à tracer de la table information sur les chocs " ),
+             PARA_Y          =SIMP(statut='o',typ='TXM',fr="Paramètre associé aux ordonnées de la fonction à tracer de la table information sur les chocs " ),
+             LIST_PARA       =SIMP(statut='f',typ=listr8 ),   
+             SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+             INTITULE        =SIMP(statut='f',typ='TXM' ),               
+           ), 
+                 
+               
+           LEGENDE         =SIMP(statut='f',typ='TXM',fr="Légende associée à la courbe" ),
+           STYLE           =SIMP(statut='f',typ='TXM',defaut="LIGNE",fr="Style de la ligne représentant la courbe",
+                                 into=("LIGNE","POINTILLE","POINT","POINT_RELIE") ),
+           COULEUR         =SIMP(statut='f',typ='TXM',fr="Couleur associée à la courbe",
+                                 into=("NOIR","ROUGE","VERT_FONCE","BLEU",
+                                       "MAGENTA","CYAN","VERT","SIENNE","ORANGE",
+                                       "POURPRE","JAUNE","DAIM","TURQUOISE","VIOLET",
+                                       "BRUN","CORAIL","MARRON","MAUVE","MARRON_CLAIR") ),
+           MARQUEUR        =SIMP(statut='f',typ='TXM',fr="Type du marqueur associé à la courbe",
+                                 into=("POINT_F","CARRE_F","TRIANGLE_F",
+                                       "LOSANGE_F","ETOILE_F","FUSEE_F","POINT",
+                                       "CARRE","TRIANGLE","LOSANGE","ETOILE","FUSEE",
+                                       "PLUS","X","CERCLE","CERCLE_P","CARRE_P",
+                                       "LOSANGE_P","CERCLE_P_X","LOSANGE_P_X",
+                                       "CERCLE_X","CARRE_X","LOSANGE_X") ),
+            b_agraf =BLOC(condition = "(FORMAT=='AGRAF')",fr="Mots-clés propres à AGRAF",
+              TRI             =SIMP(statut='f',typ='TXM',defaut="N",fr="Choix du tri effectué sur les abcisses ou sur les ordonnées",
+                                    into=("N","X","Y","XY","YX") ),
+              FREQ_MARQUEUR   =SIMP(statut='f',typ='I',defaut= 0,fr="Fréquence d impression du marqueur associé à la courbe", ),          
+            ), 
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 02/02/2000   AUTEUR UFBHHGN G.NICOLAS 
+IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-A",
+                    fr="Imprimer le fichier de configurations de HOMARD",
+         TRAITEMENT      =FACT(statut='o',min=01,max=01,
+           regles=( UN_PARMI('ADAPTATION','UNIFORME','MAJSOLUTION','INFORMATION'),),
+           ADAPTATION      =SIMP(statut='f',typ='TXM',     
+                                 fr="Adaptation libre",
+                                 into=("RAFFINEMENT","DERAFFINEMENT","RAFF_DERA") ),
+           UNIFORME        =SIMP(statut='f',typ='TXM',     
+                                 into=("RAFFINEMENT","DERAFFINEMENT","RIEN") ),
+           MAJSOLUTION     =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           INFORMATION     =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           b_adaptation =BLOC(condition = "( UNIFORME != None ) or ( ADAPTATION != None ) or ( MAJSOLUTION != None ) ",
+                           fr="Adaptation",
+                           NITER           =SIMP(statut='o',typ='I' ),
+                           MAJ_CHAMP       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                           ) ,
+           b_adaptation_libre  =BLOC(condition = "ADAPTATION != None",
+                           fr="Adaptation libre",
+                           NOM_MED_INDICA  =SIMP(statut='o',typ='TXM' ),
+                           NOM_CMP_INDICA  =SIMP(statut='f',typ='TXM',defaut="ERREST",    
+                                   into=("ERREST","NUEST") ),
+                           NOM_MED_SUPPOR  =SIMP(statut='o',typ='TXM' ),
+                           ) ,
+           b_raffinement_libre   =BLOC( condition = "( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'RAFFINEMENT' )" ,
+                           fr="Critère de raffinement.",
+                           regles=(UN_PARMI ( 'CRIT_RAFF_ABS', 'CRIT_RAFF_REL', 'CRIT_RAFF_PE' ),),
+                           CRIT_RAFF_ABS   =SIMP(statut='f',typ='R' ),
+                           CRIT_RAFF_REL   =SIMP(statut='f',typ='R' ),
+                           CRIT_RAFF_PE    =SIMP(statut='f',typ='R' ),
+                           ) ,
+           b_deraffinement_libre   =BLOC ( condition = "( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'DERAFFINEMENT' )" ,
+                             fr="Critère de déraffinement.",
+                             regles=(UN_PARMI ( 'CRIT_DERA_ABS', 'CRIT_DERA_REL', 'CRIT_DERA_PE' ),),
+                             CRIT_DERA_ABS   =SIMP(statut='f',typ='R' ),
+                             CRIT_DERA_REL   =SIMP(statut='f',typ='R' ),
+                             CRIT_DERA_PE    =SIMP(statut='f',typ='R' ),
+                           ) ,
+           b_raffinement =BLOC ( condition = " ( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'RAFFINEMENT' ) or ( UNIFORME == 'RAFFINEMENT' )" ,
+                             NIVE_MAX        =SIMP(statut='f',typ='I' ),
+                           ) ,
+           b_deraffinement =BLOC ( condition = " ( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'DERAFFINEMENT' ) or ( UNIFORME == 'DERAFFINEMENT' )" ,
+                             NIVE_MIN        =SIMP(statut='f',typ='I' ),
+                           ) ,
+         ),
+         ANALYSE         =FACT(statut='f',min=01,max=01,
+           regles=(AU_MOINS_UN('QUALITE','INTERPENETRATION'),),
+           QUALITE         =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           INTERPENETRATION=SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+         ),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 71 ),  
+         REP             =SIMP(statut='f',typ='TXM' ),  
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 27/04/98   AUTEUR CIBHHLV L.VIVAN 
+IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,fr="Calcul du dommage subi par une structure soumise à une sollicitation de type aléatoire fichier, au format 'RESULTAT'",
+               docu="U4.91.02-C",
+         GENE            =FACT(statut='o',min=01,max='**',
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                          'LIST_INST','LIST_FREQ','TOUT_MODE','TOUT_INST','LIST_ORDRE'),
+                   EXCLUS('TOUT_MODE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                          'LIST_INST','LIST_FREQ','TOUT_ORDRE','TOUT_INST','LIST_ORDRE'),
+                   EXCLUS('TOUT_INST','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                          'LIST_INST','LIST_FREQ','TOUT_ORDRE','LIST_ORDRE'),
+                   EXCLUS('TOUT_CMP_GENE','NUME_CMP_GENE'),
+                   EXCLUS('TOUT_CHAM','NOM_CHAM'),
+                   EXCLUS('TOUT_PARA','NOM_PARA'),),
+#  faut-il faire des blocs selon le type de RESU_GENE                   
+           RESU_GENE       =SIMP(statut='o',typ=(vect_asse_gene, tran_gene, mode_gene, harm_gene)),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",into=("RESULTAT",) ),
+           FICHIER         =SIMP(statut='f',typ='TXM' ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+           TOUT_MODE       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ),
+           TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+           b_prec_crit     =BLOC(condition = "LIST_FREQ != None or FREQ != None",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
+                                   into=("RELATIF","ABSOLU") ),
+           ),
+           TOUT_CMP_GENE   =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NUME_CMP_GENE   =SIMP(statut='f',typ='I',max='**'),
+           TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',max='**'),
+           TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           INFO_CMP_GENE   =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           INFO_GENE       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+         ),
+)  ;
+#& MODIF COMMANDE DATE 16/10/90 AUTEUR INCONNU INCONNU
+IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,docu="U4.91.21-F",
+                 fr="Impression de caractéristiques d'objets JEVEUX (pour développeur)",
+         ENTITE          =SIMP(fr="choix de l'observation",statut='o',typ='TXM',                                                                                                                                                                                                    
+                               into=("DISQUE","MEMOIRE","REPERTOIRE",    
+                                     "OBJET","ATTRIBUT","SYSTEME") ),
+         b_objet      =BLOC(condition = "(ENTITE=='OBJET')",
+            NOMOBJ          =SIMP(fr="nom d'objet",statut='f',typ='TXM' ),  
+            NUMOC           =SIMP(fr="numéro d objet de collection",statut='f',typ='I' ),  
+            NOMOC           =SIMP(fr="nom d'objet de collection",statut='f',typ='TXM' ),  
+         ),
+         b_attribut   =BLOC(condition = "(ENTITE=='ATTRIBUT')",
+            NOMOBJ          =SIMP(fr="nom de collection",statut='f',typ='TXM' ),  
+            NOMATR          =SIMP(fr="nom d attribut de collection",statut='f',typ='TXM',
+                                  into=('$$DESO','$$IADD','$$IADM','$$NOM','$$LONG',
+                                      '$$LONO','$$LUTI','$$NUM') ),
+         ),
+         b_systeme    =BLOC(condition = "(ENTITE=='SYSTEME')",
+            CLASSE          =SIMP(statut='o',typ='TXM',into=('G','V','L') ),  
+            NOMATR          =SIMP(fr="nom d attribut systeme",statut='f',typ='TXM',   
+                                  into=('$$CARA','$$IADD','$$GENR','$$TYPE','$$ETAT',
+                                      '$$DOCU','$$ORIG','$$RNOM','$$LTYP','$$LONG',
+                                      '$$LONO','$$DATE','$$LUTI','$$HCOD','$$INDX',
+                                      '$$TLEC','$$TECR','$$IADM','$$ACCE') ),
+         ),
+         b_repertoire =BLOC(condition = "(ENTITE=='REPERTOIRE')",
+            CLASSE          =SIMP(statut='f',typ='TXM',into=('G','V','L',' '),defaut=' '),  
+         ),
+         b_disque     =BLOC(condition = "(ENTITE=='DISQUE')",
+            CLASSE          =SIMP(statut='f',typ='TXM' ,into=('G','V','L',' '),defaut=' '),  
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           NOM             =SIMP(statut='f',typ='TXM' ),  
+           UNITE           =SIMP(statut='f',typ='I'),  
+         ),
+         COMMENTAIRE     =SIMP(statut='f',typ='TXM' ),  
+)  ;
+#& MODIF COMMANDE  DATE 09/09/98   AUTEUR ACBHHCD G.DEVESA 
+IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,fr="Impression au format fichier universel IDEAS ou au format MISS3D ou au format RESULTAT d un concept de type macr_elem_dyna",
+                    docu="U7.04.33-C",
+         MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+         FICHIER         =SIMP(statut='f',typ='TXM' ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
+                               into=("MISS_3D","IDEAS","CADYRO",) ),
+         b_ideas         =BLOC(condition = "FORMAT == 'IDEAS'",
+           VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+         ),                      
+         b_miss_3d       =BLOC(condition = "FORMAT == 'MISS_3D'",
+           UNITE           =SIMP(statut='f',typ='I',defaut= 26 ),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           GROUP_MA_INTERF =SIMP(statut='o',typ=grma,max='**'),
+#  Ces trois mots cles sont-ils dans le bon bloc et avec le bon statut        
+           GROUP_MA_FLU_STR=SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA_FLU_SOL=SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA_SOL_SOL=SIMP(statut='f',typ=grma,max='**'),
+           IMPR_MODE_MECA  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           IMPR_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         b_cadyro        =BLOC(condition = "FORMAT == 'CADYRO'",
+           SQUELETTE       =SIMP(statut='f',typ=squelette ),
+           UNITE_MODE_MECA =SIMP(statut='f',typ='I',defaut= 26 ),
+           UNITE_MODE_STAT =SIMP(statut='f',typ='I',defaut= 27 ),
+           UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut= 28 ),
+           IMPR_MODE_MECA  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           IMPR_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+
+)  ;
+#& MODIF COMMANDE  DATE 07/04/98   AUTEUR CIBHHGB G.BERTRAND 
+IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,fr="Impression au format universel IDEAS ou au format RESULTAT des matrices élémentaires et des matrices assemblées",
+                  docu="U7.04.32-C",
+         regles=(AU_MOINS_UN('MATR_ELEM','MATR_ASSE'),),
+         
+         MATR_ELEM       =FACT(statut='f',min=01,max='**',
+           FICHIER         =SIMP(statut='f',typ='TXM' ),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
+                                 into=("IDEAS","RESULTAT") ),
+           b_format      =BLOC(condition = "FORMAT == 'IDEAS'",
+             VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+           ),
+#  créer les types matr_elem  et vect_elem        
+           MATRICE         =SIMP(statut='o',typ=(matr_elem, vect_elem)),
+#  Quelle regle pour TOUT, NOEUD, GROUP_NO, MAILLE, GROUP_MA           
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           GRAIN           =SIMP(statut='f',typ='TXM',defaut="VALEUR",
+                                 into=("VALEUR","NOEUD","MAILLE") ),
+           NB_CHIFFRE      =SIMP(statut='f',typ='I',defaut= 4 ),
+         ),
+         MATR_ASSE       =FACT(statut='f',min=01,max='**',
+           FICHIER         =SIMP(statut='f',typ='TXM' ),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
+                                 into=("IDEAS","RESULTAT") ),
+           VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+#  créer le type matr_elem           
+           MATRICE         =SIMP(statut='o',typ=matr_asse),
+#  Quelle regle pour TOUT, NOEUD, GROUP_NO, MAILLE, GROUP_MA                      
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="SOUS_MATRICE",
+                                 into=("SOUS_MATRICE","LIGNE","COLONNE") ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           GRAIN           =SIMP(statut='f',typ='TXM',defaut="VALEUR",
+                                 into=("VALEUR","NOEUD") ),
+           NB_CHIFFRE      =SIMP(statut='f',typ='I',defaut= 4 ),
+           VALE_ZERO       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN 
+IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,fr="Permet de transmettre au format MISS3D la contribution des charges internes à une superstructure sous forme d un second membre projeté sur la base modale (modes propres ou contraints), les signaux d excitation harmonique ou transitoire",
+                  docu="U7.04.11-C",
+         regles=(UN_PARMI('INST_INIT','FREQ_INIT'),
+                 PRESENT_PRESENT('INST_INIT','INST_FIN'),
+                 PRESENT_PRESENT('FREQ_INIT','FREQ_FIN'),),
+         MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+         EXCIT           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('FONC_MULT','COEF_MULT' ),),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+         ),
+         EXCIT_SOL       =FACT(statut='f',min=01,max='**',
+           DIRECTION       =SIMP(statut='o',typ='R',max='**'),
+           FONC_SIGNAL     =SIMP(statut='f',typ=fonction ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",
+                                 into=("DEPL","VITE","ACCE","FORC",) ),
+         ),
+         INST_INIT       =SIMP(statut='f',typ='R' ),
+         INST_FIN        =SIMP(statut='f',typ='R' ),
+         FREQ_INIT       =SIMP(statut='f',typ='R' ),
+         FREQ_FIN        =SIMP(statut='f',typ='R' ),
+         PAS             =SIMP(statut='o',typ='R' ),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 26 ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 19/06/2000   AUTEUR DURAND C.DURAND
+IMPR_RESU=PROC(nom="IMPR_RESU",op=39,docu="U4.91.01-E",
+               fr="Impression du résultat d un calcul (différents formats)",
+         MODELE          =SIMP(statut='f',typ=modele),
+         RESU            =FACT(statut='o',min=01,max='**',
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
+                                 into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED") ),
+                                 
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),  
+
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+           
+           regles=(AU_MOINS_UN('CHAM_GD','RESULTAT','MAILLAGE'),
+                   EXCLUS('CHAM_GD','RESULTAT'),),
+           MAILLAGE        =SIMP(statut='f',typ=(maillage,squelette)),
+           INFO_MAILLAGE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CHAM_GD         =SIMP(statut='f',typ=cham_gd),
+           RESULTAT        =SIMP(statut='f',typ=resultat),# CO() sd a creer !!!
+           
+           b_extrac        =BLOC(condition="RESULTAT != None",
+                                 fr="extraction d un champ de grandeur",
+             regles=(EXCLUS('TOUT_CHAM','NOM_CHAM'),
+                     EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP',
+                            'LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS','ANGL'),),
+             TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',max='**'),
+             
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+             NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis),
+             NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+             NOM_CAS         =SIMP(statut='f',typ='TXM',max='**'),
+             ANGL            =SIMP(statut='f',typ='R',max='**'),
+             FREQ            =SIMP(statut='f',typ='R',max='**'),
+             LIST_FREQ       =SIMP(statut='f',typ=listr8),
+             INST            =SIMP(statut='f',typ='R',max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8),
+             
+             b_acce_reel     =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
+               PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+           ),
+
+           b_parametres    =BLOC(condition="""(RESULTAT != None)and(FORMAT == 'RESULTAT')""",
+             regles=(EXCLUS('TOUT_PARA','NOM_PARA'),),
+             INFO_RESU       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+             TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI","NON",) ),
+             NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),
+             FORM_TABL       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           ),
+            
+           b_cmp           =BLOC(condition="""(RESULTAT != None)and((FORMAT == 'RESULTAT')or(FORMAT == 'ENSIGHT'))""",
+                                 fr="sélection des composantes",
+             regles=(EXCLUS('TOUT_CMP','NOM_CMP'),),
+             TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           ),
+            
+           b_topologie       =BLOC(condition="""(RESULTAT != None)and((FORMAT == 'RESULTAT')or(FORMAT == 'IDEAS'))""",
+                                   fr="sélection des entités toplogiques",
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ),
+           
+           b_valeurs         =BLOC(condition="(FORMAT == 'RESULTAT')",
+                                   fr="sélection sur les valeurs",
+             VALE_MAX        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             VALE_MIN        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             BORNE_SUP       =SIMP(statut='f',typ='R'),
+             BORNE_INF       =SIMP(statut='f',typ='R'),
+             IMPR_COOR       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+             FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5"),
+           ),
+
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           FICHIER         =SIMP(statut='f',typ='TXM'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE  DATE 18/04/2000   AUTEUR D6BHHBQ B.QUINNEZ 
+IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de valeurs propres dans un intervalle donné",
+                docu="U4.52.01-F",
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="DYNAMIQUE",into=("MODE_FLAMB","DYNAMIQUE"),
+                              fr="Type d analyse" ),
+         b_dynamique  =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+                            fr="Recheche du nombre de fréquences propres",
+             FREQ_MIN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ,fr="Borne inférieure de l intervalle" ),
+             FREQ_MAX        =SIMP(statut='o',typ='R',fr="Borne supérieure de l intervalle" ),
+         ),
+         b_mode_flamb =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+                            fr="Recherche du nombre de charges critiques",
+             CHAR_CRIT_MIN   =SIMP(statut='o',typ='R',fr="Borne inférieure de l intervalle" ),
+             CHAR_CRIT_MAX   =SIMP(statut='o',typ='R',fr="Borne supérieure de l intervalle" ),
+         ),
+         NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8 ),
+         NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+         SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+)  ;
+#& MODIF COMMANDE  DATE 22/07/99   AUTEUR CIBHHLV L.VIVAN 
+IMPR_TABLE=PROC(nom="IMPR_TABLE",op=155,docu="U4.91.03-C",
+                fr="Impression d un concept de type table",
+         TABLE           =SIMP(statut='o',typ=table),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT", ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="EXCEL",    
+                               into=("EXCEL","AGRAF","MOT_CLE","TABLEAU") ),
+         FILTRE          =FACT(statut='f',min=01,max='**',
+           NOM_PARA        =SIMP(statut='o',typ='TXM'),  
+           CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",    
+                                 into=("EQ","LT","GT","NE","LE","GE","VIDE",     
+                                       "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI") ),
+           VALE            =SIMP(statut='f',typ='R'),  
+           VALE_I          =SIMP(statut='f',typ='I'),  
+           VALE_C          =SIMP(statut='f',typ='C'),  
+           VALE_K          =SIMP(statut='f',typ='TXM'),  
+           VALE_CO         =SIMP(statut='f',typ=geom),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+         ),
+         TRI             =FACT(statut='f',min=01,max=01,
+           NOM_PARA        =SIMP(statut='o',typ='TXM',max='**'),  
+           ORDRE           =SIMP(statut='f',typ='TXM',max='**',defaut="CROISSANT",    
+                                 into=("CROISSANT","DECROISSANT") ),
+         ),
+         PAGINATION      =SIMP(statut='f',typ='TXM',max='**'),  
+         FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5"),  
+         FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",
+                                    into=("MODULE_PHASE","REEL_IMAG") ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),  
+         TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         IMPR_FONCTION   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN 
+INCLUDE=MACRO(nom="INCLUDE",op=-1,docu="U4.13.01-e",
+             fr="Débranchement vers un fichier de commandes secondaires",
+             sd_prod=ops.INCLUDE,op_init=ops.INCLUDE_context,fichier_ini=1,
+         UNITE = SIMP(statut='o',typ='I'),
+         INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+);
+#& MODIF COMMANDE  DATE 07/02/2001   AUTEUR DURAND C.DURAND 
+INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,docu="U4.43.02-a",
+                       fr=" ",
+         sd_prod=ops.INCLUDE_MATERIAU,op_init=ops.INCLUDE_context,fichier_ini=0,
+         NOM_AFNOR       =SIMP(statut='o',typ='TXM' ),  
+         TYPE_MODELE     =SIMP(statut='o',typ='TXM',into=("REF","PAR") ),
+         VARIANTE        =SIMP(statut='o',typ='TXM',     
+                               into=("A","B","C","D","E","F","G","H","I","J",    
+                                     "K","L","M","N","O","P","Q","R","S","T","U","V",   
+                                     "W","X","Y","Z",) ),
+         TYPE_VALE       =SIMP(statut='o',typ='TXM',into=("NOMI","MINI","MAXI") ),
+         NOM_MATER       =SIMP(statut='o',typ='TXM' ),  
+         UNITE           =SIMP(statut='f',typ='I',defaut= 32 ),  
+         EXTRACTION      =FACT(statut='f',min=01,max=99,
+           COMPOR          =SIMP(statut='o',typ='TXM' ),  
+           TEMP_EVAL       =SIMP(statut='o',typ='R' ),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 08/03/2000   AUTEUR CIBHHPD P.DAVID 
+INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe,docu="U4.81.11-E",
+                  fr="Définition d une courbe sur un maillage 2D",reentrant='n',
+         regles=(EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+                 EXCLUS('DEFI_CHEMIN','DEFI_SEGMENT'),
+                 EXCLUS('DEFI_CHEMIN','DEFI_ARC'),),
+         MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         DEFI_SEGMENT    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+                   UN_PARMI('EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),),
+           ORIGINE         =SIMP(statut='f',typ='R',min=2,max=2 ),  
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+           EXTREMITE       =SIMP(statut='f',typ='R',max='**'),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
+         ),
+         DEFI_ARC        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+                   UN_PARMI('RAYON','ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+                   UN_PARMI('RAYON','EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),               
+                   PRESENT_PRESENT('RAYON','SECTEUR'),),
+           CENTRE          =SIMP(statut='f',typ='R',max='**' ),  
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,max=1),
+           RAYON           =SIMP(statut='f',typ='R',max=1),  
+           SECTEUR         =SIMP(statut='f',typ='R',min=2,max=2),  
+           ORIGINE         =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+           EXTREMITE       =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",    
+                                 into=("RELATIF","ABSOLU",) ),
+         ),
+         DEFI_CHEMIN     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+         NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+         GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 08/03/2000   AUTEUR CIBHHPD P.DAVID 
+INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface,docu="U4.81.12-E",
+                  fr="Définition d un chemin sur un maillage 3D",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         DEFI_SEGMENT    =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+                   UN_PARMI('EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),),
+           ORIGINE         =SIMP(statut='f',typ='R',min=3,max=3),  
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+           EXTREMITE       =SIMP(statut='f',typ='R',min=3,max=3),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
+         ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 02/02/2000   AUTEUR UFBHHGN G.NICOLAS 
+def lire_champ_prod(TYPE=None,**args):
+  if TYPE == "CHAM_NO_TEMP_R" : return cham_no_temp_r
+  if TYPE == "CHAM_NO_DEPL_R" : return cham_no_depl_r
+  raise AsException("type de concept resultat non prevu")
+
+LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
+                fr="Lire un champ dans un fichier et le stocker dans un concept.",
+                docu="U7.02.02-A",reentrant='n',
+#
+# 1. Le maillage support du champ
+#
+         MAILLAGE        =SIMP(statut='o',typ=maillage ),
+#
+# 2. Format de lecture
+#    Remarque : seul MED est operationnel dans cette version.
+#
+         FORMAT          =SIMP(statut='o',typ='TXM',defaut="MED",into=("MED",) ),
+#
+# 3. L'unite logique du fichier.
+#
+         UNITE           =SIMP(statut='f',typ='I',defaut= 81 ),  
+ #
+# 3. Pour le format MED, il faut preciser le nom sous lequel le champ est connu dans le fichier
+#
+         b_format =BLOC(condition = "FORMAT == 'MED'",
+                        fr="Nom du champ dans le fichier MED",
+         NOM_MED         =SIMP(statut='o',typ='TXM' ),),
+#
+# 4. Le type du concept lu
+#
+         TYPE            =SIMP(statut='o',typ='TXM',into=("CHAM_NO_TEMP_R","CHAM_NO_DEPL_R") ),
+#
+# 5. Le niveau d'information
+#
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN 
+LIRE_FONCTION=OPER(nom="LIRE_FONCTION",op=  83,sd_prod=fonction,
+                   fr="Lecture d une fonction dans un fichier ",
+                   docu="U4.32.02-E",reentrant='n',
+         UNITE           =SIMP(statut='o',typ='I' ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC",) ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=02,into=("NON","LIN","LOG") ),
+         PROL_DROIT      =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC",) ),
+         INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=02,into=("NON","LIN","LOG") ),
+         PROL_DROIT_FONC =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 2,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR SABJLMA P.LATRUBESSE 
+LIRE_INTE_SPEC=OPER(nom="LIRE_INTE_SPEC",op= 116,sd_prod=tabl_intsp,
+                    fr="Lecture sur un fichier externe de  fonctions complexes pour créer une matrice interspectrale",
+                    docu="U4.36.01-E",reentrant='n',
+         UNITE           =SIMP(statut='o',typ='I' ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",into=("REEL_IMAG","MODULE_PHASE") ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC",) ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=02,into=("NON","LIN","LOG") ),
+         PROL_DROIT      =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 19/06/2000   AUTEUR DURAND C.DURAND 
+LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage,
+                   fr="Lecture d un fichier de maillage",
+                   docu="U4.21.01-F",reentrant='n',
+         UNITE           =SIMP(statut='f',typ='I',defaut= 20 ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","MED") ),
+         ABSC_CURV       =FACT(statut='f',min=00,max=01,
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+         VERI_MAIL       =FACT(statut='d',min=01,max=01,
+           APLAT           =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+         ),
+         INFO_MED        =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 02/10/96   AUTEUR CIBHHLV L.VIVAN 
+def lire_miss_3d_prod(TYPE_RESU,**args):
+  if TYPE_RESU == "TRANS" : return dyna_trans
+  if TYPE_RESU == "HARMO" : return dyna_harmo
+  raise AsException("type de concept resultat non prevu")
+
+LIRE_MISS_3D=OPER(nom="LIRE_MISS_3D",op= 163,sd_prod=lire_miss_3d_prod,
+                  fr="Restitution au format MISS3D d une évolution harmonique ou transitoire",
+                  docu="U7.02.31-C",reentrant='n',
+         MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 27 ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="TRANS",into=("TRANS","HARMO") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 08/09/98   AUTEUR CIBHHLV L.VIVAN 
+LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
+                 fr=" ",
+                 docu="U7.02.11-A",reentrant='n',
+         regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 19 ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",)),
+         MAIL_PLEXUS     =SIMP(statut='o',typ=maillage ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage ),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8 ),
+         b_prec_crit     =BLOC(condition = "LIST_INST != None or INST != None",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
+                                   into=("RELATIF","ABSOLU") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 03/05/2000   AUTEUR CIBHHLV L.VIVAN
+def lire_resu_prod(TYPE_RESU,**args):
+  if TYPE_RESU == "EVOL_CHAR" :  return evol_char
+  if TYPE_RESU == "EVOL_THER" :  return evol_ther
+  if TYPE_RESU == "EVOL_ELAS" :  return evol_elas
+  if TYPE_RESU == "EVOL_NOLI" :  return evol_noli
+  if TYPE_RESU == "DYNA_TRANS" : return dyna_trans
+  if TYPE_RESU == "DYNA_HARMO" : return dyna_harmo
+  if TYPE_RESU == "HARM_GENE" :  return harm_gene
+  raise AsException("type de concept resultat non prevu")
+
+LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,docu="U7.02.01-C",reentrant='n',
+               fr="Lecture de champs aux noeuds ou par éléments aux noeuds sur un fichier au format universel DEAS ou au format EnSight",
+         regles=(UN_PARMI('MAILLAGE','MODELE'),),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS","ENSIGHT","MED") ),
+         b_unite         =BLOC(condition="FORMAT=='IDEAS'",
+           UNITE           =SIMP(statut='f',typ='I',defaut= 19 ),
+         ),
+         b_nom_fichier     =BLOC(condition="FORMAT=='ENSIGHT'",
+           NOM_FICHIER     =SIMP(statut='f',typ='TXM'),
+         ),
+         TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_THER","EVOL_ELAS","EVOL_NOLI",
+                                                          "DYNA_TRANS","DYNA_HARMO","HARM_GENE","EVOL_CHAR") ),
+         b_evol_elas     =BLOC(condition="TYPE_RESU=='EVOL_ELAS'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',into=("DEPL",) ),
+         ),
+         b_evol_ther     =BLOC(condition="TYPE_RESU=='EVOL_THER'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',into=("TEMP","TEMP_PEAU") ),
+         ),
+         b_evol_char     =BLOC(condition="TYPE_RESU=='EVOL_CHAR'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',into=("PRES",) ),
+         ),
+         b_evol_noli     =BLOC(condition="TYPE_RESU=='EVOL_NOLI'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',into=("DEPL","VITE","ACCE","VARI_ELNO","SIEF_ELNO","EPSA_ELNO") ),
+         ),
+         b_dyna          =BLOC(condition="(TYPE_RESU=='DYNA_TRANS') or (TYPE_RESU=='DYNA_HARMO') or(TYPE_RESU=='HARM_GENE')",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',into=("DEPL","VITE","ACCE",) ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+         MAILLAGE        =SIMP(statut='f',typ=maillage),
+         MODELE          =SIMP(statut='f',typ=modele),
+         NB_VARI         =SIMP(statut='f',typ='I' ),
+         FORMAT_IDEAS    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('POSI_INST','POSI_FREQ'),),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',into=("TEMP","DEPL","VITE","ACCE","PRES","VARI_ELNO",
+                                                                     "SIEF_ELNO","EPSA_ELNO","TEMP_PEAU") ),
+           NUME_DATASET    =SIMP(statut='f',typ='I',into=(55,57,2414) ),
+           RECORD_3        =SIMP(statut='f',typ='I',max='**'),
+           RECORD_6        =SIMP(statut='f',typ='I',max='**'),
+           RECORD_9        =SIMP(statut='f',typ='I',max='**'),
+           POSI_ORDRE      =SIMP(statut='o',typ='I',max='**'),
+           POSI_INST       =SIMP(statut='f',typ='I',max='**'),
+           POSI_FREQ       =SIMP(statut='f',typ='I',max='**'),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+         ),
+         b_extrac        =BLOC(condition="1",fr="accès à un champ dans la structure de données résultat",
+           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST','FREQ','LIST_FREQ'),),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8),
+             
+           b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 19/06/2000   AUTEUR DURAND C.DURAND 
+def macr_adap_mail_prod(self,MAJ_CHAMP,ADAPTATION,**args):
+  mail1=ADAPTATION['MAILLAGE_N']
+  self.type_sdprod(mail1,maillage)
+  mail2=ADAPTATION['MAILLAGE_NP1']
+  self.type_sdprod(mail2,maillage)
+  if MAJ_CHAMP == None:return None
+  for ch in MAJ_CHAMP:
+    t=ch['TYPE_CHAMP']
+    if t == 'CHAM_NO_TEMP_R':self.type_sdprod(ch['CHAMP_MAJ'],cham_no_temp_r)
+    if t == 'CHAM_NO_DEPL_R':self.type_sdprod(ch['CHAMP_MAJ'],cham_no_depl_r)
+  return None
+
+MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=-24,sd_prod=macr_adap_mail_prod,
+                     fr="Adapter un maillage avec le logiciel HOMARD.",
+                     docu="U7.03.01-A",
+         VERSION_HOMARD  =SIMP(statut='f',typ='TXM',defaut="V3_15",    
+                               into=("V3_15","V3_N","V3_N_PERSO",) ),
+         ADAPTATION      =FACT(statut='o',min=01,max=01,
+           regles=(
+                   UN_PARMI('LIBRE','UNIFORME'),
+                  ),
+           LIBRE           =SIMP(statut='f',typ='TXM',
+                                 into=("RAFF_DERA","RAFFINEMENT","DERAFFINEMENT") ),
+           UNIFORME        =SIMP(statut='f',typ='TXM',
+                                 into=("RAFFINEMENT","DERAFFINEMENT","RIEN") ),
+           MAILLAGE_N      =SIMP(statut='o',typ=(CO,maillage) ),
+           MAILLAGE_NP1    =SIMP(statut='o',typ=(CO,maillage) ),
+           b_adaptation_libre   =BLOC( condition = " LIBRE != None " ,
+                           fr="Indicateur d erreur",
+                           RESULTAT_N      =SIMP(statut='o',typ=(evol_elas,evol_noli,evol_ther ) ),
+                           INDICATEUR      =SIMP(statut='o',typ='TXM',     
+                                                 into=("ERRE_ELEM_NOZ1","ERRE_ELEM_NOZ2","ERRE_ELGA_NORE") ),
+                           NOM_CMP_INDICA  =SIMP(statut='f',typ='TXM',defaut="ERREST",    
+                                                 into=("ERREST","NUEST") ),
+                           NUME_ORDRE      =SIMP(statut='f',typ='I' ),  
+                           ) ,
+           b_raffinement_libre   =BLOC( condition = "( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'RAFFINEMENT' )" ,
+                           fr="Critère de raffinement.",
+                           regles=(UN_PARMI ( 'CRIT_RAFF_ABS', 'CRIT_RAFF_REL', 'CRIT_RAFF_PE' ),),
+                           CRIT_RAFF_ABS   =SIMP(statut='f',typ='R' ),  
+                           CRIT_RAFF_REL   =SIMP(statut='f',typ='R' ),  
+                           CRIT_RAFF_PE    =SIMP(statut='f',typ='R' ),  
+                           ) ,
+           b_deraffinement_libre   =BLOC ( condition = "( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'DERAFFINEMENT' )" ,
+                             fr="Crit\350re de déraffinement.",
+                             regles=(UN_PARMI ( 'CRIT_DERA_ABS', 'CRIT_DERA_REL', 'CRIT_DERA_PE' ),),
+                             CRIT_DERA_ABS   =SIMP(statut='f',typ='R' ),  
+                             CRIT_DERA_REL   =SIMP(statut='f',typ='R' ),  
+                             CRIT_DERA_PE    =SIMP(statut='f',typ='R' ),  
+                           ) ,
+           b_raffinement =BLOC ( condition = " ( ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'RAFFINEMENT' ) ) or ( ( UNIFORME != None ) and ( UNIFORME == 'RAFFINEMENT' ) ) " ,
+                             NIVE_MAX        =SIMP(statut='f',typ='I' ),  
+                           ) ,
+           b_deraffinement =BLOC ( condition = " ( ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'DERAFFINEMENT' ) ) or ( ( UNIFORME != None ) and ( UNIFORME == 'DERAFFINEMENT' ) ) " ,
+                             NIVE_MIN        =SIMP(statut='f',typ='I' ),
+                           ) ,
+         ),
+         MAJ_CHAMP       =FACT(statut='f',min=01,max='**',
+           RESULTAT        =SIMP(statut='o',
+                                 typ=(evol_elas,evol_noli,evol_ther) ),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM' ),  
+           NUME_ORDRE      =SIMP(statut='f',typ='I' ),  
+           CHAMP_MAJ       =SIMP(statut='o',typ=(CO,cham_gd)),
+           TYPE_CHAMP      =SIMP(statut='o',typ='TXM',     
+                                 into=("CHAM_NO_TEMP_R","CHAM_NO_DEPL_R") ),
+         ),
+         QUALITE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         MENAGE          =SIMP(statut='f',typ='TXM',into=("MAILLAGE","SOLUTION","TOUT") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 20/10/2000   AUTEUR F1BHHAJ J.ANGLES 
+def macr_ascouf_calc_prod(self,MODELE,**args):
+  self.type_sdprod(MODELE,modele)
+  return evol_noli
+
+MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_prod,
+                      fr=" ",
+                      docu="U4.CF.20-A",reentrant='n',
+         regles=(UN_PARMI('COMP_INCR','COMP_ELAS'),),
+         TYPE_MAILLAGE   =SIMP(statut='o',typ='TXM',     
+                               into=("SAIN",
+                                     "FISS_COUDE",
+                                     "SOUS_EPAIS_COUDE"
+                                     ) ),
+         CL_BOL_P2_GV    =FACT(statut='f',min=01,max=01,
+           ANGLE           =SIMP(statut='o',typ='R' ),  
+           AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),  
+         ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage ),
+         MODELE          =SIMP(statut='o',typ=(CO,modele)),
+         AFFE_MATERIAU   =FACT(statut='o',min=01,max=03,
+           regles=(UN_PARMI('TOUT','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ='TXM',into=("COUDE","BOL") ),
+           MATER           =SIMP(statut='o',typ=mater ),
+           TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+         ),
+         PRES_REP        =FACT(statut='f',min=01,max=01,
+           PRES            =SIMP(statut='o',typ='R' ),  
+           EFFE_FOND_P1    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+         ),
+         ECHANGE         =FACT(statut='f',min=01,max=01,
+           COEF_H          =SIMP(statut='f',typ=fonction ),
+           TEMP_EXT        =SIMP(statut='f',typ=fonction ),
+         ),
+         TORS_P1         =FACT(statut='f',min=01,max=06,
+           regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           FX              =SIMP(statut='f',typ='R' ),  
+           FY              =SIMP(statut='f',typ='R' ),  
+           FZ              =SIMP(statut='f',typ='R' ),  
+           MX              =SIMP(statut='f',typ='R' ),  
+           MY              =SIMP(statut='f',typ='R' ),  
+           MZ              =SIMP(statut='f',typ='R' ),  
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+         ),
+         COMP_INCR       =FACT(statut='f',min=01,max=01,
+           RELATION        =SIMP(statut='o',typ='TXM',into=("VMIS_ISOT_TRAC",) ),
+           VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut= 2,into=( 2 ,) ),
+         ),
+         COMP_ELAS       =FACT(statut='f',min=01,max=01,
+           RELATION        =SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC") ),
+           ELAS            =SIMP(statut='c',typ='I',defaut= 1,into=( 1 ,) ),
+           ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut= 1,into=( 1 ,) ),
+         ),
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="MDA",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+           ),
+           b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),             
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+#  A quoi sert eps           
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+         CONVERGENCE     =FACT(statut='d',min=01,max=01,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),  
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),  
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),  
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),  
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R'     
+                                ,defaut= 1.0E-6),  
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),  
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),  
+           TYPE_MATR_COMP  =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+         NEWTON          =FACT(statut='d',min=01,max=01,
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),  
+           PREDICTION      =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
+           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut=0),  
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+         ),
+         RECH_LINEAIRE   =FACT(statut='f',min=01,max=01,
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),  
+         ),
+         INCREMENT       =FACT(statut='o',min=01,max=01,
+           LIST_INST       =SIMP(statut='o',typ=listr8 ),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I' ),  
+           NUME_INST_FIN   =SIMP(statut='f',typ='I' ),  
+         ),
+         THETA_3D        =FACT(statut='f',min=01,max='**',
+           R_INF           =SIMP(statut='o',typ='R' ),  
+           R_SUP           =SIMP(statut='o',typ='R' ),  
+         ),
+         IMPR_TABLE      =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('TOUT_PARA','NOM_PARA', ),
+            PRESENT_PRESENT('TOUT_PARA','ANGLE',    ),
+                   UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL',),),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',max=04,     
+                                 into=("TRESCA_MEMBRANE",
+                                       "TRESCA_MFLE",
+                                       "TRESCA",
+                                       "SI_LONG"
+                                       ) ),
+           TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           ANGLE           =SIMP(statut='f',typ='R',max='**' ),
+           R_CINTR         =SIMP(statut='f',typ='R',max='**' ),
+           POSI_CURV_LONGI =SIMP(statut='f',typ='R',max='**' ),
+           POSI_ANGUL      =SIMP(statut='f',typ='R',max='**' ),
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",   
+                                 into=("RESULTAT","ASTER","IDEAS","CASTEM") ),
+           VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=(4,5) ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM' ),  
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 02/10/2000   AUTEUR F1BHHAJ J.ANGLES 
+MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op= -19,sd_prod=maillage,
+                      fr=" ",docu="U4.CF.10-A",reentrant='n',
+         regles=(EXCLUS('SOUS_EPAIS_COUDE','FISS_COUDE','SOUS_EPAIS_MULTI'),),
+         EXEC_MAILLAGE   =FACT(statut='o',min=01,max=01,
+           LOGICIEL        =SIMP(statut='o',typ='TXM',into=("GIBI",) ),
+           UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
+           UNITE_MGIB      =SIMP(statut='f',typ='I',defaut=19),  
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10,11)),
+         ),
+         TYPE_ELEM       =SIMP(statut='f',typ='TXM',defaut="CU20",into=("CU20","CUB8") ),
+         COUDE           =FACT(statut='o',min=01,max=01,
+           regles=(   UN_PARMI('DEXT', 'DEXT_T1'),
+                      ENSEMBLE('DEXT', 'EPAIS'),
+                      ENSEMBLE('DEXT_T1', 'EPAIS_T1', 'EPAIS_T2',
+                               'ANGL_TETA1'),
+                      ENSEMBLE('EPAIS_TI', 'ANGL_TETA2'),
+                PRESENT_ABSENT('ABSC_CURV_TRAN', 'POSI_ANGU_TRAN'),
+               PRESENT_PRESENT('ABSC_CURV_TRAN', 'DEXT_T1'),
+               PRESENT_PRESENT('POSI_ANGU_TRAN', 'DEXT_T1'),
+               PRESENT_PRESENT('EPAIS_TI', 'DEXT_T1'),
+                PRESENT_ABSENT('DEXT_T1', 'SUR_EPAIS'),
+                PRESENT_ABSENT('DEXT_T1', 'BOL_P2'),),
+           ANGLE           =SIMP(statut='o',typ='R' ),  
+           R_CINTR         =SIMP(statut='o',typ='R' ),  
+           L_TUBE_P1       =SIMP(statut='o',typ='R' ),  
+           L_TUBE_P2       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           SUR_EPAIS       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           BOL_P2          =SIMP(statut='f',typ='TXM',into=("ASP_MPP","CUVE","GV") ),
+           NB_ELEM_EPAIS   =SIMP(statut='f',typ='I',defaut= 3 ),  
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           TRANSFORMEE     =SIMP(statut='f',typ='TXM',defaut="COUDE",into=("COUDE","TUBE") ),
+           TRAN_EPAIS      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           DEXT            =SIMP(statut='f',typ='R' ),  
+           EPAIS           =SIMP(statut='f',typ='R' ),  
+           DEXT_T1         =SIMP(statut='f',typ='R' ),  
+           EPAIS_T1        =SIMP(statut='f',typ='R' ),  
+           EPAIS_T2        =SIMP(statut='f',typ='R' ),  
+           EPAIS_TI        =SIMP(statut='f',typ='R' ),  
+           ANGL_TETA1      =SIMP(statut='f',typ='R' ),  
+           ANGL_TETA2      =SIMP(statut='f',typ='R' ),  
+           ABSC_CURV_TRAN  =SIMP(statut='f',typ='R' ),  
+           POSI_ANGU_TRAN  =SIMP(statut='f',typ='R' ),  
+         ),
+         SOUS_EPAIS_COUDE=FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL'),
+                   UN_PARMI('POSI_CURV_CIRC','AZIMUT'),),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("AXIS","ELLI") ),
+           AXE_CIRC        =SIMP(statut='f',typ='R' ),  
+           AXE_LONGI       =SIMP(statut='o',typ='R' ),  
+           PROFONDEUR      =SIMP(statut='o',typ='R' ),  
+           POSI_CURV_LONGI =SIMP(statut='f',typ='R' ),  
+           POSI_ANGUL      =SIMP(statut='f',typ='R' ),  
+           POSI_CURV_CIRC  =SIMP(statut='f',typ='R' ),  
+           AZIMUT          =SIMP(statut='f',typ='R' ),  
+           SOUS_EPAIS      =SIMP(statut='o',typ='TXM',into=("INTERNE","EXTERNE") ),
+           NB_ELEM_LONGI   =SIMP(statut='o',typ='I' ),  
+           NB_ELEM_CIRC    =SIMP(statut='o',typ='I' ),  
+           NB_ELEM_RADI    =SIMP(statut='f',typ='I',defaut= 3 ),  
+           EMPREINTE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         SOUS_EPAIS_MULTI=FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL'),
+                   UN_PARMI('POSI_CURV_CIRC','AZIMUT'),),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("AXIS","ELLI") ),
+           AXE_CIRC        =SIMP(statut='f',typ='R' ),  
+           AXE_LONGI       =SIMP(statut='o',typ='R' ),  
+           PROFONDEUR      =SIMP(statut='o',typ='R' ),  
+           POSI_CURV_LONGI =SIMP(statut='f',typ='R' ),  
+           POSI_ANGUL      =SIMP(statut='f',typ='R' ),  
+           POSI_CURV_CIRC  =SIMP(statut='f',typ='R' ),  
+           AZIMUT          =SIMP(statut='f',typ='R' ),  
+           SOUS_EPAIS      =SIMP(statut='o',typ='TXM',into=("INTERNE","EXTERNE") ),
+           NB_ELEM_LONGI   =SIMP(statut='o',typ='I' ),  
+           NB_ELEM_CIRC    =SIMP(statut='o',typ='I' ),  
+           EMPREINTE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         FISS_COUDE      =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('ABSC_CURV','POSI_ANGUL'),),
+           AXIS            =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),  
+           PROFONDEUR      =SIMP(statut='o',typ='R' ),  
+           LONGUEUR        =SIMP(statut='o',typ='R' ),  
+           ABSC_CURV       =SIMP(statut='f',typ='R' ),  
+           POSI_ANGUL      =SIMP(statut='f',typ='R' ),  
+           FISSURE         =SIMP(statut='o',typ='TXM',into=("DEB_INT","DEB_EXT") ),
+           AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),  
+           ORIEN           =SIMP(statut='o',typ='R',
+                                 into=(45.,-45.,90.,0.E+0) ),
+           NB_TRANCHE      =SIMP(statut='o',typ='I' ),  
+           NB_SECTEUR      =SIMP(statut='o',typ='I' ),  
+           NB_COURONNE     =SIMP(statut='o',typ='I' ),  
+           RAYON_TORE      =SIMP(statut='f',typ='R' ),  
+           COEF_MULT_RC2   =SIMP(statut='f',typ='R',defaut= 1. ),  
+           COEF_MULT_RC3   =SIMP(statut='f',typ='R' ),  
+           ANGL_OUVERTURE  =SIMP(statut='f',typ='R',defaut= 0.5 ),  
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max='**',
+           regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",   
+                                 into=("ASTER","IDEAS","CASTEM") ),
+           FICHIER         =SIMP(statut='f',typ='TXM' ),  
+           UNITE           =SIMP(statut='f',typ='I' ),  
+           VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=(4,5) ),
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut= 10,into=(3,10) ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 20/10/2000   AUTEUR F1BHHAJ J.ANGLES 
+def macr_aspic_calc_prod(self,RESU_THER,MODELE,**args):
+  if MODELE != None:self.type_sdprod(MODELE,modele)
+  if RESU_THER != None:self.type_sdprod(RESU_THER,evol_ther)
+  return evol_noli
+
+MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
+                    fr=" ",docu="U4.PC.20-A",reentrant='n',
+         TYPE_MAILLAGE   =SIMP(statut='o',typ='TXM',
+                               into=("SAIN_FIN","SAIN_GROS","FISS_COUR_DEB","FISS_COUR_NONDEB","FISS_LONG_DEB",
+                                     "FISS_LONG_NONDEB","FISS_AXIS_DEB","FISS_AXIS_NONDEB") ),
+         TUBULURE        =FACT(statut='f',min=01,max=01,
+           TYPE            =SIMP(statut='f',typ='TXM',defaut="TYPE_1",into=("TYPE_1","TYPE_2") ),
+         ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         MODELE          =SIMP(statut='f',typ=(CO,modele)),
+         RESU_THER       =SIMP(statut='f',typ=(CO,evol_ther)),
+         AFFE_MATERIAU   =FACT(statut='o',min=01,max=03,
+           regles=(UN_PARMI('TOUT','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           GROUP_MA        =SIMP(statut='f',typ='TXM',into=("TUBU","CORP","SOUD","SOUDCORP","SOUDTUBU") ),
+           MATER           =SIMP(statut='o',typ=mater),
+           TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+         ),
+         EQUILIBRE       =FACT(statut='o',min=01,max=01,
+           NOEUD           =SIMP(statut='o',typ=no),
+         ),
+         PRES_REP        =FACT(statut='o',min=01,max=01,
+           PRES            =SIMP(statut='o',typ='R'),  
+           NOEUD           =SIMP(statut='f',typ=no),
+           EFFE_FOND       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+         ECHANGE         =FACT(statut='f',min=01,max=01,
+           COEF_H_TUBU     =SIMP(statut='o',typ=fonction),
+           COEF_H_CORP     =SIMP(statut='o',typ=fonction),
+           TEMP_EXT        =SIMP(statut='o',typ=fonction),
+         ),
+         TORS_CORP       =FACT(statut='f',min=01,max=06,
+           regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           NOEUD           =SIMP(statut='o',typ=no),
+           FX              =SIMP(statut='f',typ='R'),  
+           FY              =SIMP(statut='f',typ='R'),  
+           FZ              =SIMP(statut='f',typ='R'),  
+           MX              =SIMP(statut='f',typ='R'),  
+           MY              =SIMP(statut='f',typ='R'),  
+           MZ              =SIMP(statut='f',typ='R'),  
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+         TORS_TUBU       =FACT(statut='f',min=01,max=06,
+           regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           FX              =SIMP(statut='f',typ='R'),  
+           FY              =SIMP(statut='f',typ='R'),  
+           FZ              =SIMP(statut='f',typ='R'),  
+           MX              =SIMP(statut='f',typ='R'),  
+           MY              =SIMP(statut='f',typ='R'),  
+           MZ              =SIMP(statut='f',typ='R'),  
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+         COMP_ELAS       =FACT(statut='o',min=01,max=01,
+           RELATION        =SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC")),
+           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+         ),
+         THETA_3D        =FACT(statut='f',min=01,max='**',
+           R_INF           =SIMP(statut='o',typ='R'),  
+           R_SUP           =SIMP(statut='o',typ='R'),  
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM',into=("CALC_G_MAX",) ),
+         BORNES          =FACT(statut='f',min=01,max='**',
+           NUME_ORDRE      =SIMP(statut='o',typ='I'),  
+           VALE_MIN        =SIMP(statut='o',typ='R'),  
+           VALE_MAX        =SIMP(statut='o',typ='R'),  
+         ),
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="MDA",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+           ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non iversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+             SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+         ),
+         CONVERGENCE     =FACT(statut='d',min=01,max=01,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),  
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),  
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),  
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),  
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut=1.0E-6),  
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut=10),  
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut=0),  
+           TYPE_MATR_COMP  =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+         NEWTON          =FACT(statut='d',min=01,max=01,
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut=1),  
+           PREDICTION      =SIMP(statut='f',typ='TXM',into=("TANGENTE","ELASTIQUE","EXTRAPOL","DEPL_CALCULE")),
+           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE")),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0),  
+         ),
+         RECH_LINEAIRE   =FACT(statut='d',min=01,max=01,
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut=1.0E-3),  
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut=3),  
+         ),
+         INCREMENT       =FACT(statut='o',min=01,max=01,
+           LIST_INST       =SIMP(statut='o',typ=listr8),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),  
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),  
+         ),
+         PAS_AZIMUT      =SIMP(statut='f',typ='I',defaut=1),  
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",into=("RESULTAT","ASTER","CASTEM","IDEAS")),
+           VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM'),  
+)  ;
+#& MODIF COMMANDE  DATE 01/02/2000   AUTEUR CIBHHBC B.CIREE 
+MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= -16,sd_prod=maillage,reentrant='n',
+                    fr=" ",docu="U4.PC.10-A",
+         TYPE_ELEM       =SIMP(statut='f',typ='TXM',defaut="CU20",into=("CU20","CUB8")),
+         RAFF_MAIL       =SIMP(statut='f',typ='TXM',defaut="GROS",into=("GROS","FIN")),
+         EXEC_MAILLAGE   =FACT(statut='o',min=01,max=01,
+           LOGICIEL        =SIMP(statut='o',typ='TXM',into=("GIBI",)),
+           UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
+           UNITE_MGIB      =SIMP(statut='f',typ='I',defaut=19),  
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10,11)),
+         ),
+         TUBULURE        =FACT(statut='o',min=01,max=01,
+           E_BASE          =SIMP(statut='o',typ='R'),  
+           DEXT_BASE       =SIMP(statut='o',typ='R'),  
+           L_BASE          =SIMP(statut='o',typ='R'),  
+           L_CHANF         =SIMP(statut='o',typ='R'),  
+           E_TUBU          =SIMP(statut='o',typ='R'),  
+           DEXT_TUBU       =SIMP(statut='o',typ='R'),  
+           Z_MAX           =SIMP(statut='o',typ='R'),  
+           TYPE            =SIMP(statut='f',typ='TXM',defaut="TYPE_1",into=("TYPE_1","TYPE_2")),
+           L_PENETR        =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+         ),
+         SOUDURE         =FACT(statut='o',min=01,max=01,
+           H_SOUD          =SIMP(statut='o',typ='R'),  
+           ANGL_SOUD       =SIMP(statut='o',typ='R'),  
+           JEU_SOUD        =SIMP(statut='o',typ='R'),  
+         ),
+         CORPS           =FACT(statut='o',min=01,max=01,
+           E_CORP          =SIMP(statut='o',typ='R'),  
+           DEXT_CORP       =SIMP(statut='o',typ='R'),  
+           X_MAX           =SIMP(statut='o',typ='R'),  
+         ),
+         FISS_SOUDURE    =FACT(statut='f',min=01,max=01,
+           TYPE            =SIMP(statut='o',typ='TXM',into=("LONGUE","COURTE")),
+           AXIS            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           PROFONDEUR      =SIMP(statut='o',typ='R'),  
+           LONGUEUR        =SIMP(statut='f',typ='R'),  
+           AZIMUT          =SIMP(statut='o',typ='R'),  
+           RAYON_TORE      =SIMP(statut='f',typ='R'),  
+           POSITION        =SIMP(statut='o',typ='TXM',into=("DROIT","INCLINE")),
+           FISSURE         =SIMP(statut='o',typ='TXM',into=("DEB_INT","DEB_EXT","NON_DEB","TRAVERS")),
+           LIGA_INT        =SIMP(statut='f',typ='R'),  
+           ANGL_OUVERTURE  =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+           COEF_MULT_RC1   =SIMP(statut='f',typ='R'),  
+           COEF_MULT_RC2   =SIMP(statut='f',typ='R'),  
+           COEF_MULT_RC3   =SIMP(statut='f',typ='R'),  
+           NB_TRANCHE      =SIMP(statut='f',typ='I'),  
+           NB_SECTEUR      =SIMP(statut='f',typ='I'),  
+           NB_COURONNE     =SIMP(statut='f',typ='I'),  
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max='**',
+           regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","IDEAS","CASTEM")),
+           FICHIER         =SIMP(statut='f',typ='TXM'),  
+           UNITE           =SIMP(statut='f',typ='I'),  
+           VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 02/10/96   AUTEUR CIBHHLV L.VIVAN
+MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op=  81,sd_prod=macr_elem_dyna,
+                    fr="Définition d un macro élément pour analyse modale ou harmonique par sous structuration dynamique",
+                    docu="U4.65.01-D",reentrant='n',
+         regles=(EXCLUS('MATR_AMOR','AMOR_REDUIT' ),),
+         BASE_MODALE     =SIMP(statut='o',typ=base_modale ),
+         MATR_RIGI       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),         
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","RITZ") ),
+)  ;
+#& MODIF COMMANDE DATE 08/03/94 AUTEUR VABHHT2 G.BERTRAND
+MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,docu="U4.62.01-E",reentrant='f',
+                    fr="Définition d un macro-élément pour l analyse statique par sous structuration",
+        regles=(AU_MOINS_UN('DEFINITION','RIGI_MECA','MASS_MECA','CAS_CHARGE'),  
+                ENSEMBLE('DEFINITION','EXTERIEUR'),),
+         DEFINITION      =FACT(statut='f',min=1,max=1,
+           MODELE          =SIMP(statut='o',typ=modele),
+           CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+           CHAR_MACR_ELEM  =SIMP(statut='f',typ=char_meca),
+           INST            =SIMP(statut='f',typ='R',defaut=0.0E+0 ),  
+           NMAX_CAS        =SIMP(statut='f',typ='I',defaut=10),  
+           NMAX_CHAR       =SIMP(statut='f',typ='I',defaut=10),  
+         ),
+         EXTERIEUR       =FACT(statut='f',min=1,max=1,
+           regles=(AU_MOINS_UN('NOEUD','GROUP_NO'),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         ),
+         RIGI_MECA       =FACT(statut='f',min=1,max=1,
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+         ),
+         MASS_MECA       =FACT(statut='f',min=1,max=1,
+           BIDO1           =SIMP(statut='f',typ='I',defaut=0),  
+         ),
+         CAS_CHARGE      =FACT(statut='f',min=1,max='**',
+           NOM_CAS         =SIMP(statut='o',typ='TXM'),  
+           SUIV            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
+           INST            =SIMP(statut='f',typ='R',defaut=0.E+0),  
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 15/09/1999   AUTEUR F1BHHAJ J.ANGLES 
+MACR_GOUJ2E_CALC=MACRO(nom="MACR_GOUJ2E_CALC",op=-23,sd_prod=evol_noli,
+                      fr=" ",docu="U4.GJ.20-A",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         DEFI_GOUJ       =FACT(statut='o',min=01,max=01,
+           TYPE            =SIMP(statut='o',typ='TXM',into=("M33","M64","M90","M115","M155","M180","M186")),
+           VARIANTE        =SIMP(statut='o',typ='TXM',into=("A","B","C","D","E","F","G","H","I","J","K","L","M",  
+                                                            "N","O","P","Q","R","S","T","U","V","W","X","Y","Z")),
+           FILET_TRONQUE   =SIMP(statut='f',typ='I',max='**'),  
+           FILET_TRONQA    =SIMP(statut='f',typ='I',max='**'),  
+           FILET_TRONQB    =SIMP(statut='f',typ='I',max='**'),  
+           FILET_JEU_HT    =SIMP(statut='f',typ='I',max='**'),  
+           FILET_JEU_HTA   =SIMP(statut='f',typ='I',max='**'),  
+           FILET_JEU_HTB   =SIMP(statut='f',typ='I',max='**'),  
+         ),
+         EXCIT           =FACT(statut='o',min=01,max=01,
+           TYPE_BLOCAGE    =SIMP(statut='o',typ='I',defaut=2,into=(1,2,3)),
+           FORCE_GOUJ      =SIMP(statut='o',typ='R'),  
+         ),
+         CALCUL          =FACT(statut='o',min=01,max=01,
+           TYPE_CALCUL     =SIMP(statut='o',typ='TXM',into=("ELASTIQUE","ELASTOPLASTIQUE")),
+           NB_INCR         =SIMP(statut='o',typ='I'),  
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="TABLE",    
+                                 into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED","TABLE")),
+           VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM'),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1 ,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 02/02/2000   AUTEUR F1BHHAJ J.ANGLES 
+MACR_GOUJ2E_MAIL=MACRO(nom="MACR_GOUJ2E_MAIL",op= -22,sd_prod=maillage,
+                      fr=" ",docu="U4.GJ.10-A",reentrant='n',
+         EXEC_MAILLAGE   =FACT(statut='o',min=01,max=01,
+           LOGICIEL        =SIMP(statut='o',typ='TXM',into=("GIBI",) ),
+           UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
+           UNITE_MGIB      =SIMP(statut='f',typ='I',defaut=19),  
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10)),
+         ),
+         DEFI_GOUJ       =FACT(statut='o',min=01,max=01,
+           TYPE            =SIMP(statut='o',typ='TXM',into=("M33","M64","M90","M115","M155","M180","M186")),
+           VARIANTE        =SIMP(statut='o',typ='TXM',into=("A","B","C","D","E","F","G","H","I","J","K","L","M",  
+                                                            "N","O","P","Q","R","S","T","U","V","W","X","Y","Z")), 
+         ),
+         GEOM_GOUJ_BRID  =FACT(statut='o',min=01,max=01,
+           NB_FILET        =SIMP(statut='o',typ='I'),  
+           H_CORP_BRID     =SIMP(statut='o',typ='R'),  
+           R_EXT_BRID      =SIMP(statut='o',typ='R'),  
+           H_HAUT_BRID     =SIMP(statut='f',typ='R',defaut=0.0E+0),  
+           H_BAS_BRID      =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+           FILET_ABST      =SIMP(statut='f',typ='I',max='**'),  
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",    
+                                 into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED")),
+           FICHIER         =SIMP(statut='f',typ='TXM'),  
+           UNITE           =SIMP(statut='f',typ='I'),  
+           VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 19/06/2000   AUTEUR DURAND C.DURAND 
+MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=-24,docu="U7.03.02-A",
+                     fr="Donner des informations sur un maillage.",
+#
+# 1. Le nom du maillage a analyser
+#
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+#
+# 2. Determination de la qualite des elements du maillage
+#    Par defaut, rien ne se fait
+#
+         QUALITE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+#
+# 3. Controle de la non-interpenetration des elements
+#    Par defaut, rien ne se fait
+#
+         INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+#
+# 4. Version homard
+#
+         VERSION_HOMARD  =SIMP(statut='f',typ='TXM',defaut="V3_15",into=("V3_15","V3_N","V3_N_PERSO")),
+#
+# 5. Le niveau d'information
+#
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 02/06/99   AUTEUR CIBHHLV L.VIVAN 
+MACR_PRE_SYRTHES=MACRO(nom="MACR_PRE_SYRTHES",op=-21,fr=" ",docu="U7.02.21-A",
+         MAILLAGE        =FACT(statut='d',min=01,max=01,
+           UNITE_SYRTHES   =SIMP(statut='f',typ='I',defaut=13),  
+           UNITE_IDEAS     =SIMP(statut='f',typ='I',defaut=19),  
+         ),
+         RESULTAT        =FACT(statut='d',min=01,max=01,
+           UNITE_SYRTHES   =SIMP(statut='f',typ='I',defaut=31),  
+           UNITE_IDEAS     =SIMP(statut='f',typ='I',defaut= 91 ),  
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 17/11/1999   AUTEUR CIBHHGB G.BERTRAND 
+MACRO_CARA_POUTRE=MACRO(nom="MACRO_CARA_POUTRE",op=-11,sd_prod=tabl_cara_geom,
+                       docu="U4.42.02-C",reentrant='n',
+                       fr="Détermination des caractéristiques d'une section transversale de poutre à partir d'un maillage 2D de la section",
+         regles=(EXCLUS('SYME_X','GROUP_MA_BORD'),
+                 EXCLUS('SYME_Y','GROUP_MA_BORD'),
+                 ENSEMBLE('LONGUEUR','LIAISON','MATERIAU') ,),
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut= 20 ),  
+         SYME_X          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         SYME_Y          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         GROUP_MA_BORD   =SIMP(statut='f',typ=grma,max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ORIG_INER       =SIMP(statut='f',typ='R',max='**'),  
+         NOEUD           =SIMP(statut='f',typ=no,max='**'),
+         GROUP_MA_INTE   =SIMP(statut='f',typ=grma,max='**'),
+         LONGUEUR        =SIMP(statut='f',typ='R'),  
+         MATERIAU        =SIMP(statut='f',typ=mater),
+         LIAISON         =SIMP(statut='f',typ='TXM',into=("ROTULE","ENCASTREMENT")),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 30/06/98   AUTEUR CIBHHGB G.BERTRAND 
+MACRO_CHAR_F_U=MACRO(nom="MACRO_CHAR_F_U",op=-15,sd_prod=char_meca,
+                    fr=" ",docu="U4.72.07-A",reentrant='n',
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CHARGE          =SIMP(statut='o',typ=char_meca),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         COEF_IMPO       =SIMP(statut='f',typ='R',defaut=1.0E+0),  
+         NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="APRES",into=("NORMAL","APRES")),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 05/06/2000   AUTEUR CIBHHLV L.VIVAN 
+def macro_elas_mult_prod(self,NUME_DDL,CAS_CHARGE,**args ):
+  self.type_sdprod(NUME_DDL,nume_ddl)
+  if CAS_CHARGE[0]['NOM_CAS']      != None : return mult_elas
+  if CAS_CHARGE[0]['MODE_FOURIER'] != None : return fourier_elas
+  raise AsException("type de concept resultat non prevu")
+
+MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=-10,sd_prod=macro_elas_mult_prod,docu="U4.51.02-C",reentrant='f',
+                     fr="Permet la réalisation d une analyse statique linéaire multi cas de charges ou la réalisation des calculs de plusieurs modes de Fourier sur un modèle axisymétrique",
+         regles=(UN_PARMI('CHAR_MECA_GLOBAL','CHAR_CINE_GLOBAL','LIAISON_DISCRET', ),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         NUME_DDL        =SIMP(statut='f',typ=(CO,nume_ddl)),# CO()
+         CHAR_MECA_GLOBAL=SIMP(statut='f',typ=char_meca,max='**'),
+         CHAR_CINE_GLOBAL=SIMP(statut='f',typ=char_meca,max='**'),
+         LIAISON_DISCRET =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         CAS_CHARGE      =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('NOM_CAS','MODE_FOURIER'),
+                   UN_PARMI('CHAR_MECA','CHAR_CINE','VECT_ASSE'),),
+           NOM_CAS         =SIMP(statut='f',typ='TXM' ),  
+           MODE_FOURIER    =SIMP(statut='f',typ='I' ),  
+           TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
+           CHAR_MECA       =SIMP(statut='f',typ=char_meca,max='**'),
+           CHAR_CINE       =SIMP(statut='f',typ=char_meca,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',max='**',     
+                                 into=("EFGE_ELNO_DEPL","EPOT_ELEM_DEPL","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",               
+                                       "SIGM_ELNO_CART","EFGE_ELNO_CART","DEGE_ELNO_DEPL","EPSI_ELNO_DEPL",               
+                                       "EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL","EPSP_ELNO","EPSP_ELGA",        
+                                       "ECIN_ELEM_DEPL","FLUX_ELGA_TEMP","FLUX_ELNO_TEMP","SOUR_ELGA_ELEC",               
+                                       "PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG","INTE_ELNO_ACTI",               
+                                       "INTE_ELNO_REAC","SIGM_NOZ1_ELGA","ERRE_ELEM_NOZ1","SIGM_NOZ2_ELGA",               
+                                       "ERRE_ELEM_NOZ2","VNOR_ELEM_DEPL","ERRE_ELNO_ELGA","SIRE_ELNO_DEPL",               
+                                       "ERRE_ELGA_NORE","EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","EQUI_ELNO_EPSI",               
+                                       "EQUI_ELGA_EPSI","FORC_NODA","REAC_NODA","EPSI_NOEU_DEPL","SIGM_NOEU_DEPL",               
+                                       "EFGE_NOEU_DEPL","EQUI_NOEU_SIGM","EQUI_NOEU_EPSI","FLUX_NOEU_TEMP") ),
+           NUME_COUCHE     =SIMP(statut='f',typ='I',defaut=1),  
+           NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY")),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),  
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r),
+         ),
+# 
+#  attention d après la documentation U4-02-04B (solveur), PRE_COND figure uniquement avec la méthode GCPC
+# 
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT") ),
+           PRE_COND        =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","DIAG") ),
+           b_mult_front    = BLOC ( condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="MDA",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+            ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),             
+           ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN 
+MACRO_MADMACS=MACRO(nom="MACRO_MADMACS",op=-9,docu="U7.03.21-C",
+                    fr="Impression au format fichier universel IDEAS des données nécessaires au chaînage entre Code_Aster et MADMACS",
+         regles=(UN_PARMI('MATR_ELEM_RIGI','MATR_RIGI'),
+                 UN_PARMI('MATR_ELEM_MASS','MATR_MASS'),
+                 PRESENT_ABSENT('MATR_ELEM_AMOR','MATR_AMOR'),),
+         FICHIER         =SIMP(statut='f',typ='TXM' ),  
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",)),
+         VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(5,)),
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl),
+         CHARGE          =SIMP(statut='o',typ=char_meca,max='**'),
+         MATR_ELEM_RIGI  =SIMP(statut='f',typ=matr_elem_depl_r),
+         MATR_RIGI       =SIMP(statut='f',typ=matr_asse_depl_r),
+         MATR_ELEM_MASS  =SIMP(statut='f',typ=matr_elem_depl_r),
+         MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r),
+         MATR_ELEM_AMOR  =SIMP(statut='f',typ=matr_elem_depl_r),
+         MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r),
+         MODE_MECA       =SIMP(statut='o',typ=mode_meca),
+         NMAX_MODE       =SIMP(statut='f',typ='I',defaut=10),  
+         INTERFACE       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO'),
+                   UN_PARMI('DDL_ACTIF','MASQUE'),),
+           NOM             =SIMP(statut='o',typ='TXM'),  
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           DDL_ACTIF       =SIMP(statut='f',typ='TXM',max='**'),  
+           MASQUE          =SIMP(statut='f',typ='TXM',max='**'),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 19/05/2000   AUTEUR JFBHHUC C.ROSE 
+def macro_matr_ajou_prod(self,MATR_AMOR_AJOU,MATR_MASS_AJOU,MATR_RIGI_AJOU,**args):
+  self.type_sdprod(MATR_AMOR_AJOU,matr_asse_depl_r)
+  self.type_sdprod(MATR_MASS_AJOU,matr_asse_depl_r)
+  self.type_sdprod(MATR_RIGI_AJOU,matr_asse_depl_r)
+  return None
+
+MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=-13,docu="U4.66.11-B",sd_prod=macro_matr_ajou_prod,
+                      fr="Calcul les matrices de masse, d amortissement ou de rigidité ajoutées qu induit un fluide parfait, incompressible, au repos ou en écoulement potentiel, sur une structure en 2D, 2D axisymétrique ou en 3D",
+      regles=(AU_MOINS_UN('MODE_MECA','DEPL_IMPO','MODELE_GENE'),
+              AU_MOINS_UN('MATR_MASS_AJOU','MATR_AMOR_AJOU','MATR_RIGI_AJOU'), 
+              EXCLUS('MODE_MECA','DEPL_IMPO','MODELE_GENE'),),
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         GROUP_MA_FLUIDE =SIMP(statut='o',typ=grma),
+         GROUP_MA_INTERF =SIMP(statut='o',typ=grma),
+         MODELISATION    =SIMP(statut='o',typ='TXM',into=("PLAN","AXIS","3D")),
+         FLUIDE          =FACT(statut='o',min=01,max='**',
+           RHO             =SIMP(statut='o',typ='R'),  
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           MAILLE          =SIMP(statut='f',typ=ma),
+         ),
+         DDL_IMPO        =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO'),
+                   UN_PARMI('PRES_FLUIDE','PRES_SORTIE'),),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+           PRES_FLUIDE     =SIMP(statut='f',typ='R'),  
+           PRES_SORTIE     =SIMP(statut='f',typ='R'),  
+         ),
+         ECOULEMENT      =FACT(statut='f',min=01,max='**',
+           GROUP_MA_1      =SIMP(statut='o',typ=grma),
+           GROUP_MA_2      =SIMP(statut='o',typ=grma),
+           VNOR_1          =SIMP(statut='o',typ='R'),  
+           VNOR_2          =SIMP(statut='f',typ='R'),  
+           POTENTIEL       =SIMP(statut='f',typ=evol_ther),
+         ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca),
+         DEPL_IMPO       =SIMP(statut='f',typ=cham_no_depl_r),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene),
+         NUME_DDL_GENE   =SIMP(statut='f',typ=nume_ddl_gene),
+         DIST_REFE       =SIMP(statut='f',typ='R',defaut= 1.0E-2),  
+         MATR_MASS_AJOU  =SIMP(statut='f',typ=(CO,matr_asse)),
+         MATR_RIGI_AJOU  =SIMP(statut='f',typ=(CO,matr_asse)),
+         MATR_AMOR_AJOU  =SIMP(statut='f',typ=(CO,matr_asse)),
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="MDA",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+           ),
+           b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non iversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),             
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+#  A quoi sert eps           
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2000   AUTEUR VABHHTS J.PELLET 
+def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args):
+  if not MATR_ASSE:  raise AsException("Impossible de typer les concepts resultats")
+  if not NUME_DDL:  raise AsException("Impossible de typer les concepts resultats")
+  self.type_sdprod(NUME_DDL,nume_ddl)
+  for m in MATR_ASSE:
+    opti=m['OPTION']
+    if opti in ( "RIGI_MECA","RIGI_FLUI_STRU","RIGI_MECA_LAGR" ,        
+       "MASS_MECA" , "MASS_FLUI_STRU" ,"RIGI_GEOM" ,"RIGI_ROTA",
+       "AMOR_MECA","IMPE_MECA" ,
+       "ONDE_FLUI","MASS_MECA_DIAG" ) : t=matr_asse_depl_r
+    if opti == "RIGI_MECA_HYST"   : t= matr_asse_depl_c
+    if opti == "RIGI_THER"        : t= matr_asse_temp_r
+    if opti == "MASS_THER"        : t= matr_asse_temp_r
+    if opti == "RIGI_THER_CONV"   : t= matr_asse_temp_r
+    if opti == "RIGI_THER_CONV_D" : t= matr_asse_temp_r
+    if opti == "RIGI_ACOU"        : t= matr_asse_pres_c
+    if opti == "MASS_ACOU"        : t= matr_asse_pres_c
+    if opti == "AMOR_ACOU"        : t= matr_asse_pres_c
+    self.type_sdprod(m['MATRICE'],t)
+  return None
+
+MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=-6,docu="U4.61.21-C",
+                      sd_prod=macro_matr_asse_prod,
+                      fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ",
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou)),
+         INST            =SIMP(statut='f',typ='R'),  
+         NUME_DDL        =SIMP(statut='o',typ=(nume_ddl,CO)),
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",    
+                                 into=("LDLT","MULT_FRONT","GCPC")),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R'),  
+           RENUM           =SIMP(statut='f',typ='TXM',into=("SANS","RCMK","MD","MDA","METIS")),
+         ),
+         MATR_ASSE       =FACT(statut='o',min=01,max='**',
+           MATRICE         =SIMP(statut='o',typ=(matr_asse,CO)),
+           OPTION          =SIMP(statut='o',typ='TXM',     
+                                 into=("RIGI_MECA","MASS_MECA","MASS_MECA_DIAG", 
+                                       "AMOR_MECA","RIGI_MECA_HYST","IMPE_MECA",        
+                                       "ONDE_FLUI","RIGI_FLUI_STRU","MASS_FLUI_STRU",   
+                                       "RIGI_ROTA","RIGI_GEOM","RIGI_MECA_LAGR",        
+                                       "RIGI_THER","MASS_THER","RIGI_ACOU","MASS_ACOU",      
+                                       "AMOR_ACOU")),
+           SIEF_ELGA       =SIMP(statut='f',typ=cham_elem_sief_r),
+           MODE_FOURIER    =SIMP(statut='f',typ='I'),  
+           THETA           =SIMP(statut='f',typ=theta_geom),
+           PROPAGATION     =SIMP(statut='f',typ='R'),  
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 02/02/99   AUTEUR ACBHHCD G.DEVESA 
+MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=-18,fr=" ",docu="U7.03.11-A",
+         OPTION          =FACT(statut='o',min=01,max=01,
+           regles=(UN_PARMI('TOUT','MODULE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           MODULE          =SIMP(statut='f',typ='TXM',into=("PRE_MISS","MISS_EVOL","MISS_IMPE")),
+         ),
+         PROJET          =SIMP(statut='o',typ='TXM'),  
+         REPERTOIRE      =SIMP(statut='f',typ='TXM'),  
+         UNITE_IMPR_ASTER=SIMP(statut='f',typ='I',defaut=25),  
+         UNITE_OPTI_MISS =SIMP(statut='f',typ='I',defaut=26),  
+         UNITE_MODELE_SOL=SIMP(statut='f',typ='I',defaut=27),  
+         UNITE_RESU_IMPE =SIMP(statut='f',typ='I',defaut=30),  
+)  ;
+#& MODIF COMMANDE  DATE 04/04/2000   AUTEUR D6BHHBQ B.QUINNEZ 
+def macro_mode_meca_prod(self,MATR_A,MATR_B,**args ):
+  self.type_sdprod(MATR_A,matr_asse_depl_r)
+  self.type_sdprod(MATR_B,matr_asse_depl_r)
+  return mode_meca
+
+MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op= -12,sd_prod=macro_mode_meca_prod,
+                     fr="Permet d alléger le calcul d une structure de données de type mode_meca par le découpage d un intervalle de fréquences global en sous-intervalles",
+                     docu="U4.52.02-C",reentrant='n',
+         MATR_A          =SIMP(statut='o',typ=(CO,matr_asse_depl_r) ),
+         MATR_B          =SIMP(statut='o',typ=(CO,matr_asse_depl_r) ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#  ce mot cle ne devrait il pas etre dans calc_freq  
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="SORENSEN",    
+                               into=("TRI_DIAG","JACOBI","SORENSEN",) ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="SANS",    
+                               into=("MODE_RIGIDE","SANS") ),
+         CALC_FREQ       =FACT(statut='d',min=00,max=01,
+           regles=(UN_PARMI('FREQ','FREQ_MAX'),
+                   PRESENT_PRESENT('FREQ_MIN','FREQ_MAX'),
+                   PRESENT_PRESENT('FREQ_MAX','NB_BLOC_FREQ'),),
+           FREQ            =SIMP(statut='f',typ='R',max='**' ),  
+           FREQ_MIN        =SIMP(statut='f',typ='R' ),  
+           FREQ_MAX        =SIMP(statut='f',typ='R' ),  
+           NB_BLOC_FREQ    =SIMP(statut='f',typ='I' ),  
+           NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10 ),  
+           DIM_SOUS_ESPACE =SIMP(statut='f',typ='I',defaut= 0 ),  
+           NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8 ),  
+           NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),  
+           PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2 ),  
+           PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-10 ),  
+           PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12 ),  
+           NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5 ),  
+           NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30 ),  
+           PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.4E-10 ),  
+           NMAX_ITER_BATHE =SIMP(statut='f',typ='I' ,defaut= 12 ),  
+           PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2 ),  
+           NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12 ),  
+           PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E0 ),  
+           NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20 ),  
+           PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717 ),  
+           SEUIL_FREQ      =SIMP(statut='f',typ='R' ,defaut= 1.E-2 ),  
+           STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="NON" ,into=("OUI","NON") ),
+         ),
+         VERI_MODE       =FACT(statut='d',min=00,max=01,
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-6 ),  
+           PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-3 ),  
+           STURM           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         NORM_MODE       =FACT(statut='o',min=01,max='**',
+           MASS_INER       =SIMP(statut='o',typ=tabl_mass_iner ),
+           NORME           =SIMP(statut='f',typ='TXM',defaut="TRAN_ROTA",    
+                                 into=("MASS_GENE","RIGI_GENE","EUCL",           
+                                       "EUCL_TRAN","TRAN","TRAN_ROTA") ),
+           INFO            =SIMP(statut='f',typ='I',defaut= 1 ,into=(1,2) ),
+         ),
+         FILTRE_MODE     =FACT(statut='f',min=01,max=01,
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",    
+                                 into=("MASS_EFFE_UN","MASS_GENE") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
+         ),
+         IMPRESSION      =FACT(statut='d',min=01,max=01,
+           TOUT_PARA       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           CUMUL           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",    
+                                 into=("MASS_EFFE_UN","MASS_GENE",) ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN 
+def macro_proj_base_prod(self,MATR_ASSE_GENE,VECT_ASSE_GENE,**args ):
+  if MATR_ASSE_GENE != None:
+    for m in MATR_ASSE_GENE:
+      self.type_sdprod(m['MATRICE'],matr_asse_gene_r)
+      self.type_sdprod(m['MATR_ASSE'],matr_asse_depl_r)
+  if VECT_ASSE_GENE != None:
+    for m in VECT_ASSE_GENE:
+      self.type_sdprod(m['VECTEUR'],vect_asse_gene)
+  return None
+
+MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=-8,docu="U4.63.11-C",
+                      sd_prod=macro_proj_base_prod,
+                      fr="Projection des matrices et/ou vecteurs assemblés sur une base de vecteurs", 
+         BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene) ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999),  
+         TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),  
+         MATR_ASSE_GENE  =FACT(statut='f',min=01,max='**',
+           MATRICE         =SIMP(statut='o',typ=(CO,matr_asse)),
+           MATR_ASSE       =SIMP(statut='f',typ=(CO,matr_asse_depl_r)),
+           MATR_ASSE_GENE  =SIMP(statut='f',typ=matr_asse_gene_r),
+           PROFIL          =SIMP(statut='f',typ='TXM',defaut="DIAG",into=("PLEIN","DIAG") ),
+         ),
+         VECT_ASSE_GENE  =FACT(statut='f',min=01,max='**',
+           VECTEUR         =SIMP(statut='o',typ=(CO,vect_asse)),
+           TYPE_VECT       =SIMP(statut='f',typ='TXM',defaut="FORC"),  
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r),
+           VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 08/09/97   AUTEUR VABHHTS J.PELLET 
+MAJ_CATA=PROC(nom="MAJ_CATA",op=20,docu="U4.15.01-D",
+              fr="Compilation des catalogues de commandes et d éléments",
+         regles=(UN_PARMI('COMMANDE','ELEMENT','VALIDATION'),),
+         COMMANDE        =FACT(statut='f',min=01,max=01,
+           UNITE           =SIMP(statut='o',typ='I' ),  
+         ),
+         ELEMENT         =FACT(statut='f',min=01,max=01,),
+         VALIDATION      =FACT(statut='f',min=01,max=01,
+           UNITE           =SIMP(statut='o',typ='I' ),  
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2000   AUTEUR VABHHTS J.PELLET 
+MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
+                   fr="Analyse mécanique statique linéaire",docu="U4.51.01-F",reentrant='n',
+                   regles=(EXCLUS("INST","LIST_INST"),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         EXCIT           =FACT(statut='o',min=1,max='**',
+           CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+         ),
+         INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         OPTION          =SIMP(statut='f',typ='TXM',max='**',
+                               into=("SIEF_ELGA_DEPL","SIGM_ELNO_DEPL","SIPO_ELNO_DEPL","EFGE_ELNO_DEPL",
+                                     "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPME_ELNO_DEPL","EPME_ELGA_DEPL",
+                                     "EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","EQUI_ELNO_EPSI","EQUI_ELGA_EPSI",
+                                     "EQUI_ELNO_EPME","EQUI_ELGA_EPME","DEGE_ELNO_DEPL","EPOT_ELEM_DEPL",
+                                     "ENEL_ELGA","ENEL_ELNO_ELGA") ),
+         NUME_COUCHE     =SIMP(statut='f',typ='I',defaut=1),
+         NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY") ),
+         ANGLE           =SIMP(statut='f',typ='I',defaut=0),
+         PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL") ),
+         SENSIBILITE     =FACT(statut='f',min=1,max=1,
+           THETA           =SIMP(statut='o',typ=theta_geom),
+         ),
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="MDA",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),
+           ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut=8),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),             
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.E-6),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps           
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 09/09/98   AUTEUR SABJLMA P.LATRUBESSE 
+MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op=  80,sd_prod=mode_cycl,
+                    fr="Modes propres d une structure à répétitivité cyclique à partir d une base de modes propres réels",
+                    docu="U4.52.05-E",reentrant='n',
+         BASE_MODALE     =SIMP(statut='o',typ=base_modale ),
+         NB_MODE         =SIMP(statut='f',typ='I',defaut= 999 ),
+         NB_SECTEUR      =SIMP(statut='o',typ='I' ),
+         LIAISON         =FACT(statut='o',min=01,max=01,
+           DROITE          =SIMP(statut='o',typ='TXM' ),
+           GAUCHE          =SIMP(statut='o',typ='TXM' ),
+           AXE             =SIMP(statut='f',typ='TXM' ),
+         ),
+         VERI_CYCL       =FACT(statut='f',min=01,max=01,
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF",) ),
+           DIST_REFE       =SIMP(statut='f',typ='R' ),
+         ),
+         CALCUL          =FACT(statut='o',min=01,max=01,
+           TOUT_DIAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NB_DIAM         =SIMP(statut='f',typ='I',max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE"
+                                ,into=("PLUS_PETITE","CENTRE","BANDE") ),
+           b_centre      =BLOC(condition = "OPTION == 'CENTRE'",
+             FREQ            =SIMP(statut='o',typ='R',min=01,max=01),
+           ),
+           b_bande       =BLOC(condition = "OPTION == 'BANDE'",
+             FREQ            =SIMP(statut='o',typ='R',min=02,max=02),
+           ),
+#  NMAX_FREQ n a-t-il pas un sens qu avec OPTION CENTRE                                
+           NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10 ),
+           PREC_SEPARE     =SIMP(statut='f',typ='R',defaut= 100. ),
+           PREC_AJUSTE     =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+           NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 50 ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 24/05/2000   AUTEUR D6BHHBQ B.QUINNEZ 
+def mode_iter_inv_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
+  if TYPE_RESU == "MODE_FLAMB" : return mode_flamb
+  if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c
+  if AsType(MATR_A) == matr_asse_depl_r : return mode_meca
+  if AsType(MATR_A) == matr_asse_pres_r : return mode_acou
+  if AsType(MATR_A) == matr_asse_gene_r : return mode_gene
+  raise AsException("type de concept resultat non prevu")
+
+MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op=  44,sd_prod=mode_iter_inv_prod
+                    ,fr="Modes propres par itérations inverses ; valeurs propres et modes réels ou complexes",
+                     docu="U4.52.04-F",reentrant='n',
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_C          =SIMP(statut='f',typ=matr_asse_depl_r ),
+         TYPE_RESU       =SIMP(statut='f',position='global',typ='TXM',defaut="DYNAMIQUE",   
+                               into=("MODE_FLAMB","DYNAMIQUE"),fr="Type d analyse" ),
+         b_dynam         =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+           CALC_FREQ       =FACT(statut='o',min=01,max=01,fr="Choix des paramètres pour le calcul des valeurs propres",
+           
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="AJUSTE",into=("SEPARE","AJUSTE","PROCHE"),
+                                   fr="Choix de l option pour estimer les valeurs propres"  ),
+             FREQ            =SIMP(statut='o',typ='R',max='**'),
+             AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),     
+             NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 0 ),           
+             NMAX_ITER_SEPARE=SIMP(statut='f',typ='I' ,defaut= 30 ),
+             PREC_SEPARE     =SIMP(statut='f',typ='R',defaut= 1.E-4 ),
+             NMAX_ITER_AJUSTE=SIMP(statut='f',typ='I',defaut= 15 ),
+             PREC_AJUSTE     =SIMP(statut='f',typ='R',defaut= 1.E-4 ),
+
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2 ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+           ),
+         ),
+         b_flamb        =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+           CALC_FREQ       =FACT(statut='o',min=01,max=01,fr="Choix des paramètres pour le calcul des valeurs propres",
+           
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="AJUSTE",into=("SEPARE","AJUSTE","PROCHE"),
+                                 fr="Choix de l option pour estimer les valeurs propres"  ),
+             CHAR_CRIT       =SIMP(statut='o',typ='R',max='**' ),
+             NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 0 ),           
+             NMAX_ITER_SEPARE=SIMP(statut='f',typ='I' ,defaut= 30 ),
+             PREC_SEPARE     =SIMP(statut='f',typ='R',defaut= 1.E-4 ),
+             NMAX_ITER_AJUSTE=SIMP(statut='f',typ='I',defaut= 15 ),
+             PREC_AJUSTE     =SIMP(statut='f',typ='R',defaut= 1.E-4 ),
+           
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2 ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+           ),
+         ),
+         CALC_MODE       =FACT(statut='d',min=00,max=01,fr="Choix des paramètres pour le calcul des vecteurs propres",
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="DIRECT",into=("DIRECT","RAYLEIGH") ),
+           PREC            =SIMP(statut='f',typ='R',defaut= 1.E-5,fr="Précision de convergence" ),
+           NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 30 ),
+         ),
+         VERI_MODE       =FACT(statut='d',min=00,max=01,
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-2,fr="Valeur limite admise pour l ereur a posteriori des modes"  ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 24/05/2000   AUTEUR D6BHHBQ B.QUINNEZ 
+def mode_iter_simult_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
+  if TYPE_RESU == "MODE_FLAMB" : return mode_flamb
+  if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c
+  if AsType(MATR_A) == matr_asse_depl_r : return mode_meca
+  if AsType(MATR_A) == matr_asse_pres_r : return mode_acou
+  if AsType(MATR_A) == matr_asse_gene_r : return mode_gene
+  raise AsException("type de concept resultat non prevu")
+
+MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_prod,
+                      fr="Modes propres par itérations simultanées ; valeurs propres et modes propres réels ou complexes",
+                      docu="U4.52.03-E",reentrant='n',
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_C          =SIMP(statut='f',position='global',typ=matr_asse_depl_r ),
+         METHODE         =SIMP(statut='f',position='global',typ='TXM',defaut="SORENSEN",into=("TRI_DIAG","JACOBI","SORENSEN") ),
+         TYPE_RESU       =SIMP(statut='f',position='global',typ='TXM',defaut="DYNAMIQUE",into=("MODE_FLAMB","DYNAMIQUE"),
+                               fr="Type d analyse" ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="SANS",into=("MODE_RIGIDE","SANS"),fr="Calcul des modes de corps rigide, uniquement pour la méthode TRI_DIAG" ),
+
+         b_flamb         =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+           CALC_FREQ       =FACT(statut='d',min=00,max=01,
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
+                                   fr="Choix de l option et par conséquent du shift du problème modal" ),
+             b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10 ),
+             ),
+             b_centre      =BLOC(condition = "OPTION == 'CENTRE'",fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+               CHAR_CRIT       =SIMP(statut='o',typ='R',min=01,max=01,fr="Charge critique autour de laquelle on cherche les charges critiques propres"),
+             ),
+             b_bande       =BLOC(condition = "(OPTION == 'BANDE')",fr="Recherche des valeurs propres dans une bande donnée",
+               CHAR_CRIT       =SIMP(statut='o',typ='R',min=02,max=02,fr="Valeur des deux charges critiques délimitant la bande de recherche"),
+             ),           
+             APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG"),fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),           
+             DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+             b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
+               PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12 ),
+               NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5 ),
+               PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8 ),
+               NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30 ), 
+             ),
+             b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
+               PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10 ),
+               NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40 ),
+               PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+               NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12 ),
+             ),
+             b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
+               PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+               NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20 ),  
+               PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717 ),
+             ),
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2 ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+           ),
+         ),
+
+         b_dynam        =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+           CALC_FREQ       =FACT(statut='d',min=00,max=01,
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
+                                   fr="Choix de l option et par conséquent du shift du problème modal" ),
+             b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10 ),
+             ),
+             b_centre       =BLOC(condition = "OPTION == 'CENTRE'",fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+               FREQ            =SIMP(statut='o',typ='R',min=01,max=01,fr="Fréquence autour de laquelle on cherche les fréquences propres"),
+               AMOR_REDUIT     =SIMP(statut='f',typ='R',max=01),
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10 ),
+             ),
+             b_bande         =BLOC(condition = "(OPTION == 'BANDE')",fr="Recherche des valeurs propres dans une bande donnée",
+               FREQ            =SIMP(statut='o',typ='R',min=02,max=02,fr="Valeur des deux fréquences délimitant la bande de recherche"),
+             ),           
+             APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG"),fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),           
+             DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+             b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
+               PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12 ),
+               NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5 ),
+               PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8 ),
+               NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30 ), 
+             ),
+             b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
+               PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10 ),
+               NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40 ),
+               PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+               NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12 ),
+             ),
+             b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
+               PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+               NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20 ),  
+               PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717 ),
+             ),
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2 ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+           ),
+         ),
+
+         VERI_MODE       =FACT(statut='d',min=00,max=01,
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-3 ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-6,fr="Valeur limite admise pour l ereur a posteriori des modes" ),
+           STURM           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),        
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN 
+MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op=  93,sd_prod=mode_stat,
+                   fr="Calcul de modes statiques",
+                   docu="U4.52.14-E",reentrant='n',
+         MATR_RIGI       =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         DDL_IMPO        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
+                   UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+           SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         FORCE_NODALE    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
+                   UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+           SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         ACCE_UNIF       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('AXE','DIRECTION', ),),
+           AXE             =SIMP(statut='f',typ='TXM',into=("X","Y","Z"),max=03),
+           DIRECTION       =SIMP(statut='f',typ='R',max=03),
+           b_dir           =BLOC(condition = "DIRECTION != None",
+             NOM_DIR         =SIMP(statut='f',typ='TXM' ),
+           ), 
+         ),
+         ACCE_IMPO       =FACT(statut='f',min=01,max='**',
+            regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
+                    UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+           SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/05/2000   AUTEUR CIBHHAB N.RAHNI 
+MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca,
+                      fr="Modélisation d une base modale pour tenir compte du couplage fluidélastique (mêmes déformées modales, modification des valeurs des fréquences et amortissements)",
+                      docu="U4.66.21-C",reentrant='f',
+#  la commande modi_base _modale : reentrant = f ou o                      
+         regles=(EXCLUS('AMOR_UNIF','AMOR_REDUIT', ),),
+         BASE            =SIMP(statut='o',typ=mode_meca ),
+         BASE_ELAS_FLUI  =SIMP(statut='o',typ=melasflu ),
+         NUME_VITE_FLUI  =SIMP(statut='o',typ='I' ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         AMOR_UNIF       =SIMP(statut='f',typ='R' ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 22/05/2000   AUTEUR AUBHHMB M.BONNAMY 
+MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage,
+                   fr="Modification de la connectivité de groupes de mailles 2D ou 3D affectées à la modélisation de contact",
+                   docu="U4.23.04-C",reentrant='o',
+      regles=(UN_PARMI('ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE'),
+              EXCLUS('EQUE_PIQUA','PLAQ_TUBE'),
+              EXCLUS('EQUE_PIQUA','TUBE_COUDE'),),
+         MAILLAGE        =SIMP(statut='o',typ=maillage ),         
+         
+         ORIE_CONTACT    =FACT(statut='f',min=01,max=01,
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+         ),
+         
+         DEFORME         =FACT(statut='f',min=01,max=01,
+           OPTION          =SIMP(statut='o',typ='TXM',into=("TRAN",) ),
+           DEPL            =SIMP(statut='o',typ=cham_no_depl_r ),
+         ),
+         
+         EQUE_PIQUA      =FACT(statut='f',min=01,max=01,
+           GROUP_NO        =SIMP(statut='o',typ=grno),
+           E_BASE          =SIMP(statut='o',typ='R' ),
+           DEXT_BASE       =SIMP(statut='o',typ='R' ),
+           L_BASE          =SIMP(statut='o',typ='R' ),
+           L_CHANF         =SIMP(statut='o',typ='R' ),
+           H_SOUD          =SIMP(statut='o',typ='R' ),
+           ANGL_SOUD       =SIMP(statut='o',typ='R' ),
+           JEU_SOUD        =SIMP(statut='o',typ='R' ),
+           E_CORP          =SIMP(statut='o',typ='R' ),
+           DEXT_CORP       =SIMP(statut='o',typ='R' ),
+           AZIMUT          =SIMP(statut='o',typ='R' ),
+           RAFF_MAIL       =SIMP(statut='o',typ='TXM' ),
+           X_MAX           =SIMP(statut='o',typ='R' ),
+         ),
+         ORIE_PEAU_2D    =FACT(statut='f',min=01,max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+         ),
+         ORIE_PEAU_3D    =FACT(statut='f',min=01,max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+         ),
+         ORIE_NORM_COQUE =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('NOEUD','GROUP_NO'),
+                  PRESENT_PRESENT('NOEUD','VECT_NORM'),
+                  PRESENT_PRESENT('GROUP_NO','VECT_NORM'),),
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+           VECT_NORM       =SIMP(statut='f',typ='R',max=03),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+         ),
+         b_modele        =BLOC(condition = "(ORIE_PEAU_2D != None) or (ORIE_PEAU_3D != None) or(ORIE_NORM_COQUE != None)",
+           MODELE          =SIMP(statut='o',typ=modele ),
+         ),
+         PLAQ_TUBE       =FACT(statut='f',min=01,max=01,
+           DEXT            =SIMP(statut='o',typ='R' ),
+           EPAIS           =SIMP(statut='o',typ='R' ),
+           L_TUBE_P1       =SIMP(statut='o',typ='R' ),
+           AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),
+           COUTURE         =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",)  ),
+         ),
+         TUBE_COUDE      =FACT(statut='f',min=01,max=01,
+           ANGLE           =SIMP(statut='o',typ='R' ),
+           R_CINTR         =SIMP(statut='o',typ='R' ),
+           L_TUBE_P1       =SIMP(statut='o',typ='R' ),
+         ),
+         MODI_MAILLE     =FACT(statut='f',min=01,max=01,
+           regles=(AU_MOINS_UN('GROUP_MA_FOND','MAILLE_FOND','GROUP_NO_FOND','NOEUD_FOND'),),
+           OPTION          =SIMP(statut='o',typ='TXM',into=("NOEUD_QUART",) ),
+           GROUP_MA_FOND   =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_FOND     =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_FOND   =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_FOND      =SIMP(statut='f',typ=no,max='**'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 07/04/98   AUTEUR ACBHHCD G.DEVESA 
+MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=obstacle,
+                   fr=" ",docu="U4.44.22-A",reentrant='f',
+      regles=(PRESENT_ABSENT('R_MOBILE','CRAYON'),),
+         TABL_USURE      =SIMP(statut='f',typ=tabl_post_usur),
+         INST            =SIMP(statut='f',typ='R'),  
+         OBSTACLE        =SIMP(statut='f',typ=obstacle),
+         GUIDE           =SIMP(statut='o',typ=obstacle),
+         CRAYON          =SIMP(statut='f',typ=obstacle),
+         R_MOBILE        =SIMP(statut='f',typ='R'),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 05/09/2000   AUTEUR CIBHHLV L.VIVAN 
+def norm_mode_prod(MODE,**args ):
+  if AsType(MODE) == mode_meca   : return mode_meca
+  if AsType(MODE) == mode_meca_c : return mode_meca_c
+  if AsType(MODE) == mode_flamb  : return mode_flamb
+  raise AsException("type de concept resultat non prevu")
+
+NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
+               fr="Normalisation de modes propres",
+               docu="U4.52.11-E",reentrant='f',
+         regles=(UN_PARMI('NORME','NOEUD','AVEC_CMP','SANS_CMP'),),
+         MODE            =SIMP(statut='o',typ=(mode_meca,mode_flamb) ),
+         NORME           =SIMP(statut='f',typ='TXM',fr="Norme prédéfinie : masse généralisée, euclidienne,...",
+                               into=("MASS_GENE","RIGI_GENE","EUCL","EUCL_TRAN","TRAN","TRAN_ROTA") ),
+         NOEUD           =SIMP(statut='f',typ=no, fr="Composante donnée d un noeud spécifié égale à 1"),
+         b_noeud         =BLOC(condition = "NOEUD != None",                          
+           NOM_CMP         =SIMP(statut='o',typ='TXM' ),
+         ),
+         AVEC_CMP        =SIMP(statut='f',typ='TXM',fr="Norme plus grande composante = 1 en prenant seulement en compte les degrés de libertés suivant",max='**'),
+         SANS_CMP        =SIMP(statut='f',typ='TXM',fr="Norme plus grande composante = 1 en ne prenant pas en compte les degrés de libertés suivant",max='**'),
+         MASS_INER       =SIMP(statut='f',typ=tabl_mass_iner ),
+         MODE_SIGNE      =FACT(statut='f',min=00,max=01,fr="Imposer un signe sur une des composantes des modes",
+           NOEUD           =SIMP(statut='o',typ=no,fr="Noeud où sera imposé le signe"),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',fr="Composante du noeud où sera imposé le signe" ),
+           SIGNE           =SIMP(statut='f',typ='TXM',defaut="POSITIF",into=("NEGATIF","POSITIF"),fr="Choix du signe" ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 19/05/2000   AUTEUR JFBHHUC C.ROSE 
+NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl,docu="U4.61.11-F",reentrant='n',
+              fr="Etablissement de la numérotation des ddl avec ou sans renumérotation et du stockage de la matrice",
+         MATR_RIGI       =SIMP(statut='o',typ=(matr_elem_depl_r ,matr_elem_depl_c,   
+                                               matr_elem_temp_r,matr_elem_pres_c),max='**' ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+         b_mult_front    =BLOC(condition="METHODE=='MULT_FRONT'",fr="paramètres associés à la méthode multifrontale",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS") ),
+         ),
+         b_ldlt          =BLOC(condition="METHODE=='LDLT'",fr="paramètres associés à la méthode LDLT",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS") ),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+         ),
+         b_gcpc          =BLOC(condition="METHODE=='GCPC'",fr="paramètres associés à la méthode gradient conjugué",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS") ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 02/10/96   AUTEUR CIBHHLV L.VIVAN 
+NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene,
+                   fr="Etablissement de la numérotation des ddl d un modèle établi en coordonnées généralisées",
+                    docu="U4.65.03-D",reentrant='n',
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         BASE            =SIMP(statut='f',typ=(mode_meca,base_modale,mode_gene ) ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999 ),
+         STOCKAGE        =SIMP(statut='f',typ='TXM',defaut="LIGN_CIEL",into=("PLEIN","DIAG","LIGN_CIEL") ),
+         TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+)  ;
+#& MODIF COMMANDE  DATE 04/08/98   AUTEUR SABJLMA P.LATRUBESSE 
+POST_DYNA_ALEA=OPER(nom="POST_DYNA_ALEA",op= 132,sd_prod=tabl_post_alea,
+                    fr="Traitements statistiques de résultats de type interspectre et impression sur fichiers",
+                    docu="U4.84.04-D",reentrant='n',
+         regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I','OPTION'),),
+         INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
+         NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),  
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE_I    =SIMP(statut='f',typ='I',max='**' ),
+         NOEUD_I         =SIMP(statut='f',typ=no,max='**'),         
+         OPTION          =SIMP(statut='f',typ='TXM',into=("DIAG",) ),
+         b_nume_ordre_i =BLOC(condition = "NUME_ORDRE_I != None",
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I',max='**' ),   
+         ),  
+         b_noeud_i      =BLOC(condition = "NOEUD_I != None",
+           NOEUD_J         =SIMP(statut='o',typ=no,max='**'),
+           NOM_CMP_I       =SIMP(statut='o',typ='TXM',max='**' ),  
+           NOM_CMP_J       =SIMP(statut='o',typ='TXM',max='**' ),     
+         ),  
+         DEPASSEMENT     =FACT(statut='f',min=01,max='**',
+           fr="Loi de dépassement d un seuil pendant une durée donnée",
+           regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
+           VALE_MIN        =SIMP(statut='f',typ='R' ),  
+           VALE_MAX        =SIMP(statut='f',typ='R' ),  
+           PAS             =SIMP(statut='f',typ='R' ),  
+           DUREE           =SIMP(statut='f',typ='R',defaut= 1. ),  
+         ),
+         RAYLEIGH        =FACT(statut='f',min=01,max='**',
+           fr="Densité de probabilité de pic positif, loi adaptée à des signaux à bande étroite",
+           regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
+           VALE_MIN        =SIMP(statut='f',typ='R' ),  
+           VALE_MAX        =SIMP(statut='f',typ='R' ),  
+           PAS             =SIMP(statut='f',typ='R' ),  
+         ),
+         GAUSS           =FACT(statut='f',min=01,max='**',
+           fr="Densité de probabilité de pic positif, loi normale adaptée à des signaux large bande",
+           regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
+           VALE_MIN        =SIMP(statut='f',typ='R' ),  
+           VALE_MAX        =SIMP(statut='f',typ='R' ),  
+           PAS             =SIMP(statut='f',typ='R' ),  
+         ),
+         VANMARCKE       =FACT(statut='f',min=01,max='**',
+           fr="Probabilité de non dépassement de seuil pendant une durée donnée (analyse sismique)",
+           regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
+           VALE_MIN        =SIMP(statut='f',typ='R' ),  
+           VALE_MAX        =SIMP(statut='f',typ='R' ),  
+           PAS             =SIMP(statut='f',typ='R' ),  
+           DUREE           =SIMP(statut='f',typ='R',defaut= 10. ),  
+         ),
+         MOMENT          =SIMP(statut='f',typ='I',max='**',fr="Moments spectraux en complément des cinq premiers" ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR CIBHHLV L.VIVAN 
+POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=tabl_post_dyna,
+                      fr="Post-traitements en coordonnées généralisées issus de DYNA_TRAN_MODAL",
+                      docu="U4.84.02-D",reentrant='n',
+        regles=(UN_PARMI('CHOC','RELA_EFFO_DEPL', ),),
+         RESU_GENE       =SIMP(statut='o',typ=tran_gene ),
+         CHOC            =FACT(statut='f',min=01,max='**',
+                               fr="Analyse des non linéarités de choc",
+           INST_INIT       =SIMP(statut='f',typ='R',defaut= -1. ),  
+           INST_FIN        =SIMP(statut='f',typ='R',defaut= 999. ),  
+           NB_BLOC         =SIMP(statut='f',typ='I',defaut= 1 ),  
+           SEUIL_FORCE     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           DUREE_REPOS     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="USURE",into=("IMPACT","USURE") ),
+           NB_CLASSE       =SIMP(statut='f',typ='I',defaut= 10 ),  
+         ),
+         RELA_EFFO_DEPL  =FACT(statut='f',min=01,max=01,
+                               fr="Analyse des relationsnon linéaires effort-déplacement",
+           NOEUD           =SIMP(statut='o',typ=no),
+           NOM_CMP         =SIMP(statut='o',typ='TXM' ),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2000   AUTEUR G8BHHXD X.DESROCHES 
+def post_elem_prod( MASS_INER,ENER_POT,ENER_CIN,INDU_MUTU,WEIBULL,
+                    CARA_GEOM,CARA_POUTRE,RICE_TRACEY,CHAR_LIMITE,
+                    INDIC_ENER,INDIC_SEUIL,ENER_ELAS,ENER_TOTALE,
+                    AIRE_INTERNE,**args ):
+  if MASS_INER    != None  : return tabl_mass_iner
+  if ENER_POT     != None  : return tabl_ener_pot
+  if ENER_CIN     != None  : return tabl_ener_cin
+  if INDU_MUTU    != None  : return tabl_indu_mutu
+  if WEIBULL      != None  : return tabl_weibull
+  if CARA_GEOM    != None  : return tabl_cara_geom
+  if CARA_POUTRE  != None  : return tabl_cara_geom
+  if RICE_TRACEY  != None  : return tabl_rice_tracey
+  if CHAR_LIMITE  != None  : return tabl_char_limite
+  if INDIC_ENER   != None  : return tabl_indic_ener
+  if INDIC_SEUIL  != None  : return tabl_indic_seuil
+  if ENER_ELAS    != None  : return tabl_ener_elas
+  if ENER_TOTALE  != None  : return tabl_ener_totale
+  if AIRE_INTERNE != None  : return tabl_aire_int
+  raise AsException("type de concept resultat non prevu")
+
+POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-D",reentrant='f',
+               fr="Calcul de quantités globales (masse, inerties, énergie, ...) sur tout ou partie du modèle",
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',       
+                        'NOEUD_CMP','LIST_ORDRE','LIST_INST','LIST_FREQ','NOM_CAS'),
+                 EXCLUS('CHAM_GD','RESULTAT'),
+                 UN_PARMI('MASS_INER', 'ENER_POT', 'ENER_CIN', 'INDU_MUTU',
+                          'WEIBULL', 'RICE_TRACEY', 'CARA_GEOM','CHAR_LIMITE',
+                          'CARA_POUTRE', 'INDIC_ENER', 'INDIC_SEUIL',
+                          'AIRE_INTERNE','ENER_ELAS','ENER_TOTALE'),
+                 PRESENT_PRESENT( 'MASS_INER', 'MODELE' ),
+                 PRESENT_PRESENT( 'CARA_GEOM', 'MODELE' ),
+                 PRESENT_PRESENT( 'AIRE_INTERNE', 'MODELE' ),
+                 PRESENT_PRESENT( 'CARA_POUTRE', 'MODELE' ),
+                 PRESENT_PRESENT( 'ENER_POT', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'ENER_CIN', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'INDU_MUTU', 'MODELE','CHARGE' ),
+                 PRESENT_PRESENT( 'WEIBULL', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'RICE_TRACEY', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'INDIC_ENER', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'INDIC_SEUIL', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'ENER_ELAS', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'ENER_TOTALE', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'CHAR_LIMITE', 'MODELE', 'CHAM_MATER' ),
+             ),    
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
+         MODE_FOURIER    =SIMP(statut='f',typ='I',defaut=0),  
+         NUME_COUCHE     =SIMP(statut='f',typ='I',defaut=1),  
+         NIVE_COUCHE     =SIMP(statut='f',typ='TXM',into=("INF","SUP","MOY"),defaut="MOY"),  
+         ANGLE           =SIMP(statut='f',typ='I',defaut=0),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         GEOMETRIE       =SIMP(statut='f',typ='TXM',defaut="INITIALE",into=("INITIALE","DEFORMEE")),
+         CHAM_GD         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_temp_r,cham_elem_ener_r) ),
+         RESULTAT        =SIMP(statut='f',typ=(mode_meca,evol_elas,evol_ther,evol_noli,mult_elas,fourier_elas) ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),  
+         LIST_ORDRE      =SIMP(statut='f',typ=listis),
+         INST            =SIMP(statut='f',typ='R',max='**'),  
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),  
+         LIST_FREQ       =SIMP(statut='f',typ=listr8),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),  
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),  
+         NOM_CAS         =SIMP(statut='f',typ='TXM',max='**'),  
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),  
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+
+         MASS_INER       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ORIG_INER       =SIMP(statut='f',typ='R',min=3,max=3 ),  
+         ),
+
+         ENER_POT        =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         ENER_CIN        =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         INDU_MUTU       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         WEIBULL         =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="SIGM_ELGA",into=("SIGM_ELGA","SIGM_ELMOY")),
+           CORR_PLAST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut=1.),  
+         ),
+
+         RICE_TRACEY     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="SIGM_ELGA",into=("SIGM_ELGA","SIGM_ELMOY")),
+           LOCAL           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+         ),
+
+         INDIC_ENER      =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         ENER_ELAS       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         ENER_TOTALE    =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         CHAR_LIMITE     =FACT(statut='f',min=00,max=01,
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+           TOUT            =SIMP(statut='o',typ='TXM',into=("OUI",)),
+           N               =SIMP(statut='f',typ='R',max=1),  
+         ),
+
+         INDIC_SEUIL     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         CARA_GEOM       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           SYME_X          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           SYME_Y          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           ORIG_INER       =SIMP(statut='f',typ='R',min=2,max=2),  
+         ),
+
+         CARA_POUTRE     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA'),
+                   ENSEMBLE('LONGUEUR','LIAISON','MATERIAU'),),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),  
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA_INTE   =SIMP(statut='f',typ=grma,max='**'),
+           CARA_GEOM       =SIMP(statut='f',typ=tabl_cara_geom),
+           LAPL_PHI        =SIMP(statut='f',typ=evol_ther),
+           LAPL_PHI_Y      =SIMP(statut='f',typ=evol_ther),
+           LAPL_PHI_Z      =SIMP(statut='f',typ=evol_ther),
+           LIAISON         =SIMP(statut='f',typ='TXM',into=("ROTULE","ENCASTREMENT")),
+           LONGUEUR        =SIMP(statut='f',typ='R'),  
+           MATERIAU        =SIMP(statut='f',typ=mater),
+           OPTION          =SIMP(statut='f',typ='TXM',into=("CARA_TORSION","CARA_CISAILLEMENT","CARA_GAUCHI") ),
+         ),
+
+         AIRE_INTERNE    =FACT(statut='f',min=1,max='**',
+           GROUP_MA_BORD   =SIMP(statut='o',typ=grma,max='**'),
+         ),
+ )  ;
+#& MODIF COMMANDE  DATE 16/12/97   AUTEUR CIBHHLV L.VIVAN 
+POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=tabl_post_f_alea,docu="U4.84.03-C",reentrant='n',
+                    fr="Calcul du dommage subi par une structure soumise à unesollicitation de type aléatoire",
+         regles=(ENSEMBLE('MOMENT_SPEC_0','MOMENT_SPEC_2'),
+                 PRESENT_PRESENT( 'MOMENT_SPEC_4','MOMENT_SPEC_0'),
+                 UN_PARMI('TABL_POST_ALEA','MOMENT_SPEC_0'), ),
+         MOMENT_SPEC_0   =SIMP(statut='f',typ='R'),  
+         MOMENT_SPEC_2   =SIMP(statut='f',typ='R'),  
+         MOMENT_SPEC_4   =SIMP(statut='f',typ='R'),  
+         TABL_POST_ALEA  =SIMP(statut='f',typ=tabl_post_alea),
+         COMPTAGE        =SIMP(statut='o',typ='TXM',into=("PIC","NIVEAU")),
+         DUREE           =SIMP(statut='f',typ='R',defaut= 1.),  
+         CORR_KE         =SIMP(statut='f',typ='TXM',into=("RCCM",)),
+         DOMMAGE         =SIMP(statut='o',typ='TXM',into=("WOHLER",)),
+         MATER           =SIMP(statut='o',typ=mater),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 01/10/97   AUTEUR CIBHHLV L.VIVAN 
+POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=tabl_post_fatig,docu="U4.83.01-C",reentrant='n',
+                  fr="Calcul du dommage subi par une structure soumise à une histoire de chargement",
+         regles=(PRESENT_PRESENT('CORR_KE','MATER'),
+                 PRESENT_PRESENT('CORR_SIGM_MOYE','MATER'),
+                 PRESENT_PRESENT('CRITERE','MATER'),   
+                 PRESENT_PRESENT('DOMMAGE','MATER'),),
+         HISTOIRE        =FACT(statut='o',min=1,max=1,
+           regles=(EXCLUS('SIGM','EPSI'),
+                   EXCLUS('SIGM','SIGM_XX'),
+                   EXCLUS('SIGM','SIGM_XZ'),
+                   EXCLUS('SIGM','SIGM_YZ'),
+                   EXCLUS('SIGM','EPSP'),     
+                   EXCLUS('SIGM','TEMP',),
+                   EXCLUS('EPSI','SIGM_XX'),
+                   EXCLUS('EPSI','SIGM_XZ'),
+                   EXCLUS('EPSI','SIGM_YZ'),
+                   EXCLUS('EPSI','EPSP'),     
+                   EXCLUS('EPSI','TEMP'),
+                   ENSEMBLE('SIGM_XX','SIGM_YY','SIGM_ZZ','SIGM_XY'),
+                   ENSEMBLE('SIGM_XZ','SIGM_YZ'),
+                   ENSEMBLE('EPSP','TEMP'),),
+           SIGM            =SIMP(statut='f',typ=fonction),
+           EPSI            =SIMP(statut='f',typ=fonction),
+           SIGM_XX         =SIMP(statut='f',typ=fonction),
+           SIGM_YY         =SIMP(statut='f',typ=fonction),
+           SIGM_ZZ         =SIMP(statut='f',typ=fonction),
+           SIGM_XY         =SIMP(statut='f',typ=fonction),
+           SIGM_XZ         =SIMP(statut='f',typ=fonction),
+           SIGM_YZ         =SIMP(statut='f',typ=fonction),
+           EPSP            =SIMP(statut='f',typ=fonction),
+           TEMP            =SIMP(statut='f',typ=fonction),
+         ),
+         COMPTAGE        =SIMP(statut='f',typ='TXM',into=("RAINFLOW","RCCM","NATUREL")),
+         DELTA_OSCI      =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+         COEF_MULT       =FACT(statut='f',min=1,max=1,
+           KT              =SIMP(statut='f',typ='R'),  
+         ),
+         CORR_KE         =SIMP(statut='f',typ='TXM',into=("RCCM",)),
+         CORR_SIGM_MOYE  =SIMP(statut='f',typ='TXM',into=("GOODMAN","GERBER")),
+         TAHERI_NAPPE    =SIMP(statut='f',typ=fonction),
+         TAHERI_FONC     =SIMP(statut='f',typ=fonction),
+         CRITERE         =SIMP(statut='f',typ='TXM',into=("CROSSLAND","PAPADOPOULOS")),
+         COEF_CORR       =SIMP(statut='f',typ='R'),  
+         DOMMAGE         =SIMP(statut='f',typ='TXM',into=("WOHLER","MANSON_COFFIN","TAHERI_MANSON",   
+                                                          "TAHERI_MIXTE","LEMAITRE")),
+         MATER           =SIMP(statut='f',typ=mater),
+         CUMUL           =SIMP(statut='f',typ='TXM',into=("LINEAIRE",)),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 15/09/1999   AUTEUR F1BHHAJ J.ANGLES 
+POST_GOUJ2E=OPER(nom="POST_GOUJ2E",op=187,sd_prod=tabl_post_gouj2e,reentrant='n', 
+                 fr=" ",docu="U4.GJ.30-A",
+         TABLE           =SIMP(statut='o',typ=tabl_post_rele),
+)  ;
+#& MODIF COMMANDE  DATE 31/05/2000   AUTEUR CIBHHLV L.VIVAN 
+POST_K1_K2_K3=OPER(nom="POST_K1_K2_K3",op=188,sd_prod=tabl_post_k,
+                   fr="Calcul des facteurs d intensité des contraintes par extrapolation du champ de déplacements sur les lèvres de la fissure",
+                   docu="U4.82.05-A",reentrant='n',
+      regles=(PRESENT_PRESENT('REPERE','VECT_Y', ),),
+         MODELISATION    =SIMP(statut='o',typ='TXM',into=("3D",
+                                                           "AXIS",
+                                                           "D_PLAN",
+                                                           "C_PLAN"
+                                                           ),
+                               fr="Modélisation cohérente avec celle utilisée pour le calcul des déplacements"),
+         FOND_3D         =SIMP(statut='f',typ=fond_fiss,fr="Fond de fissure issu de DEFI_FOND_FISS"),
+         b_fond_3d       =BLOC (condition="(FOND_3D != None)",
+                           MAILLAGE  = SIMP(statut='o',typ=maillage),
+                           PRECISION = SIMP(statut='f',typ='R',defaut=0.001)
+                           ),
+         MATER           =SIMP(statut='o',typ=mater,fr="Matériau homogène et isotrope cohérent avec celui utilisé pour le calcul des déplacements"),
+         TABL_DEPL_SUP   =SIMP(statut='o',typ=tabl_post_rele,fr="Table issue de post_releve_t sur les noeuds de la lèvre supérieure"),
+         TABL_DEPL_INF   =SIMP(statut='o',typ=tabl_post_rele,fr="Table issue de post_releve_t sur les noeuds de la lèvre inférieure"),
+         ABSC_CURV_MAXI  =SIMP(statut='f',typ='R',fr="distance maximum à partir du fond de fissure à utiliser pour le calcul"),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         REPERE          =SIMP(statut='f',typ='TXM',into=("LOCAL",),fr="Les déplacements sont transportés dans le repère local à la fissure"),
+         VECT_Y          =SIMP(statut='f',typ='R',max='**',fr="Vecteur dont la projection sur le plan normal au segment de calcul défini l axe Y local"),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 27/04/98   AUTEUR CIBHHLV L.VIVAN 
+POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=tabl_post_rccm,
+               fr="Vérification des critères de niveau 0 et certains critères de niveau A du RCC-M-B3200 (Edition 1991)",
+               docu="U4.83.11-C",reentrant='n',
+         MATER           =SIMP(statut='o',typ=mater ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="VALE_MAX",into=("VALE_MAX","VALE_INST") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         OPTION          =SIMP(statut='o',typ='TXM',max='**',
+                               into=("PM_PB",
+                                     "SN",
+                                     "FATIGUE_SPMAX",
+                                     "FATIGUE_ZH210"
+                                     ) ),
+         SEGMENT         =FACT(statut='o',min=01,max='**',fr="Segment sur lequel s effectue le depouillement",
+           INTITULE        =SIMP(statut='f',typ='TXM' ),
+           CHEMIN          =SIMP(statut='o',typ=(courbe,surface) ),
+         ),
+         TRANSITOIRE     =FACT(statut='o',min=01,max='**',fr="transitoire à dépouiller",
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+           INTITULE        =SIMP(statut='f',typ='TXM' ),
+           RESULTAT        =SIMP(statut='o',typ=(evol_elas,evol_noli) ),
+           RESU_SIGM_THER  =SIMP(statut='f',typ=(evol_elas,evol_noli),fr="résultat sous chargement thermique seul" ),
+           NB_OCCUR        =SIMP(statut='f',typ='I',defaut= 1,fr="nombre d occurences réelles de ce transitoire" ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("SIEF_ELNO_ELGA","SIGM_ELNO_DEPL") ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ),
+           b_inst          =BLOC(condition = "(INST != None) or (LIST_INST != None)" ,
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+           ), 
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 11/10/2000   AUTEUR CIBHHLV L.VIVAN 
+POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=tabl_post_rele,docu="U4.81.21-D",reentrant='n',
+                   fr="Relevé de valeurs et calculs d invariants avec stockage et organisation du relevé dans un concept de type table",
+         ACTION          =FACT(statut='o',min=01,max='**',
+           regles=(AU_MOINS_UN('CHEMIN','GROUP_NO','NOEUD'),
+                   EXCLUS('CHEMIN','GROUP_NO'),
+                   EXCLUS('CHEMIN','NOEUD'),
+                   PRESENT_ABSENT('CHEMIN','GROUP_MA','MAILLE'),
+                   UN_PARMI('RESULTAT','CHAM_GD'),            
+                   UN_PARMI('TOUT_CMP','NOM_CMP','INVARIANT','ELEM_PRINCIPAUX','RESULTANTE'),
+                   PRESENT_PRESENT('TRAC_DIR','DIRECTION'),          
+                   PRESENT_PRESENT('TRAC_DIRECTION','DIRECTION'),
+                   ENSEMBLE('MOMENT','POINT'),
+                   PRESENT_PRESENT('MOMENT','RESULTANTE'),
+                   PRESENT_ABSENT('TOUT_CMP','TRAC_DIRECTION','TRAC_NORMALE'),
+                   PRESENT_ABSENT('TOUT_CMP','TRAC_DIR','TRAC_NOR'),
+                   PRESENT_PRESENT('ORIGINE','AXE_Z'),),
+           INTITULE        =SIMP(statut='o',typ='TXM'),  
+           CHEMIN          =SIMP(statut='f',typ=(courbe,surface) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="MODULE",into=("MODULE","REEL","IMAG")),
+           CHAM_GD         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_temp_r,cham_no_pres_r,cham_no_var2_r,      
+                                                 cham_elem_sief_r,cham_elem_epsi_r,cham_elem_flux_r,cham_elem_crit_r,                 
+                                                 cham_elem_ener_r,cham_elem_dbel_r,cham_elem_pres_r,cham_elem_erreur,                 
+                                                 cham_elem_vari_r,cham_no_depl_c,cham_no_temp_c,cham_no_pres_c,
+                                                 cham_elem_sief_c,cham_elem_epsi_c)),
+           RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_ther,evol_noli,dyna_trans,          
+                                                 mode_meca,mode_flamb,mode_acou,base_modale,        
+                                                 mult_elas,fourier_elas,dyna_harmo,acou_harmo)),
+           b_extrac        =BLOC(condition = "RESULTAT != None",fr="extraction des résultats",
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','NUME_MODE','LIST_MODE',         
+                            'INST','LIST_INST','FREQ','LIST_FREQ','NOM_CAS'), ),           
+             NOM_CHAM        =SIMP(statut='o',typ='TXM' ),  
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),  
+             LIST_ORDRE      =SIMP(statut='f',typ=listis),
+             NUME_MODE       =SIMP(statut='f',typ='I',max='**'),  
+             LIST_MODE       =SIMP(statut='f',typ=listis),
+             NOM_CAS         =SIMP(statut='f',typ='TXM',max='**'),  
+             FREQ            =SIMP(statut='f',typ='R',max='**'),  
+             LIST_FREQ       =SIMP(statut='f',typ=listr8),
+             INST            =SIMP(statut='f',typ='R',max='**'),  
+             LIST_INST       =SIMP(statut='f',typ=listr8),
+             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),  
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           ),
+           TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),  
+           INVARIANT       =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           ELEM_PRINCIPAUX =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           RESULTANTE      =SIMP(statut='f',typ='TXM',max='**'),  
+           MOMENT          =SIMP(statut='f',typ='TXM',max='**'),  
+           POINT           =SIMP(statut='f',typ='R',max='**'),  
+
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL",
+                                 into=("GLOBAL","LOCAL","POLAIRE","UTILISATEUR","CYLINDRIQUE"),),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',min=3,max=3),  
+           ORIGINE         =SIMP(statut='f',typ='R',min=3,max=3),  
+           AXE_Z           =SIMP(statut='f',typ='R',min=3,max=3),  
+
+           TRAC_NOR        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           TRAC_DIR        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),  
+           TRAC_DIRECTION  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           TRAC_NORMALE    =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           VECT_Y          =SIMP(statut='f',typ='R',max='**'),  
+           MOYE_NOEUD      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           OPERATION       =SIMP(statut='o',typ='TXM',into=("EXTRACTION","MOYENNE","MOYENNE_RCCM")),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 18/01/99   AUTEUR CIBHHBC B.CIREE 
+POST_SIMPLIFIE=OPER(nom="POST_SIMPLIFIE",op=185,sd_prod=tabl_post_simpli,
+                    fr=" ",docu="U4.PS.10-A",reentrant='n',
+         MATER           =SIMP(statut='o',typ=(mater) ),
+         DEF_EQUI        =FACT(statut='f',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',max='**',defaut="UTO_2_3",
+                                 into=("UTO_2_3",) ),
+           EPAIS           =SIMP(statut='o',typ='R'),  
+           LONG_FISS       =SIMP(statut='o',typ='R'),  
+           LONG_LIGA_INT   =SIMP(statut='o',typ='R'),  
+           DEXT            =SIMP(statut='o',typ='R'),  
+           TEMP_ANALYSE    =SIMP(statut='f',typ='R'),  
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 07/04/98   AUTEUR ACBHHCD G.DEVESA 
+POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-C",reentrant='f',
+                fr="Calcul des volumes d'usure et des profondeurs d'usure",
+         regles=(UN_PARMI('RESU_GENE','PUIS_USURE'),
+                 PRESENT_PRESENT('RESU_GENE','NOEUD'),
+                 UN_PARMI('INST','LIST_INST'),),
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           TABL_USURE      =SIMP(statut='f',typ=tabl_post_usur),
+           INST_INIT       =SIMP(statut='f',typ='R'),  
+                         ),
+         RESU_GENE       =SIMP(statut='f',typ=tran_gene),
+         NOEUD           =SIMP(statut='f',typ=no,max=1),
+         INST_INIT       =SIMP(statut='f',typ='R',defaut=-1.0E+0),  
+         INST_FIN        =SIMP(statut='f',typ='R'),  
+         NB_BLOC         =SIMP(statut='f',typ='I',defaut= 1 ),  
+         PUIS_USURE      =SIMP(statut='f',typ='R'),  
+         LOI_USURE       =SIMP(statut='o',typ='TXM',into=("ARCHARD","KWU_EPRI","EDF_MZ")),
+         b_archard       =BLOC(condition = "LOI_USURE == 'ARCHARD'",
+           regles=(EXCLUS('MATER_USURE','OBSTACLE'),
+                   EXCLUS('MOBILE','USURE_OBST'),),
+           MOBILE          =FACT(statut='f',min=01,max=01,
+             COEF_USURE      =SIMP(statut='o',typ='R'), 
+           ),   
+           OBSTACLE        =FACT(statut='f',min=01,max=01,
+             COEF_USURE      =SIMP(statut='o',typ='R'), 
+           ),   
+           MATER_USURE     =SIMP(statut='f',typ='TXM'),  
+           USURE_OBST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         ),
+         b_kwu_epri        =BLOC(condition = "LOI_USURE == 'KWU_EPRI'",
+           regles=(UN_PARMI('MOBILE','MATER_USURE'), 
+                   EXCLUS('MATER_USURE','OBSTACLE'),
+                   EXCLUS('MOBILE','USURE_OBST'),),
+           MOBILE          =FACT(statut='f',min=01,max=01,
+             COEF_FNOR       =SIMP(statut='f',typ='R'),  
+             COEF_VTAN       =SIMP(statut='f',typ='R'),  
+             COEF_USURE      =SIMP(statut='f',typ='R'),  
+             COEF_K          =SIMP(statut='f',typ='R',defaut=5.0E+0),  
+             COEF_C          =SIMP(statut='f',typ='R',defaut=10.0E+0),  
+           ),   
+           OBSTACLE        =FACT(statut='f',min=01,max=01,
+             COEF_FNOR       =SIMP(statut='f',typ='R' ),  
+             COEF_VTAN       =SIMP(statut='f',typ='R' ),  
+             COEF_USURE      =SIMP(statut='o',typ='R'), 
+             COEF_K          =SIMP(statut='f',typ='R',defaut=5.0E+0),  
+             COEF_C          =SIMP(statut='f',typ='R',defaut=10.0E+0),  
+           ),   
+           MATER_USURE     =SIMP(statut='f',typ='TXM'),  
+           USURE_OBST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           FNOR_MAXI       =SIMP(statut='f',typ='R' ),  
+           VTAN_MAXI       =SIMP(statut='f',typ='R' ),  
+         ),
+         b_edf_mz          =BLOC(condition = "LOI_USURE == 'EDF_MZ'",
+           regles=(UN_PARMI('MOBILE','MATER_USURE'), 
+                   EXCLUS('MATER_USURE','OBSTACLE'),
+                   EXCLUS('MOBILE','USURE_OBST'),),
+           MOBILE          =FACT(statut='f',min=01,max=01,
+             COEF_USURE      =SIMP(statut='f',typ='R',defaut=1.0E-13),  
+             COEF_B          =SIMP(statut='f',typ='R',defaut=1.2E+0),  
+             COEF_N          =SIMP(statut='f',typ='R',defaut=2.44E-8),  
+             COEF_S          =SIMP(statut='f',typ='R',defaut=1.14E-16),  
+           ),   
+           OBSTACLE        =FACT(statut='f',min=01,max=01,
+             COEF_USURE      =SIMP(statut='o',typ='R',defaut=1.0E-13), 
+             COEF_B          =SIMP(statut='f',typ='R',defaut=1.2E+0),  
+             COEF_N          =SIMP(statut='f',typ='R',defaut=2.44E-8),  
+             COEF_S          =SIMP(statut='f',typ='R',defaut=1.14E-16),  
+           ),   
+           MATER_USURE     =SIMP(statut='f',typ='TXM'),  
+           USURE_OBST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         ),
+         SECTEUR         =FACT(statut='f',min=01,max='**',
+           CONTACT         =SIMP(statut='f',typ='TXM',into=("TUBE_BAV","TUBE_ALESAGE","TUBE_4_ENCO",  
+                                                            "GRAPPE_ALESAGE","TUBE_3_ENCO","TUBE_TUBE", 
+                                                            "GRAPPE_1_ENCO","GRAPPE_2_ENCO")),
+           COEF_USUR_MOBILE=SIMP(statut='f',typ='R'),  
+           COEF_USUR_OBST  =SIMP(statut='f',typ='R'),  
+           ANGL_INIT       =SIMP(statut='f',typ='R'),  
+           ANGL_FIN        =SIMP(statut='f',typ='R'),  
+         ),
+         CONTACT         =SIMP(statut='f',typ='TXM',into=("TUBE_BAV","TUBE_ALESAGE","TUBE_4_ENCO",    
+                                                          "GRAPPE_ALESAGE","TUBE_3_ENCO","TUBE_TUBE",        
+                                                          "GRAPPE_1_ENCO","GRAPPE_2_ENCO")),
+         LARGEUR_OBST    =SIMP(statut='f',typ='R'),  
+         ANGL_INCLI      =SIMP(statut='f',typ='R'),  
+         ANGL_ISTHME     =SIMP(statut='f',typ='R'),  
+         ANGL_IMPACT     =SIMP(statut='f',typ='R'),  
+         INST            =SIMP(statut='f',typ='R',max='**'),  
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         COEF_INST       =SIMP(statut='f',typ='R',defaut=1.0E+0),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 31/08/1999   AUTEUR G8BHHXD X.DESROCHES 
+POST_ZAC=OPER(nom="POST_ZAC",op= 175,sd_prod=mult_elas,docu="U4.83.21-B",reentrant='n',
+              fr="Donne l'état adapté ou accommodé d'une structure sous chargement cyclique élastique affine ou non",
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         EXCIT           =FACT(statut='o',min=01,max='**',
+           CHARGE          =SIMP(statut='o',typ=char_meca),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",into=("FIXE_CSTE",)),
+         ),
+         EVOL_ELAS       =SIMP(statut='o',typ=evol_elas),
+         b_evol_elas     =BLOC(condition="EVOL_ELAS != None",
+           regles=(UN_PARMI('NUME_ORDRE','LIST_INST','INST'),),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),  
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           INST            =SIMP(statut='f',typ='R',max='**'),  
+         ),
+         TEMP_ZAC        =SIMP(statut='f',typ='R',defaut=0.0E+0),  
+         EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+         b_evol_noli     =BLOC(condition="EVOL_NOLI != None",
+           INST_MAX        =SIMP(statut='o',typ='R'),  
+         ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),  
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+
+)  ;
+#& AJOUT COMMANDE    
+POURSUITE=MACRO(nom="POURSUITE",op=0,repetable='n',fr="Poursuite d une étude",
+                docu="U4.11.03-f",sd_prod = ops.POURSUITE,
+                op_init = ops.POURSUITE_context,fichier_ini = 1,
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM' ),
+         BASE            =FACT(fr="définition des parmètres associés aux bases JEVEUX",
+                               statut='f',min=01,max=03,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           CAS             =SIMP(statut='f',typ='TXM'),
+           NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+           LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+           LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max=03,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='o',typ='I'),
+         ),
+         CATALOGUE       =FACT(statut='f',min=01,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+         DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
+                               statut='f',min=01,max=01,
+           JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+                                 statut='f',typ='TXM',into=('TES',)),
+         ),
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=01,max=01,
+           GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),  
+           TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),  
+           TAILLE          =SIMP(statut='f',typ='I'),  
+           PARTITION       =SIMP(statut='f',typ='R' ),  
+         ),
+)  ;
+#& MODIF COMMANDE DATE 01/04/92 AUTEUR INCONNU INCONNU
+PRE_CHAR_IDEAS=PROC(nom="PRE_CHAR_IDEAS",op=100,docu="U7.01.02-E",
+                    fr="Conversion de conditions aux limites et chargements IDEAS en commandes Aster",
+         UNITE_IDEAS     =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_ASTER     =SIMP(statut='f',typ='I',defaut=21),  
+         MODELE          =SIMP(statut='o',typ=modele),
+)  ;
+#& MODIF COMMANDE DATE 28/11/90 AUTEUR INCONNU INCONNU
+PRE_GIBI=PROC(nom="PRE_GIBI",op=49,docu="U7.01.11-F",
+              fr="Conversion d un fichier de maillage GIBI",
+         UNITE_GIBI      =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
+)  ;
+#& MODIF COMMANDE DATE 23/04/92 AUTEUR INCONNU INCONNU
+PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47,docu="U7.01.01-F",
+               fr="Conversion d un fichier universel IDEAS-SUPERTAB au format Aster",
+         UNITE_IDEAS     =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
+)  ;
+#& MODIF COMMANDE  DATE 16/06/2000   AUTEUR D6BHHJP J.P.LEFEBVRE 
+PROCEDURE=PROC(nom="PROCEDURE",op=-3, docu="U4.13.03-E",
+          fr="Nommer le fichier de commandes secondaires",
+          NOM  =SIMP(statut='f',typ='TXM',defaut=" "),
+) ;                                                                                                                                                                                                                    
+#& MODIF COMMANDE  DATE 11/07/95   AUTEUR CIBHHLV L.VIVAN 
+def prod_matr_cham_prod(MATR_ASSE,**args):
+  if AsType(MATR_ASSE) == matr_asse_depl_r : return cham_no_depl_r
+  if AsType(MATR_ASSE) == matr_asse_depl_c : return cham_no_depl_c
+  if AsType(MATR_ASSE) == matr_asse_temp_r : return cham_no_temp_r
+  if AsType(MATR_ASSE) == matr_asse_pres_c : return cham_no_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=prod_matr_cham_prod,
+                    fr="Effectuer le produit d une matrice par un vecteur",
+                    docu="U4.72.06-B",reentrant='n',
+         MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_pres_c ) ),
+         CHAM_NO         =SIMP(statut='o',typ=(cham_no_depl_r,cham_no_depl_c,cham_no_temp_r,cham_no_pres_c ) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 12/05/99   AUTEUR VABHHTS J.PELLET 
+def proj_champ_prod(RESULTAT=None,CHAM_NO_REFE=None,**args ):
+    if AsType(RESULTAT)     == evol_ther      : return evol_ther
+    if AsType(RESULTAT)     == evol_elas      : return evol_elas
+    if AsType(RESULTAT)     == evol_noli      : return evol_noli
+    if AsType(CHAM_NO_REFE) == cham_no_depl_r : return cham_no_depl_r
+    if AsType(CHAM_NO_REFE) == cham_no_depl_c : return cham_no_depl_c
+    if AsType(CHAM_NO_REFE) == cham_no_pres_c : return cham_no_pres_c
+    if AsType(CHAM_NO_REFE) == cham_no_temp_r : return cham_no_temp_r
+    if AsType(CHAM_NO_REFE) == cham_no_epsi_r : return cham_no_epsi_r
+    if AsType(CHAM_NO_REFE) == cham_no_sief_r : return cham_no_sief_r
+    if AsType(CHAM_NO_REFE) == cham_no_flux_r : return cham_no_flux_r
+    raise AsException("type de concept resultat non prevu")
+
+PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,docu="U4.72.05-C",reentrant='n',
+                fr="Projection d un champ aux noeuds sur les noeuds d un autre maillage",
+# 
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="NUAGE_DEG_1",    
+                               into=("NUAGE_DEG_0","NUAGE_DEG_1","ELEM",) ),
+         b_nuage         =BLOC(condition="(METHODE=='NUAGE_DEG_1') or (METHODE=='NUAGE_DEG_0')",
+                               fr="Lissage d un nuage de points",
+           CHAM_NO         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_depl_c,cham_no_pres_c,cham_no_temp_r,        
+                                                 cham_no_epsi_r,cham_no_sief_r,cham_no_flux_r)),
+           CHAM_NO_REFE    =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_depl_c,cham_no_pres_c,cham_no_temp_r,        
+                                                 cham_no_epsi_r,cham_no_sief_r,cham_no_flux_r)),
+         ),                    
+         b_elem          =BLOC(condition="METHODE=='ELEM'",
+                              fr="Utilisation des fonctions de forme",
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','LIST_INST','LIST_FREQ','LIST_ORDRE'), ),
+           RESULTAT        =SIMP(statut='f',typ=(evol_ther,evol_elas,evol_noli) ),
+           MODELE_1        =SIMP(statut='f',typ=modele),
+           MODELE_2        =SIMP(statut='f',typ=modele),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),  
+           LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           INST            =SIMP(statut='f',typ='R',max='**' ),  
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           FREQ            =SIMP(statut='f',typ='R',max='**' ),  
+           LIST_FREQ       =SIMP(statut='f',typ=listr8),
+         ), 
+
+         VIS_A_VIS       =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT_1','GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   AU_MOINS_UN('TOUT_2','GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),),
+           TOUT_1          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           TOUT_2          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ), 
+)  ;
+#& MODIF COMMANDE  DATE 29/06/95   AUTEUR ACBHHJA G.JACQUART 
+PROJ_MATR_BASE=OPER(nom="PROJ_MATR_BASE",op=  71,sd_prod=matr_asse_gene_r,
+                    fr="Projection d une matrice assemblée sur une base (modale ou de RITZ)",
+                    docu="U4.63.12-E",reentrant='n',
+         regles=(UN_PARMI('MATR_ASSE','MATR_ASSE_GENE'),),            
+         BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene ) ),
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999 ),
+         MATR_ASSE       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         MATR_ASSE_GENE  =SIMP(statut='f',typ=matr_asse_gene_r ),
+)  ;
+
+#& MODIF COMMANDE  DATE 27/06/2000   AUTEUR CIBHHBC B.CIREE 
+def proj_mesu_modal_prod(MESURE,**args):
+     vale=MESURE['NOM_PARA']
+     if  vale == 'INST'   : return tran_gene
+     raise AsException("type de concept resultat non prevu")
+
+PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,
+                     sd_prod=proj_mesu_modal_prod,
+                     docu="U4.73.01-A",reentrant='n',
+                     fr="Extrapolation de resultats experimentaux sur un modele numerique en dynamique",
+
+# commentaire C. Durand-13/10/2000 :
+#le mot cle NOM_PARA, par construction, vaut tjs INST : donc on retourne TRAN_GENE a chaque fois
+#def proj_mesu_modal_prod(**args):
+#     vale=args['MESURE'].get_child('NOM_PARA').get_valeur()
+#     if  vale == 'INST'   : return tran_gene
+#     raise AsException("type de concept resultat non prevu")
+#PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,sd_prod=proj_mesu_modal_prod,)
+
+         MODELE          =SIMP(statut='f',typ=(modele) ),
+         MASS_GENE       =SIMP(statut='o',typ=(matr_asse_gene_r) ),
+         RIGI_GENE       =SIMP(statut='o',typ=(matr_asse_gene_r) ),
+         MESURE          =FACT(statut='o',min=01,max=01,
+           MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
+           CARA_ELEM       =SIMP(statut='o',typ=(cara_elem) ),
+           UNITE           =SIMP(statut='f',typ='I',defaut= 33 ),  
+           NOM_PARA        =SIMP(statut='f',typ='TXM',defaut="INST",into=("INST",) ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","SIGM_NOEU_DEPL","EPSI_NOEU_DEPL",) ),
+                         ),
+         REGULARISATION  =FACT(statut='f',min=01,max=01,
+      regles=(UN_PARMI('COEF_PONDER','COEF_PONDER_F', ),),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="TIKHONOV",into=("TIKHONOV",) ),
+           NORM_MIN        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+           COEF_PONDER     =SIMP(statut='f',typ='R',max='**' ),  
+           COEF_PONDER_F   =SIMP(statut='f',typ=(fonction),max='**' ),
+                         ),
+                       )  ;
+#& MODIF COMMANDE  DATE 11/02/98   AUTEUR SABJLMA P.LATRUBESSE 
+PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=tabl_intsp,docu="U4.63.14-C",reentrant='n',
+                    fr="Projection d un ou plusieurs spectres de turbulence, définis par DEFI_SPEC_TURB, sur un ensemble de bases modales ",
+      regles=(UN_PARMI('BASE_ELAS_FLUI','MODE_MECA','CHAM_NO'),
+              ENSEMBLE('FREQ_INIT','FREQ_FIN','NB_POIN'),),
+         SPEC_TURB       =SIMP(statut='o',typ=spectre,max='**' ),
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         CHAM_NO         =SIMP(statut='f',typ=cham_no_depl_r ),
+         FREQ_INIT       =SIMP(statut='f',typ='R' ),  
+         FREQ_FIN        =SIMP(statut='f',typ='R' ),  
+         NB_POIN         =SIMP(statut='f',typ='I' ),  
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG")),
+         GROUP_MA        =SIMP(statut='f',typ=grma),
+#  Quel est le type attendu derriere  MODELE_INTERFACE         
+         MODELE_INTERFACE=SIMP(statut='f',typ=modele),
+         VECT_X          =SIMP(statut='f',typ='R',min=03,max=03 ),  
+         VECT_Y          =SIMP(statut='f',typ='R',min=03,max=03 ),  
+         ORIG_AXE        =SIMP(statut='f',typ='R',min=03,max=03 ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 29/06/95   AUTEUR ACBHHJA G.JACQUART 
+PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op=  72,sd_prod=vect_asse_gene,
+                    fr="Projection d un vecteur assemblé sur une base (modale ou de RITZ)",
+                    docu="U4.63.13-E",reentrant='n',
+         regles=(UN_PARMI('VECT_ASSE','VECT_ASSE_GENE'),),              
+         BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene ) ),
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999 ),
+         TYPE_VECT       =SIMP(statut='f',typ='TXM',defaut="FORC"),
+         VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+         VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+)  ;
+#& MODIF COMMANDE  DATE 25/09/2000   AUTEUR T2BAXJM R.MASSON 
+RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=tabl_reca_weib,
+                     fr=" ",docu="U4.82.06-A",reentrant='n',
+         LIST_PARA       =SIMP(statut='o',typ='TXM',max='**',into=("SIGM_REFE","M",) ),
+         RESU            =FACT(statut='o',min=01,max='**',
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST',),            
+                   AU_MOINS_UN('TOUT','GROUP_MA','MAILLE', ),),
+           EVOL_NOLI       =SIMP(statut='o',typ=(evol_noli) ),
+           MODELE          =SIMP(statut='o',typ=(modele) ),
+           CHAM_MATER      =SIMP(statut='o',typ=(cham_mater) ),
+           TEMPE           =SIMP(statut='f',typ='R' ),  
+           LIST_INST_RUPT  =SIMP(statut='o',typ='R',max='**' ),  
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),  
+           INST            =SIMP(statut='f',typ='R',max='**' ),  
+           LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.E0 ),  
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.E0 ),  
+                         ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="SIGM_ELGA",into=("SIGM_ELGA","SIGM_ELMOY",) ),
+         CORR_PLAST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MAXI_VRAI",into=("MAXI_VRAI","REGR_LINE",) ),
+         INCO_GLOB_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+         ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),  
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
+                       )  ;
+#& MODIF COMMANDE  DATE 07/06/2000   AUTEUR VABHHTS J.PELLET 
+def recu_champ_prod(NOM_CHAM,RESULTAT,**args ):
+  if AsType(RESULTAT) == dyna_harmo : return cham_no_depl_c
+  if NOM_CHAM == "GEOMETRIE"      : return cham_no_geom_r
+  if NOM_CHAM == "DEPL"           : return cham_no_depl_r
+  if NOM_CHAM == "DEPL_ABSOLU"    : return cham_no_depl_r
+  if NOM_CHAM == "VITE"           : return cham_no_depl_r
+  if NOM_CHAM == "VITE_ABSOLU"    : return cham_no_depl_r
+  if NOM_CHAM == "ACCE"           : return cham_no_depl_r
+  if NOM_CHAM == "ACCE_ABSOLU"    : return cham_no_depl_r
+  if NOM_CHAM == "TEMP"           : return cham_no_temp_r
+  if NOM_CHAM == "FORC_NODA"      : return cham_no_depl_r
+  if NOM_CHAM == "REAC_NODA"      : return cham_no_depl_r
+  if NOM_CHAM == "EPSI_NOEU_DEPL" : return cham_no_sief_r
+  if NOM_CHAM == "SIGM_NOEU_CART" : return cham_no_sief_r
+  if NOM_CHAM == "SIGM_NOEU_DEPL" : return cham_no_sief_r
+  if NOM_CHAM == "SIGM_NOEU_VARI" : return cham_no_sief_r
+  if NOM_CHAM == "SIGM_NOEU_SIEF" : return cham_no_sief_r
+  if NOM_CHAM == "SIPO_NOEU_SIEF" : return cham_no_sief_r
+  if NOM_CHAM == "EFGE_NOEU_CART" : return cham_no_sief_r
+  if NOM_CHAM == "EFGE_NOEU_DEPL" : return cham_no_sief_r
+  if NOM_CHAM == "EQUI_NOEU_SIGM" : return cham_no_sief_r
+  if NOM_CHAM == "EQUI_NOEU_EPSI" : return cham_no_sief_r
+  if NOM_CHAM == "FLUX_NOEU_TEMP" : return cham_no_flux_r
+  if NOM_CHAM == "SIGM_NOZ1_ELGA" : return cham_no_sief_r
+  if NOM_CHAM == "SIGM_NOZ2_ELGA" : return cham_no_sief_r
+  if NOM_CHAM == "INTE_NOEU_ACTI" : return cham_no_inte_r
+  if NOM_CHAM == "INTE_NOEU_REAC" : return cham_no_inte_r
+  if NOM_CHAM == "PRES_NOEU_DBEL" : return cham_no_dbel_r
+  if NOM_CHAM == "PRES_NOEU_IMAG" : return cham_no_pres_r
+  if NOM_CHAM == "PRES_NOEU_REEL" : return cham_no_pres_r
+  if NOM_CHAM == "VARI_NOEU_ELGA" : return cham_no_var2_r
+  if NOM_CHAM == "META_NOEU_TEMP" : return cham_no_var2_r
+  if NOM_CHAM == "GRAD_NOEU_THETA": return cham_no_var2_r
+  if NOM_CHAM == "PHASMETA"       : return cham_elem_meta_r
+  if NOM_CHAM == "DEGE_ELNO_DEPL" : return cham_elem_epsi_r
+  if NOM_CHAM == "ECIN_ELEM_DEPL" : return cham_elem_ener_r
+  if NOM_CHAM == "EFGE_ELNO_CART" : return cham_elem_sief_r
+  if NOM_CHAM == "EFGE_ELNO_DEPL" : return cham_elem_sief_r
+  if NOM_CHAM == "EPOT_ELEM_DEPL" : return cham_elem_ener_r
+  if NOM_CHAM == "EPSG_ELGA_DEPL" : return cham_elem_epsi_r
+  if NOM_CHAM == "EPSG_ELNO_DEPL" : return cham_elem_epsi_r
+  if NOM_CHAM == "EPSP_ELGA"      : return cham_elem_epsi_r
+  if NOM_CHAM == "EPSP_ELNO"      : return cham_elem_epsi_r
+  if NOM_CHAM == "EPSI_ELGA_DEPL" : return cham_elem_epsi_r
+  if NOM_CHAM == "EPSI_ELNO_DEPL" : return cham_elem_epsi_r
+  if NOM_CHAM == "EPSA_ELNO"      : return cham_elem_epsi_r
+  if NOM_CHAM == "EQUI_ELGA_SIGM" : return cham_elem_sief_r
+  if NOM_CHAM == "EQUI_ELGA_EPSI" : return cham_elem_sief_r
+  if NOM_CHAM == "EQUI_ELNO_EPSI" : return cham_elem_sief_r
+  if NOM_CHAM == "EQUI_ELNO_SIGM" : return cham_elem_sief_r
+  if NOM_CHAM == "ERRE_ELEM_NOZ1" : return cham_elem_erreur
+  if NOM_CHAM == "ERRE_ELEM_NOZ2" : return cham_elem_erreur
+  if NOM_CHAM == "ERRE_ELGA_NORE" : return cham_elem_erreur
+  if NOM_CHAM == "ERRE_ELNO_ELGA" : return cham_elem_erreur
+  if NOM_CHAM == "FLUX_ELGA_TEMP" : return cham_elem_flux_r
+  if NOM_CHAM == "FLUX_ELNO_TEMP" : return cham_elem_flux_r
+  if NOM_CHAM == "INTE_ELNO_ACTI" : return cham_elem_inte_r
+  if NOM_CHAM == "INTE_ELNO_REAC" : return cham_elem_inte_r
+  if NOM_CHAM == "PRES_ELNO_DBEL" : return cham_elem_dbel_r
+  if NOM_CHAM == "PRES_ELNO_IMAG" : return cham_elem_pres_r
+  if NOM_CHAM == "PRES_ELNO_REEL" : return cham_elem_pres_r
+  if NOM_CHAM == "SIEF_ELGA"      : return cham_elem_sief_r
+  if NOM_CHAM == "SIEF_ELNO"      : return cham_elem_sief_r
+  if NOM_CHAM == "SIEF_ELGA_DEPL" : return cham_elem_sief_r
+  if NOM_CHAM == "SIGM_ELNO_CART" : return cham_elem_sief_r
+  if NOM_CHAM == "SIGM_ELNO_DEPL" : return cham_elem_sief_r
+  if NOM_CHAM == "SIGM_ELNO_VARI" : return cham_elem_sief_r
+  if NOM_CHAM == "SIGM_ELNO_SIEF" : return cham_elem_sief_r
+  if NOM_CHAM == "SIPO_ELNO_SIEF" : return cham_elem_sief_r
+  if NOM_CHAM == "SIEF_ELNO_ELGA" : return cham_elem_sief_r
+  if NOM_CHAM == "SIPO_ELNO_DEPL" : return cham_elem_sief_r
+  if NOM_CHAM == "SIRE_ELNO_DEPL" : return cham_elem_sief_r
+  if NOM_CHAM == "SOUR_ELGA_ELEC" : return cham_elem_sour_r
+  if NOM_CHAM == "VARI_ELGA"      : return cham_elem_vari_r
+  if NOM_CHAM == "VARI_ELNO"      : return cham_elem_vari_r
+  if NOM_CHAM == "VARI_ELNO_ELGA" : return cham_elem_vari_r
+  if NOM_CHAM == "VNOR_ELEM_DEPL" : return cham_elem_vnor_c
+  if NOM_CHAM == "DCHA_ELGA_SIGM" : return cham_elem_vari_r
+  if NOM_CHAM == "DCHA_ELNO_SIGM" : return cham_elem_vari_r
+  if NOM_CHAM == "RADI_ELGA_SIGM" : return cham_elem_vari_r
+  if NOM_CHAM == "RADI_ELNO_SIGM" : return cham_elem_vari_r
+  if NOM_CHAM == "ENDO_ELNO_SIGM" : return cham_elem_sief_r
+  if NOM_CHAM == "ENDO_ELNO_SIGA" : return cham_elem_sief_r
+  if NOM_CHAM == "ENDO_ELNO_SINO" : return cham_elem_sief_r
+  if NOM_CHAM == "EPME_ELNO_DEPL" : return cham_elem_epsi_r
+  if NOM_CHAM == "EPME_ELGA_DEPL" : return cham_elem_epsi_r
+  if NOM_CHAM == "EPME_ELNO_DPGE" : return cham_elem_epsi_r
+  if NOM_CHAM == "EPMG_ELNO_DEPL" : return cham_elem_epsi_r
+  if NOM_CHAM == "EPMG_ELGA_DEPL" : return cham_elem_epsi_r
+  if NOM_CHAM == "THETA"          : return cham_no_depl_r
+  if NOM_CHAM == "GRAD_ELGA_THETA" : return cham_elem_g_depl
+  if NOM_CHAM == "GRAD_ELNO_ELGA" : return cham_elem_g_depl
+  if NOM_CHAM == "HYDR_ELGA"      : return cham_elem_hydr_r
+  raise AsException("type de concept resultat non prevu")
+
+RECU_CHAMP=OPER(nom="RECU_CHAMP",op=  59,sd_prod=recu_champ_prod,
+                fr="Récupération dans un résultat composé d un seul champ aux noeuds ou par éléments",
+                docu="U4.71.01-F",reentrant='n',
+      regles=(UN_PARMI('TYPE_MAXI','NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP','NOM_CAS','ANGL', ),
+              UN_PARMI('RESULTAT','MAILLAGE'),),
+#  creer une structure de donnees RESULTAT global              
+         RESULTAT        =SIMP(statut='f',typ=resultat),
+         MAILLAGE        =SIMP(statut='f',typ=maillage),
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',     
+                               into=( "DEPL","VITE","ACCE","DEPL_ABSOLU",         
+                                      "VITE_ABSOLU","TEMP","ACCE_ABSOLU","FORC_NODA",
+                                      "REAC_NODA","EFGE_NOEU_DEPL","EFGE_NOEU_CART",
+                                      "EPSI_NOEU_DEPL","SIGM_NOEU_DEPL",
+                                      "SIGM_NOEU_CART","SIPO_NOEU_DEPL",
+                                      "EQUI_NOEU_SIGM","EQUI_NOEU_EPSI",
+                                      "FLUX_NOEU_TEMP","FLUX_ELGA_TEMP",
+                                      "FLUX_ELNO_TEMP","META_ELGA_TEMP",
+                                      "META_ELNO_TEMP","META_NOEU_TEMP",
+                                      "DURT_ELGA_META","DURT_ELNO_META",
+                                      "DURT_NOEU_META","SIEF_ELGA","SIEF_ELNO_ELGA",
+                                      "SIEF_ELGA_DEPL","VARI_ELNO_ELGA","VARI_ELGA",
+                                      "EPOT_ELEM_DEPL","ECIN_ELEM_DEPL",
+                                      "SOUR_ELGA_ELEC","PRES_ELNO_REEL",
+                                      "PRES_ELNO_IMAG","PRES_ELNO_DBEL",
+                                      "INTE_ELNO_ACTI","INTE_ELNO_REAC",
+                                      "EFGE_ELNO_DEPL","SIGM_ELNO_DEPL",
+                                      "EFGE_ELNO_CART","SIGM_ELNO_CART",
+                                      "SIPO_ELNO_DEPL","EPSI_ELNO_DEPL",
+                                      "EPSI_ELGA_DEPL","EPSG_ELNO_DEPL",
+                                      "EPSG_ELGA_DEPL","EPSP_ELNO","EPSP_ELGA",
+                                      "EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
+                                      "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI",
+                                      "ERRE_ELNO_ELGA","ERRE_ELGA_NORE",
+                                      "ERRE_ELEM_NOZ1","ERRE_ELEM_NOZ2",
+                                      "SIGM_NOZ1_ELGA","SIGM_NOZ2_ELGA",
+                                      "DEGE_ELNO_DEPL","SIRE_ELNO_DEPL",
+                                      "VNOR_ELEM_DEPL","SIEF_ELNO","VARI_ELNO",
+                                      "SIEF_NOEU_ELGA","VARI_NOEU_ELGA",
+                                      "PRES_NOEU_DBEL","PRES_NOEU_REEL",
+                                      "PRES_NOEU_IMAG","INTE_NOEU_ACTI",
+                                      "INTE_NOEU_REAC","DCHA_ELGA_SIGM",
+                                      "DCHA_ELNO_SIGM","RADI_ELGA_SIGM",
+                                      "RADI_ELNO_SIGM","ENDO_ELNO_SIGA",
+                                      "ENDO_ELNO_SINO","ENDO_ELNO_SIGM",
+                                      "SIGM_ELNO_VARI","SIGM_NOEU_VARI",
+                                      "EPME_ELNO_DEPL","EPME_ELGA_DEPL",
+                                      "EPME_ELNO_DPGE","EPMG_ELNO_DEPL",
+                                      "EPMG_ELGA_DEPL","GRAD_ELGA_THETA",
+                                      "GTHE_ELNO_ELGA","GRAD_NOEU_THETA","HYDR_ELGA",
+                                      "THETA","SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",) ),
+         TYPE_MAXI       =SIMP(statut='f',typ='TXM',     
+                               into=("MAXI","MINI","MAXI_ABS","MINI_ABS","NORM_TRAN") ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I' ),  
+         INST            =SIMP(statut='f',typ='R' ),  
+         FREQ            =SIMP(statut='f',typ='R' ),  
+         NUME_MODE       =SIMP(statut='f',typ='I' ),  
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**' ),  
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),  
+         ANGL            =SIMP(statut='f',typ='R' ),  
+         b_prec_crit     =BLOC(condition = "(INST != None) or (FREQ != None)",
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+         ), 
+         b_type_maxi     =BLOC(condition = "TYPE_MAXI != None",
+           regles=(EXCLUS('TOUT_ORDRE','LIST_INST' ),),
+           TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="VALE",into=("VALE","INST") ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ),
+           b_prec_crit   =BLOC(condition = "(INST != None) or (FREQ != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2000   AUTEUR CIBHHLV L.VIVAN 
+def recu_fonction_prod(RESULTAT=None,OBSTACLE=None,TABLE=None,RESU_GENE=None,BASE_ELAS_FLUI=None,CHAM_GD=None,TYPE_RESU=None,**args):
+  if AsType(RESULTAT) == dyna_harmo : return fonction_c
+#  On ne sait pas interpreter les deux conditions suivantes
+  if TABLE != None :
+     if TYPE_RESU != None :
+        if TYPE_RESU == "FONCTION_C" : return fonction_c
+        if TYPE_RESU == "FONCTION"   : return fonction
+     else:
+        return fonction
+  if RESU_GENE      != None         : return fonction
+  if BASE_ELAS_FLUI != None         : return fonction
+  if RESULTAT       != None         : return fonction
+  if CHAM_GD        != None         : return fonction
+  if OBSTACLE       != None         : return fonction
+  raise AsException("type de concept resultat non prevu")
+
+RECU_FONCTION=OPER(nom="RECU_FONCTION",op=  90,sd_prod=recu_fonction_prod,
+                   fr="Extraire sous forme d une fonction, l évolution temporelle d une composante d un champ ou d une table",
+                   docu="U4.32.03-E",reentrant='n',
+         regles=(UN_PARMI('CHAM_GD','RESULTAT','RESU_GENE','TABLE','BASE_ELAS_FLUI','OBSTACLE'),),
+             
+         CHAM_GD         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_temp_r,cham_no_pres_r,cham_elem_sief_r,
+                                               cham_elem_vari_r,cham_elem_epsi_r,cham_elem_flux_r,
+                                               cham_elem_pres_r,cham_elem_meta_r ) ),
+         RESULTAT        =SIMP(statut='f',typ=(evol_elas,dyna_trans,evol_noli,evol_ther,dyna_harmo ) ),
+         RESU_GENE       =SIMP(statut='f',typ=tran_gene),
+#  concept table à créer         
+         TABLE           =SIMP(statut='f',typ=table),
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu),
+         REPERE          =SIMP(statut='f',typ='TXM',into=("POLAIRE","GLOBAL") ),
+         OBSTACLE        =SIMP(statut='f',typ=obstacle),
+         
+         b_tran_gene = BLOC ( condition = "RESU_GENE != None",fr="Récupération de la fonction concernant les chocs à partir d un concept TRAN_GENE",
+            regles=(PRESENT_PRESENT('SOUS_STRUC','INTITULE'),
+                    PRESENT_ABSENT('MULT_APPUI','CORR_STAT'),),
+             MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","OUI") ),
+             CORR_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+             ACCE_MONO_APPUI =SIMP(statut='f',typ=fonction),
+             PARA_X          =SIMP(statut='f',typ='TXM' ),
+             PARA_Y          =SIMP(statut='f',typ='TXM' ),
+             SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+             LIST_PARA       =SIMP(statut='f',typ=listr8 ),
+             INTITULE        =SIMP(statut='f',typ='TXM' ),                       
+         ), 
+         b_base_elas_flui = BLOC ( condition = "BASE_ELAS_FLUI != None",fr="Récupération de la fonction à partir d un concept melasflu",
+           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE'),),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           NUME_MODE       =SIMP(statut='o',typ='I' ),
+           PARA_X          =SIMP(statut='o',typ='TXM',into=("VITE_FLU",) ),
+           PARA_Y          =SIMP(statut='o',typ='TXM',into=("FREQ","AMOR") ),                   
+         ), 
+         b_table = BLOC ( condition = "TABLE != None",fr="Récupération de la fonction à partir d un concept table",
+           regles=(UN_PARMI('PARA_X','NOM_PARA_TABL'),
+                   PRESENT_PRESENT('PARA_X','PARA_Y'),),
+           PARA_X          =SIMP(statut='f',typ='TXM',
+                                 fr="1ère colonne de la table qui définit la fonction à récupérer", ),
+           PARA_Y          =SIMP(statut='f',typ='TXM',
+                                 fr="2ème colonne de la table qui définit la fonction à récupérer", ),
+           NOM_PARA_TABL   =SIMP(statut='f',typ='TXM',into=("FONCTION",),
+                                 fr="Nom du paramètre de la table à qui est associé la fonction" ),  
+           b_nom_para_tabl = BLOC (condition = "NOM_PARA_TABL != None",
+             TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="FONCTION",into=("FONCTION","FONCTION_C") ),
+           ),
+           FILTRE          =FACT(statut='f',min=01,max='**',
+             regles=(UN_PARMI('VALE','VALE_I','VALE_C','VALE_K','VALE_CO'),),
+             NOM_PARA        =SIMP(statut='o',typ='TXM' ),
+             CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",
+                                   into=("EQ","LT","GT",
+                                         "NE","LE","GE",
+                                         "VIDE","NON_VIDE",) ),
+             VALE            =SIMP(statut='f',typ='R' ),
+             VALE_I          =SIMP(statut='f',typ='I' ),
+             VALE_C          =SIMP(statut='f',typ='C' ),
+             VALE_K          =SIMP(statut='f',typ='TXM' ),
+             VALE_CO         =SIMP(statut='f',typ=geom),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),
+         ),
+# RESULTAT
+         b_resu = BLOC ( condition = "RESULTAT != None", fr="Opérandes en cas de RESULTAT",
+           regles=(
+#    A voir par Matthieu Courtois : il existe de tests (SDNX300B) qui ne satisfont pas ce UN_PARMI
+#           UN_PARMI('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','TOUT_INST','LIST_INST','FREQ','LIST_FREQ'),
+                   AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD','NOEUD_CHOC','GROUP_NO_CHOC'),
+                   PRESENT_PRESENT('MAILLE','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_MA','NOM_CMP'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                   PRESENT_PRESENT('POINT','NOM_CMP'),
+                   EXCLUS('POINT','NOEUD'),
+                   EXCLUS('GROUP_MA','MAILLE'),
+                   EXCLUS('GROUP_NO','NOEUD'),
+                   EXCLUS('NOEUD_CHOC','GROUP_NO_CHOC'),),
+#    A voir par Matthieu Courtois : les champs INTO de NOM_CHAM
+#           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE","PTEM") ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM' ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+           TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+           b_prec = BLOC ( condition = "(INST != None) or (LIST_INST != None) or (FREQ != None) or (LIST_FREQ != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             INTERP_NUME     =SIMP(statut='f',typ='TXM',max=02,into=("NON","LIN") ),
+           ),  
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+
+           MAILLE          =SIMP(statut='f',typ=ma),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+           POINT           =SIMP(statut='f',typ='I' ),
+           NOEUD_CHOC      =SIMP(statut='f',typ=no),
+           GROUP_NO_CHOC   =SIMP(statut='f',typ=grno),
+         ),
+# RESU_GENE
+         b_resu_gene = BLOC ( condition = "RESU_GENE != None", fr="Opérandes en cas de RESU_GENE",
+#    A voir par Matthieu Courtois : il existe de tests (SDNX300B) qui ne satisfont pas ce UN_PARMI
+#           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','TOUT_INST','LIST_INST','FREQ','LIST_FREQ'),),
+#    A voir par Matthieu Courtois : les champs INTO de NOM_CHAM
+#    A voir par Matthieu Courtois : NOM_CHAM facultatif et non obligatoire
+#           NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("DEPL","VITE","ACCE","PTEM") ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM' ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+           TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+           b_prec = BLOC ( condition = "(INST != None) or (LIST_INST != None) or (FREQ != None) or (LIST_FREQ != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             INTERP_NUME     =SIMP(statut='f',typ='TXM',max=02,into=("NON","LIN") ),
+           ),  
+           b_local_cham = BLOC ( condition = "NOM_CHAM!='PTEM'", fr="Opérandes de localisation du champ",
+             regles=(AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD','NOEUD_CHOC','GROUP_NO_CHOC'),
+                     PRESENT_PRESENT('MAILLE','NOM_CMP'),
+                     PRESENT_PRESENT('GROUP_MA','NOM_CMP'),
+                     PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                     PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                     PRESENT_PRESENT('POINT','NOM_CMP'),
+                     EXCLUS('POINT','NOEUD'),
+                     EXCLUS('GROUP_MA','MAILLE'),
+                     EXCLUS('GROUP_NO','NOEUD'),
+                     EXCLUS('NOEUD_CHOC','GROUP_NO_CHOC'),),
+             NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+
+             MAILLE          =SIMP(statut='f',typ=ma),
+             GROUP_MA        =SIMP(statut='f',typ=grma),
+             NOEUD           =SIMP(statut='f',typ=no),
+             GROUP_NO        =SIMP(statut='f',typ=grno),
+             POINT           =SIMP(statut='f',typ='I' ),
+             NOEUD_CHOC      =SIMP(statut='f',typ=no),
+             GROUP_NO_CHOC   =SIMP(statut='f',typ=grno),
+           ),  
+         ),
+# CHAM_GD
+         b_cham_gd = BLOC ( condition = "(CHAM_GD != None)", fr="Opérandes en cas de CHAM_GD",
+#    A voir par Matthieu Courtois : les champs INTO de NOM_CHAM
+#    A voir par Matthieu Courtois : NOM_CHAM facultatif et non obligatoire
+#           NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("DEPL","VITE","ACCE","PTEM") ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM' ),
+           regles=(AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD','NOEUD_CHOC','GROUP_NO_CHOC'),
+                   PRESENT_PRESENT('MAILLE','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_MA','NOM_CMP'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                   PRESENT_PRESENT('POINT','NOM_CMP'),
+                   EXCLUS('POINT','NOEUD'),
+                   EXCLUS('GROUP_MA','MAILLE'),
+                   EXCLUS('GROUP_NO','NOEUD'),
+                   EXCLUS('NOEUD_CHOC','GROUP_NO_CHOC'),),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+
+           MAILLE          =SIMP(statut='f',typ=ma),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+           POINT           =SIMP(statut='f',typ='I' ),
+           NOEUD_CHOC      =SIMP(statut='f',typ=no),
+           GROUP_NO_CHOC   =SIMP(statut='f',typ=grno),
+         ),
+###
+         NOM_PARA        =SIMP(statut='f',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC") ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=02,into=("NON","LIN","LOG") ),
+         PROL_DROIT      =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+                  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/03/97   AUTEUR A2BHHWS A.C.LEGER 
+RECU_GENE=OPER(nom="RECU_GENE",op=  76,sd_prod=vect_asse_gene,docu="U4.71.03-E",reentrant='n',
+               fr="Récupération d un champ de grandeur à partir d un résultat en coordonnées généralisées",
+         RESU_GENE       =SIMP(statut='o',typ=tran_gene ),
+         INST            =SIMP(statut='o',typ='R' ),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE") ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF" ,into=("ABSOLU","RELATIF") ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+)  ;
+#& MODIF COMMANDE  DATE 22/07/99   AUTEUR CIBHHLV L.VIVAN 
+RECU_TABLE=OPER(nom="RECU_TABLE",op= 174,sd_prod=table,
+                fr=" ",docu="U4.71.02-A",reentrant='n',
+         CO              =SIMP(statut='o',typ=assd),
+         NOM_TABLE       =SIMP(statut='o',typ='TXM' ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 03/05/2000   AUTEUR VABHHTS J.PELLET 
+def reso_grad_prod(MATR_ASSE,**args ):
+  if AsType(MATR_ASSE) == matr_asse_depl_r : return cham_no_depl_r
+  if AsType(MATR_ASSE) == matr_asse_temp_r : return cham_no_temp_r
+  if AsType(MATR_ASSE) == matr_asse_pres_r : return cham_no_pres_r
+  raise AsException("type de concept resultat non prevu")
+
+RESO_GRAD=OPER(nom="RESO_GRAD",op=  84,sd_prod=reso_grad_prod,
+               fr="Résolution par la méthode du gradient conjugué préconditionné",
+               docu="U4.55.04-E",reentrant='f',
+         MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+         CHAM_NO         =SIMP(statut='o',typ=(cham_no_depl_r,cham_no_temp_r,cham_no_pres_r ) ),
+         CHAM_CINE       =SIMP(statut='f',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_r ) ),
+         MATR_FACT       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+         NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),  
+         REPRISE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1E-6 ),  
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 02/10/96   AUTEUR CIBHHLV L.VIVAN 
+def reso_ldlt_prod(CHAM_NO,**args ):
+  if AsType(CHAM_NO) == cham_no_temp_r : return cham_no_temp_r
+  if AsType(CHAM_NO) == cham_no_depl_r : return cham_no_depl_r
+  if AsType(CHAM_NO) == cham_no_pres_r : return cham_no_pres_r
+  if AsType(CHAM_NO) == cham_no_temp_c : return cham_no_temp_c
+  if AsType(CHAM_NO) == cham_no_depl_c : return cham_no_depl_c
+  if AsType(CHAM_NO) == cham_no_pres_c : return cham_no_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+RESO_LDLT=OPER(nom="RESO_LDLT",op=15,sd_prod=reso_ldlt_prod,reentrant='f',
+               fr="Résolution en place ou hors place d un système factorisé",docu="U4.55.02-F",
+         MATR_FACT       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,
+                                               matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ),
+         CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_r,
+                                               cham_no_temp_c,cham_no_depl_c,cham_no_pres_c) ),
+         CHAM_CINE       =SIMP(statut='f',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_c) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 31/05/2000   AUTEUR CIBHHLV L.VIVAN 
+def rest_base_phys_prod(RESU_GENE,RESULTAT,**args ):
+  if AsType(RESU_GENE) == tran_gene : return dyna_trans
+  if AsType(RESU_GENE) == mode_gene : return mode_meca
+  if AsType(RESU_GENE) == mode_cycl : return mode_meca
+  if AsType(RESU_GENE) == harm_gene : return dyna_harmo
+  if AsType(RESULTAT)  == mode_meca : return mode_meca
+  raise AsException("type de concept resultat non prevu")
+
+REST_BASE_PHYS=OPER(nom="REST_BASE_PHYS",op=  75,sd_prod=rest_base_phys_prod,
+                    fr="Restituer dans la base physique des résultats en coordonnées généralisées",
+                    docu="U4.63.21-E",reentrant='n',
+        regles=(UN_PARMI('RESU_GENE','RESULTAT'),
+                EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','TOUT_INST'),
+                EXCLUS('TOUT_INST','NUME_ORDRE','INST','LIST_INST','TOUT_ORDRE'),
+#  Doc U à revoir
+                PRESENT_ABSENT('MULT_APPUI','CORR_STAT'),
+                EXCLUS('MULT_APPUI','NOEUD','GROUP_NO'),
+                EXCLUS('CORR_STAT','NOEUD','GROUP_NO'),             
+                EXCLUS('NOEUD','GROUP_NO'), 
+                PRESENT_PRESENT('RESULTAT','SQUELETTE'),
+                PRESENT_PRESENT('ACCE_MONO_APPUI','DIRECTION'),),
+         RESU_GENE       =SIMP(statut='f',typ=(tran_gene,mode_gene,mode_cycl,harm_gene ) ),
+         RESULTAT        =SIMP(statut='f',typ=mode_meca ),
+         
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),  
+         TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         INST            =SIMP(statut='f',typ='R',max='**' ),  
+         LIST_INST       =SIMP(statut='f',typ=listr8 ),
+         FREQ            =SIMP(statut='f',typ='R',max='**' ),  
+         LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+         b_prec_crit     =BLOC(condition = "INST != None or LIST_INST != None or FREQ != None or LIST_FREQ != None",
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
+         ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+         
+         MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         CORR_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',max=8,defaut="ACCE",   
+                               into=("DEPL","VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO_DEPL","SIPO_ELNO_DEPL",                 
+                                     "SIGM_ELNO_DEPL","FORC_NODA",) ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         NOEUD           =SIMP(statut='f',typ=no,max='**'),
+         ACCE_MONO_APPUI =SIMP(statut='f',typ=fonction),
+         DIRECTION       =SIMP(statut='f',typ='R',max='**' ),
+
+         SQUELETTE       =SIMP(statut='f',typ=squelette ),
+         SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),  
+         SECTEUR         =SIMP(statut='f',typ='I',defaut= 1 ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 16/12/97   AUTEUR CIBHHLV L.VIVAN 
+REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=tabl_intsp,
+                    fr="Calcul, à partir d un interspectre de réponse modale, de la réponse d une structure dans la base physique, à certains noeuds sélectionnés du maillage",
+                    docu="U4.63.22-C",reentrant='n',
+         regles=(AU_MOINS_UN('BASE_ELAS_FLUI','MODE_MECA'),),
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         BANDE           =SIMP(statut='f',typ='R',min=02,max=02 ),  
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),  
+         INTE_SPEC_GENE  =SIMP(statut='o',typ=tabl_intsp ),
+         NOEUD           =SIMP(statut='o',typ=no,max='**'),
+         NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',max=07,    
+                               into=("DEPL","VITE","ACCE","EFGE_ELNO_DEPL",      
+                                     "SIPO_ELNO_DEPL","SIGM_ELNO_DEPL","FORC_NODA") ),
+         MODE_STAT       =SIMP(statut='f',typ=mode_stat ),
+         EXCIT           =FACT(statut='f',max=01,
+           NOEUD           =SIMP(statut='o',typ=no,max='**'),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
+         ),
+         MOUVEMENT       =SIMP(statut='f',typ='TXM',defaut="ABSOLU",into=("RELATIF","ABSOLU","DIFFERENTIEL") ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="DIAG_DIAG",    
+                               into=("DIAG_TOUT","DIAG_DIAG","TOUT_TOUT","TOUT_DIAG") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 16/06/2000   AUTEUR D6BHHJP J.P.LEFEBVRE 
+RETOUR=PROC(nom="RETOUR",op= -2,docu="U4.13.02-E",
+            fr="Retour au fichier de commandes appelant", 
+) ;
+#& MODIF COMMANDE  DATE 03/10/2000   AUTEUR VABHHTS J.PELLET 
+#  RESPONSABLE                            GJBHHEL E.LORENTZ
+STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
+                   fr="Analyse mécanique statique non linéaire",
+                   docu="U4.51.03-E",reentrant='f',
+         regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS'),
+                 EXCLUS('RECH_LINEAIRE','PILOTAGE'), ),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='o',min=01,max='**',
+           CHARGE          =SIMP(statut='o',typ=char_meca),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",    
+                                 into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
+         ),
+         COMP_INCR       =FACT(statut='f',min=01,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="VMIS_ISOT_TRAC",    
+                                 into=( "ELAS",
+                                        "VMIS_ISOT_TRAC",
+                                        "VMIS_ISOT_LINE",
+                                        "VMIS_ECMI_TRAC",
+                                        "VMIS_ECMI_LINE",
+                                        "ENDO_LOCAL",
+                                        "ENDO_FRAGILE",
+                                        "BETON_ENDO_LOCAL",
+                                        "RUPT_FRAG",
+                                        "PLAS_GRAD",
+                                        "DURC_GRAD",
+                                        "META_PL",
+                                        "META_PL_PT",
+                                        "META_PL_RE",
+                                        "META_PL_PT_RE",
+                                        "META_VL",
+                                        "META_VL_PT",
+                                        "META_VL_RE",
+                                        "META_VL_PT_RE",
+                                        "META_PNL",
+                                        "META_PNL_PT",
+                                        "META_PNL_RE",
+                                        "META_PNL_PT_RE",
+                                        "META_VNL",
+                                        "META_VNL_PT",
+                                        "META_VNL_RE",
+                                        "META_VNL_PT_RE",
+                                        "VMIS_CINE_LINE",
+                                        "TAHERI",
+                                        "VISC_TAHERI",
+                                        "CHABOCHE",
+                                        "VISCOCHAB",
+                                        "VMIS_CIN1_CHAB",
+                                        "VMIS_CIN2_CHAB",
+                                        "POLY_CFC",
+                                        "LMARC",
+                                        "ROUSSELIER",
+                                        "VMIS_POU_LINE",
+                                        "VMIS_POU_FLEJOU",
+                                        "COULOMB",
+                                        "ARME",
+                                        "ASSE_CORN",
+                                        "NORTON_HOFF",
+                                        "LEMAITRE",
+                                        "ZIRC_CYRA2",
+                                        "ZIRC_EPRI",
+                                        "ASSE_COMBU",
+                                        "VENDOCHAB",
+                                        "NADAI_B",
+                                        "DIS_CONTACT",
+                                        "DIS_CHOC",
+                                        "DIS_GOUJ2E_PLAS",
+                                        "DIS_GOUJ2E_ELAS",
+                                        "GRILLE_ISOT_LINE",
+                                        "GRILLE_CINE_LINE",
+                                        "GRILLE_PINTO_MEN",
+                                        "PINTO_MENEGOTTO",
+                                        "CJS",
+                                        "OHNO",
+                                        "GRANGER_FP",
+                                        "GRANGER_FP_V",
+                                        "BETON_DOUBLE_DP",
+                                        "KIT_HM",
+                                        "KIT_HHM",
+                                        "KIT_THH",
+                                        "KIT_THM",
+                                        "KIT_THHM",
+                                        "VMIS_ASYM_LINE",
+                                        "ELAS_THM",
+                                        "SURF_ETAT_NSAT",
+                                        "SURF_ETAT_SATU",
+                                        "CAM_CLAY_THM",
+                                        "KIT_DDI",
+                                       ) ),
+           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           VMIS_ISOT_LINE  =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           VMIS_ECMI_TRAC  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           VMIS_ECMI_LINE  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           ENDO_LOCAL      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ENDO_FRAGILE    =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           BETON_ENDO_LOCAL=SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           RUPT_FRAG       =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           PLAS_GRAD       =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           DURC_GRAD       =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           META_PL         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_PL_PT      =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_PL_RE      =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_PL_PT_RE   =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_VL         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_VL_PT      =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_VL_RE      =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_VL_PT_RE   =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_PNL        =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_PNL_PT     =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_PNL_RE     =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_PNL_PT_RE  =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_VNL        =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_VNL_PT     =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_VNL_RE     =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           META_VNL_PT_RE  =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           VMIS_CINE_LINE  =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+           CHABOCHE        =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
+           VISCOCHAB       =SIMP(statut='c',typ='I',defaut=28,into=(28,)),
+           VMIS_CIN1_CHAB  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           VMIS_CIN2_CHAB  =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
+           POLY_CFC        =SIMP(statut='c',typ='I',defaut=1688,into=(1688,)),
+           LMARC           =SIMP(statut='c',typ='I',defaut=20,into=(20,)),
+           TAHERI          =SIMP(statut='c',typ='I',defaut=15,into=(15,)),
+           VISC_TAHERI     =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+           ROUSSELIER      =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           VMIS_POU_LINE   =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+           VMIS_POU_FLEJOU =SIMP(statut='c',typ='I',defaut=9 ,into=(9,)),
+           COULOMB         =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           ASSE_CORN       =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           ARME            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           NORTON_HOFF     =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           LEMAITRE        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ZIRC_CYRA2      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ZIRC_EPRI       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ASSE_COMBU      =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           NADAI_B         =SIMP(statut='c',typ='I',defaut=34,into=(34,)),
+           VENDOCHAB       =SIMP(statut='c',typ='I',defaut=10,into=(10,)),
+           GRILLE_ISOT_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           GRILLE_CINE_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           GRILLE_PINTO_MEN=SIMP(statut='c',typ='I',defaut=16,into=(16,)),
+           DIS_CONTACT     =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+           DIS_CHOC        =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+           DIS_GOUJ2E_PLAS =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           DIS_GOUJ2E_ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           PINTO_MENEGOTTO =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           CJS             =SIMP(statut='c',typ='I',defaut=16,into=(16,)),
+           OHNO            =SIMP(statut='c',typ='I',defaut=32,into=(32,)),
+           GRANGER_FP      =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
+           GRANGER_FP_V    =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
+           BETON_DOUBLE_DP =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           KIT_HM          =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_HHM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THH         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THHM        =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           VMIS_ASYM_LINE  =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+
+           RELATION_KIT    =SIMP(statut='f',typ='TXM',max='**',     
+                                 into=(
+# MECA
+                                       "ELAS",
+                                       "CJS",
+                                       "ELAS_THM",
+                                       "SURF_ETAT_NSAT",
+                                       "SURF_ETAT_SATU",
+                                       "CAM_CLAY_THM",
+# THMC
+                                       "GAZ",
+                                       "LIQU_SATU",
+                                       "LIQU_SATU_GAT",
+                                       "LIQU_GAZ_ATM",
+                                       "LIQU_VAPE_GAZ",           
+                                       "LIQU_NSAT_GAT",           
+                                       "LIQU_GAZ",
+# THER
+                                       "THER_HOMO",
+                                       "THER_POLY",
+# HYDR
+                                       "HYDR_UTIL",
+                                       "HYDR",
+# MECA_META
+                                       "ACIER",
+                                       "ZIRC",
+# MECA KIT_DDI
+                                       "VMIS_ISOT_TRAC",
+                                       "VMIS_ISOT_LINE",
+                                       "VMIS_ISOT_CINE",
+                                       "GRANGER_FP",
+                                       "GRANGER_FP_V",
+                                       "ROUSSELIER",
+                                       "CHABOCHE",
+                                       "OHNO",
+                                       "NADAI_B",
+                                       "BETON_DOUBLE_DP",
+                                       ) ),
+           ELAS_THM        =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           SURF_ETAT_NSAT  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           SURF_ETAT_SATU  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           CAM_CLAY_THM    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+           GAZ             =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           LIQU_SATU       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_SATU_GAT   =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_GAZ_ATM    =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_VAPE_GAZ   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_NSAT_GAT   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_GAZ        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           THER_HOMO       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           THER_POLY       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           HYDR_UTIL       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           HYDR            =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           ACIER           =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+           ZIRC            =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+
+           COQUE_NCOU      =SIMP(statut='f',typ='I'),  
+           TUYAU_NCOU      =SIMP(statut='f',typ='I' ),  
+           TUYAU_NSEC      =SIMP(statut='f',typ='I' ),  
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC","SIMO_MIEHE")),
+           ALGO_C_PLAN     =SIMP(statut='f',typ='TXM',into=("DEBORST",)),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         COMP_ELAS       =FACT(statut='f',min=01,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",    
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC", 
+                                       "ELAS_POUTRE_GR","CABLE")),
+           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_VMIS_LINE  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_POUTRE_GR  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           CABLE           =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           COQUE_NCOU      =SIMP(statut='f',typ='I'),  
+           TUYAU_NCOU      =SIMP(statut='f',typ='I'),  
+           TUYAU_NSEC      =SIMP(statut='f',typ='I'),  
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GREEN","GREEN_GR",) ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI','VARI_NON_LOCAL',),  
+                   EXCLUS('EVOL_NOLI','DEPL',),
+                   EXCLUS('EVOL_NOLI','SIGM',),
+                   EXCLUS('EVOL_NOLI','VARI',),
+                   EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',),       
+                   EXCLUS('NUME_ORDRE','INST'), ),
+           DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+           SIGM            =SIMP(statut='f',typ=(cham_elem_sief_r,carte_sief_r)),
+           VARI            =SIMP(statut='f',typ=cham_elem_vari_r),
+           VARI_NON_LOCAL  =SIMP(statut='f',typ=cham_no_vanl_r),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),  
+           INST            =SIMP(statut='f',typ='R'),  
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           NUME_DIDI       =SIMP(statut='f',typ='I'),  
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),  
+         ),
+         INCREMENT       =FACT(statut='o',min=01,max=01,
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=listr8),
+           EVOLUTION       =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE",    
+                                 into=("CHRONOLOGIQUE","RETROGRADE","SANS",) ),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),  
+           INST_INIT       =SIMP(statut='f',typ='R'),  
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),  
+           INST_FIN        =SIMP(statut='f',typ='R'),  
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),  
+           SUBD_PAS        =SIMP(statut='f',typ='I',defaut=1),  
+           SUBD_PAS_MINI   =SIMP(statut='f',typ='R'),  
+           COEF_SUBD_PAS_1 =SIMP(statut='f',typ='R',defaut= 1.0E+0),  
+         ),
+         NEWTON          =FACT(statut='d',min=01,max=01,
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),  
+           PREDICTION      =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
+           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut=0),  
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+         ),
+         RECH_LINEAIRE   =FACT(statut='f',min=01,max=01,
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),  
+         ),
+         PILOTAGE        =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('NOEUD','GROUP_NO'),),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS") ),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.0E+0),  
+           ETA_PILO_MAX    =SIMP(statut='f',typ='R'),  
+           ETA_PILO_MIN    =SIMP(statut='f',typ='R'),  
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),  
+                         ),
+         CONVERGENCE     =FACT(statut='d',min=01,max=01,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),  
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),  
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),  
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),  
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R'     
+                                ,defaut= 1.0E-6),  
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),  
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),  
+           TYPE_MATR_COMP  =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+         PARM_THETA      =SIMP(statut='f',typ='R'     
+                              ,defaut= 1. ),  
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="MDA",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+           ),
+           b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),             
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+#  A quoi sert eps           
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+         ARCHIVAGE       =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
+                   EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+           INST            =SIMP(statut='f',typ='R',max='**' ),  
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),  
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),  
+           ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NUME_INIT       =SIMP(statut='f',typ='I'),  
+           DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',into=("DEPL","SIEF_ELGA","VARI_ELGA",           
+                                                                     "VARI_NON_LOCAL","LANL_ELGA")),
+         ),
+         MODELE_NON_LOCAL=SIMP(statut='f',typ=(modele) ),
+         SOLV_NON_LOCAL  =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="MDA",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+           ),
+           b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),             
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps           
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+         LAGR_NON_LOCAL  =FACT(statut='d',max=01,
+           ITER_DUAL_MAXI  =SIMP(statut='f',typ='I',defaut= 50),  
+           RESI_DUAL_ABSO  =SIMP(statut='o',typ='R'),  
+           RESI_PRIM_ABSO  =SIMP(statut='o',typ='R'),  
+           RHO             =SIMP(statut='f',typ='R',defaut= 1000.),  
+           ITER_PRIM_MAXI  =SIMP(statut='f',typ='I',defaut= 10),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+ )  ;
+#& MODIF COMMANDE  DATE 20/09/1999   AUTEUR DURAND C.DURAND 
+TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135,fr="Extraction d une valeur numérique ou d un attribut de fonction pour la comparer à une valeur de référence",
+                   docu="U4.92.02-E",
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         TEST_NOOK       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         VALEUR          =FACT(statut='f',min=01,max='**',
+                               fr="Tester la valeur d une fonction ou d une nappe",
+           regles=(UN_PARMI('VALE_REFE','VALE_REFE_C', ),),
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',max=02),
+           VALE_PARA       =SIMP(statut='o',typ='R',max=02),
+           VALE_REFE       =SIMP(statut='f',typ='R' ),
+           VALE_REFE_C     =SIMP(statut='f',typ='C' ),
+           CRITERE         =SIMP(statut='f',typ='TXM',fr="Critère de comparaison avec la solution de référence",
+                                 defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',fr="Ecart maximal autorisé avec la solution de référence",
+                                 defaut= 1.E-3 ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',
+                                 into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+           b_version = BLOC (condition = "REFERENCE == 'NON_REGRESSION'", 
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+           ),
+         ),
+         ATTRIBUT        =FACT(statut='f',min=01,max='**',
+                               fr="Tester la valeur d un attribut d une fonction ou d''une nappe",
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           PARA            =SIMP(statut='f',typ='R' ),
+           CRIT_PARA       =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PREC_PARA       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ATTR            =SIMP(statut='o',typ='TXM',
+                                 into=("NOM_PARA","NOM_RESU","PROL_DROIT","PROL_GAUCHE","INTERPOL",
+                                       "PROL_GAUCHE_FONC","PROL_DROIT_FONC","INTERPOL_FONC","NOM_PARA_FONC") ),
+           ATTR_REFE       =SIMP(statut='o',typ='TXM' ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',
+                                 into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+           b_version       =BLOC(condition = "REFERENCE == 'NON_REGRESSION'", 
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+           ),
+         ),
+         TABL_INTSP      =FACT(statut='f',min=01,max='**',
+                               fr="Tester la valeur d une fonction contenue dans une table interspectrale",
+           regles=(UN_PARMI('NUME_ORDRE_I','NOEUD_I'),),
+           INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
+           NOEUD_I         =SIMP(statut='f',typ=no),
+           NUME_ORDRE_I    =SIMP(statut='f',typ='I' ),
+           b_nume_ordre_i = BLOC (condition = "NUME_ORDRE_I != None", 
+             NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           ),
+           b_noeud_i = BLOC (condition = "NOEUD_I != None",             
+             NOEUD_J         =SIMP(statut='o',typ=no),
+             NOM_CMP_I       =SIMP(statut='o',typ='TXM' ),
+             NOM_CMP_J       =SIMP(statut='o',typ='TXM' ),
+           ),
+           NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+           VALE_PARA       =SIMP(statut='o',typ='R' ),
+           VALE_REFE_C     =SIMP(statut='o',typ='C' ),
+           CRITERE         =SIMP(statut='f',typ='TXM',fr="Critère de comparaison avec la solution de référence",
+                                 defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',fr="Ecart maximal autorisé avec la solution de référence",
+                                 defaut= 1.E-3 ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',
+                                 into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+           b_version       =BLOC(condition = "REFERENCE == 'NON_REGRESSION'", 
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+           ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 03/05/2000   AUTEUR VABHHTS J.PELLET 
+TEST_RESU=PROC(nom="TEST_RESU",op=23,docu="U4.92.01-F",
+               fr="Extraction d une valeur et comparaison à une valeur de référence",
+         regles=(AU_MOINS_UN('CHAM_NO','CHAM_ELEM','RESU','OBJET')),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),  
+         CHAM_NO         =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO','TYPE_TEST'),
+                   EXCLUS('NOEUD','GROUP_NO'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT( 'GROUP_NO','NOM_CMP'),
+                   UN_PARMI('VALE','VALE_I','VALE_C'),),
+           CHAM_GD         =SIMP(statut='o',typ=cham_no),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),  
+           TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN")),
+           VALE            =SIMP(statut='f',typ='R'),  
+           VALE_I          =SIMP(statut='f',typ='I'),  
+           VALE_C          =SIMP(statut='f',typ='C'),  
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),  
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",            
+                                                            "NON_REGRESSION","AUTRE_ASTER")),
+           VERSION         =SIMP(statut='f',typ='TXM'),  
+         ),
+         CHAM_ELEM       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','TYPE_TEST',),
+                   EXCLUS('NOEUD','GROUP_NO','POINT'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                   PRESENT_PRESENT('POINT','NOM_CMP'),       
+                   UN_PARMI('VALE','VALE_I','VALE_C'), ),
+           CHAM_GD         =SIMP(statut='o',typ=cham_elem),# CO()
+           MAILLE          =SIMP(statut='f',typ=ma),# CO()
+           POINT           =SIMP(statut='f',typ='I' ),  
+           NOEUD           =SIMP(statut='f',typ=no),# CO()
+           GROUP_NO        =SIMP(statut='f',typ=grno),# CO()
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),  
+           TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN") ),
+           VALE            =SIMP(statut='f',typ='R' ),  
+           VALE_I          =SIMP(statut='f',typ='I' ),  
+           VALE_C          =SIMP(statut='f',typ='C' ),  
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",            
+                                                            "NON_REGRESSION","AUTRE_ASTER") ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),  
+         ),
+         RESU            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP','NOM_CAS','ANGL'),
+                   UN_PARMI('NOM_CHAM','PARA'),
+                   PRESENT_ABSENT('PARA','NOEUD','GROUP_NO','POINT','NOM_CMP','TYPE_TEST'),        
+                   PRESENT_PRESENT('NOM_CMP','NOM_CHAM'),
+                   EXCLUS('NOEUD','GROUP_NO','POINT','TYPE_TEST'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),        
+                   PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                   PRESENT_PRESENT('POINT','NOM_CMP'),
+                   UN_PARMI('VALE','VALE_I','VALE_C') ,),
+           RESULTAT        =SIMP(statut='o',typ=resultat),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),  
+           INST            =SIMP(statut='f',typ='R'),  
+           FREQ            =SIMP(statut='f',typ='R'),  
+           NUME_MODE       =SIMP(statut='f',typ='I'),  
+           NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**' ),  
+           NOM_CAS         =SIMP(statut='f',typ='TXM'),  
+           ANGL            =SIMP(statut='f',typ='R'),  
+           PARA            =SIMP(statut='f',typ='TXM'),  
+           NOM_CHAM        =SIMP(statut='f',typ='TXM'),  
+           NOM_CMP         =SIMP(statut='f',typ='TXM'),  
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           POINT           =SIMP(statut='f',typ='I'),  
+           TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN")),
+           VALE            =SIMP(statut='f',typ='R'),  
+           VALE_I          =SIMP(statut='f',typ='I'),  
+           VALE_C          =SIMP(statut='f',typ='C'),  
+           CRITERE         =SIMP(statut='f',typ='TXM',into=("RELATIF","ABSOLU"),max=02),
+           PRECISION       =SIMP(statut='f',typ='R',max=02),  
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",            
+                                                            "NON_REGRESSION","AUTRE_ASTER",) ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),  
+         ),
+         OBJET           =FACT(statut='f',max='**',
+         regles=(UN_PARMI('INDICE','S_I','S_R','RESUME',),
+                 UN_PARMI('VALE','VALE_I','VALE_C','RESUME','S_R','S_I'),),
+           NOM             =SIMP(statut='o',typ='TXM'),  
+           INDICE          =SIMP(statut='f',typ='I'),  
+           NUM_OBJ         =SIMP(statut='f',typ='I'),  
+           S_R             =SIMP(statut='f',typ='R'),  
+           S_I             =SIMP(statut='f',typ='I'),  
+           RESUME          =SIMP(statut='f',typ='I'),  
+           VALE            =SIMP(statut='f',typ='R'),  
+           VALE_I          =SIMP(statut='f',typ='I'),  
+           VALE_C          =SIMP(statut='f',typ='C'),  
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),  
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",            
+                                                            "NON_REGRESSION","AUTRE_ASTER",) ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),  
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 20/09/1999   AUTEUR DURAND C.DURAND 
+TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,fr="Tester une 'cellule' d un concept de type table.Imprime dans le fichier 'RESULTAT' : OK si la valeur trouvée est identique à la valeur donnée en référence, NOOK sinon",
+                docu="U4.92.03-B",
+         regles=(UN_PARMI('VALE','VALE_I','VALE_C', ),),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+#  concept table à créer           
+         TABLE           =SIMP(statut='o',typ=table),
+         FILTRE          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('VALE','VALE_I','VALE_C','VALE_K','VALE_CO', ),),
+           NOM_PARA        =SIMP(statut='o',typ='TXM' ),  
+           VALE            =SIMP(statut='f',typ='R' ),  
+           VALE_I          =SIMP(statut='f',typ='I' ),  
+           VALE_C          =SIMP(statut='f',typ='C' ),  
+           VALE_K          =SIMP(statut='f',typ='TXM' ),  
+           VALE_CO         =SIMP(statut='f',typ=geom),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
+         ),
+         TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN") ),
+         NOM_PARA        =SIMP(statut='o',typ='TXM' ),  
+         VALE            =SIMP(statut='f',typ='R' ),  
+         VALE_I          =SIMP(statut='f',typ='I' ),  
+         VALE_C          =SIMP(statut='f',typ='C' ),  
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.2E-3 ),  
+         REFERENCE       =SIMP(statut='f',typ='TXM',     
+                               into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+         b_version       =BLOC(condition = "REFERENCE == 'NON_REGRESSION'", 
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+         ),  
+)  ;
+#& MODIF COMMANDE  DATE 19/05/2000   AUTEUR JFBHHUC C.ROSE 
+THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,docu="U4.54.01-F",reentrant='f',
+                   fr="Analyse thermique linéaire stationnaire ou transitoire",
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='o',min=01,max='**',
+           CHARGE          =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+         INCREMENT       =FACT(statut='f',min=01,max=01,
+           LIST_INST       =SIMP(statut='o',typ=listr8 ),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           NUME_FIN        =SIMP(statut='f',typ='I'),
+         ),
+         TEMP_INIT       =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),),
+           STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther),
+           CHAM_NO         =SIMP(statut='f',typ=cham_no_temp_r),
+           VALE            =SIMP(statut='f',typ='R'),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+         ),
+         SENSIBILITE     =FACT(statut='f',min=01,max=01,
+           THETA           =SIMP(statut='o',typ=theta_geom),
+         ),
+         DEUL_INIT       =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('STATIONNAIRE','EVOL_THER', ),),
+           STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+         ),
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="MDA",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+           ),
+           b_ldlt_mult      =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),             
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+#  A quoi sert eps           
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+         PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57),
+         ARCHIVAGE       =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH','LIST_INST','INST'),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
+                                 into=("RELATIF","ABSOLU")),
+           PAS_ARCH        =SIMP(statut='f',typ='I'),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',into=("VARI",)),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         OPTION          =SIMP(statut='f',typ='TXM',max='**',
+                               into=("FLUX_ELGA_TEMP","FLUX_ELNO_TEMP")),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 19/05/2000   AUTEUR JFBHHUC C.ROSE 
+THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,docu="U4.54.02-D",reentrant='f',
+                   fr="Analyse thermique non linéaire stationnaire ou transitoire" ,
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         CHAM_MATER      =SIMP(statut='o',typ=(cham_mater) ),
+         CARA_ELEM       =SIMP(statut='c',typ=(cara_elem) ),
+         COMP_THER_NL    =FACT(statut='d',min=01,max='**',
+           RELATION        =SIMP(statut='f',typ='TXM',defaut="THER_NL",
+                                 into=("THER_NL",
+                                       "THER_HYDR",
+                                       "SECH_GRANGER",
+                                       "SECH_MENSI",
+                                       "SECH_BAZANT",
+                                       "SECH_NAPPE"
+                                       ) ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         EVOL_THER_SECH  =SIMP(statut='f',typ=evol_ther),
+         EXCIT           =FACT(statut='o',min=01,max='**',
+           CHARGE          =SIMP(statut='o',typ=char_ther),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+         INCREMENT       =FACT(statut='f',min=01,max=01,
+           LIST_INST       =SIMP(statut='o',typ=listr8),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           NUME_FIN        =SIMP(statut='f',typ='I'),
+         ),
+         TEMP_INIT       =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),),
+           STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther),
+           CHAM_NO         =SIMP(statut='f',typ=cham_no_temp_r),
+           VALE            =SIMP(statut='f',typ='R'),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+         ),
+         NEWTON          =FACT(statut='d',min=01,max=01,
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         CONVERGENCE     =FACT(statut='d',min=01,max=01,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+         ),
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="MDA",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+           ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),             
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+#  A quoi sert eps           
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         ),
+         PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57 ),
+         ARCHIVAGE       =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH','LIST_INST','INST', ),),
+           LIST_ARCH       =SIMP(statut='f',typ=(listis) ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+           PAS_ARCH        =SIMP(statut='f',typ='I'),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',into=("VARI",)),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         OPTION          =SIMP(statut='f',typ='TXM',max='**',
+                               into=("FLUX_ELGA_TEMP","FLUX_ELNO_TEMP") ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 19/05/2000   AUTEUR JFBHHUC C.ROSE 
+THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther,
+                     fr="Thermique non lineaire en repere mobile",
+                     docu="U4.54.03-B",reentrant='f',
+         MODELE          =SIMP(statut='o',typ=modele ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='c',typ=cara_elem ),
+         EXCIT           =FACT(statut='o',min=01,max='**',
+           CHARGE          =SIMP(statut='o',typ=char_ther ),
+           FONC_MULT       =SIMP(statut='c',typ=fonction ),
+         ),
+         TEMP_INIT       =FACT(statut='f',min=01,max=01,
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther ),
+           NUME_INIT       =SIMP(statut='f',typ='I',defaut= 0 ),  
+         ),
+         CONVERGENCE     =FACT(statut='d',min=01,max=01,
+           CRIT_TEMP_RELA  =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
+           CRIT_ENTH_RELA  =SIMP(statut='f',typ='R',defaut= 1.E-2 ),  
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),  
+           ARRET           =SIMP(statut='c',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="MDA",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+           ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),             
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+
+
+  
diff --git a/Aster/Cata/cata_STA6.py b/Aster/Cata/cata_STA6.py
new file mode 100755 (executable)
index 0000000..73cfb00
--- /dev/null
@@ -0,0 +1,14217 @@
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR VABHHTS J.TESELET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+import Accas
+from Accas import *
+from Accas import _F
+
+import ops
+
+try:
+  import aster
+except:
+  pass
+
+#
+__version__="$Name:  $"
+__Id__="$Id: cata_aster_v6.py,v 1.12 2001/01/16 15:55:05 iliade Exp $"
+#
+JdC = JDC_CATA(code='ASTER',
+               execmodul=None,
+               regles = (AU_MOINS_UN('DEBUT','POURSUITE'),
+                         AU_MOINS_UN('FIN'),
+                         A_CLASSER(('DEBUT','POURSUITE'),'FIN')))
+# Type le plus general
+class entier  (ASSD):pass
+class reel    (ASSD):pass
+class complexe(ASSD):pass
+class liste   (ASSD):pass
+class chaine  (ASSD):pass
+
+# Type geometriques
+class no  (GEOM):pass
+class grno(GEOM):pass
+class ma  (GEOM):pass
+class grma(GEOM):pass
+
+
+
+# Autres
+
+class cabl_precont    (ASSD):pass
+class cara_elem       (ASSD):pass
+class cara_pout       (ASSD):pass
+class cham_mater      (ASSD):pass
+class char_acou       (ASSD):pass
+class char_cine_acou  (ASSD):pass
+class char_cine_meca  (ASSD):pass
+class char_cine_ther  (ASSD):pass
+class char_meca       (ASSD):pass
+class char_ther       (ASSD):pass
+class courbe          (ASSD):pass
+class fond_fiss       (ASSD):pass
+class interf_dyna_clas(ASSD):pass
+class interspfact     (ASSD):pass
+class listis          (ASSD):pass
+class listr8          (ASSD):pass
+class macr_elem_dyna  (ASSD):pass
+class macr_elem_stat  (ASSD):pass
+class mater           (ASSD):pass
+class melasflu        (ASSD):pass
+class modele          (ASSD):pass
+class modele_gene     (ASSD):pass
+class nume_ddl        (ASSD):pass
+class nume_ddl_gene   (ASSD):pass
+class obstacle        (ASSD):pass
+class spectre         (ASSD):pass
+class surface         (ASSD):pass
+class tran_gene       (ASSD):pass
+class type_flui_stru  (ASSD):pass
+class valeur          (ASSD):pass
+
+# maillage :
+#--------------------------------
+class maillage(ASSD):pass
+class squelette     (maillage):pass
+
+
+# cham_gd (carte,cham_no,cham_elem)
+#--------------------------------
+
+class cham_gd(ASSD):pass
+
+# cham_gd/carte :
+#--------------------------------
+class carte(cham_gd):pass
+class carte_dbel_r   (carte):pass
+class carte_depl_c   (carte):pass
+class carte_depl_f   (carte):pass
+class carte_depl_r   (carte):pass
+class carte_durt_r   (carte):pass
+class carte_ener_r   (carte):pass
+class carte_epsi_r   (carte):pass
+class carte_erreur   (carte):pass
+class carte_flux_r   (carte):pass
+class carte_g_depl_r (carte):pass
+class carte_geom_r   (carte):pass
+class carte_hydr_r   (carte):pass
+class carte_inst_r   (carte):pass
+class carte_inte_r   (carte):pass
+class carte_irra_r   (carte):pass
+class carte_meta_r   (carte):pass
+class carte_neut_f   (carte):pass
+class carte_neut_r   (carte):pass
+class carte_pres_r   (carte):pass
+class carte_sief_r   (carte):pass
+class carte_sour_r   (carte):pass
+class carte_temp_f   (carte):pass
+class carte_temp_r   (carte):pass
+class carte_var2_r   (carte):pass
+class carte_vnor_c   (carte):pass
+
+
+# cham_gd/cham_elem :
+#--------------------------------
+class cham_elem(cham_gd):pass
+class cham_elem_crit_r(cham_elem):pass
+class cham_elem_dbel_r(cham_elem):pass
+class cham_elem_depl_c(cham_elem):pass
+class cham_elem_depl_f(cham_elem):pass
+class cham_elem_depl_r(cham_elem):pass
+class cham_elem_dommag(cham_elem):pass
+class cham_elem_durt_r(cham_elem):pass
+class cham_elem_ener_r(cham_elem):pass
+class cham_elem_epsi_c(cham_elem):pass
+class cham_elem_epsi_r(cham_elem):pass
+class cham_elem_erreur(cham_elem):pass
+class cham_elem_flux_r(cham_elem):pass
+class cham_elem_g_depl(cham_elem):pass
+class cham_elem_geom_r(cham_elem):pass
+class cham_elem_hydr_r(cham_elem):pass
+class cham_elem_inst_r(cham_elem):pass
+class cham_elem_inte_r(cham_elem):pass
+class cham_elem_irra_r(cham_elem):pass
+class cham_elem_meta_r(cham_elem):pass
+class cham_elem_neut_f(cham_elem):pass
+class cham_elem_neut_r(cham_elem):pass
+class cham_elem_pres_r(cham_elem):pass
+class cham_elem_sief_c(cham_elem):pass
+class cham_elem_sief_r(cham_elem):pass
+class cham_elem_sour_r(cham_elem):pass
+class cham_elem_temp_f(cham_elem):pass
+class cham_elem_temp_r(cham_elem):pass
+class cham_elem_vari_r(cham_elem):pass
+class cham_elem_vnor_c(cham_elem):pass
+
+
+# cham_gd/cham_no :
+#--------------------------------
+class cham_no(cham_gd):pass
+class cham_no_dbel_r   (cham_no):pass
+class cham_no_depl_c   (cham_no):pass
+class cham_no_depl_f   (cham_no):pass
+class cham_no_depl_r   (cham_no):pass
+class cham_no_durt_r   (cham_no):pass
+class cham_no_ener_r   (cham_no):pass
+class cham_no_epsi_r   (cham_no):pass
+class cham_no_erreur   (cham_no):pass
+class cham_no_flux_r   (cham_no):pass
+class cham_no_g_depl_r (cham_no):pass
+class cham_no_geom_r   (cham_no):pass
+class cham_no_hydr_r   (cham_no):pass
+class cham_no_inst_r   (cham_no):pass
+class cham_no_inte_r   (cham_no):pass
+class cham_no_irra_r   (cham_no):pass
+class cham_no_meta_r   (cham_no):pass
+class cham_no_neut_f   (cham_no):pass
+class cham_no_neut_r   (cham_no):pass
+class cham_no_pres_c   (cham_no):pass
+class cham_no_pres_r   (cham_no):pass
+class cham_no_sief_r   (cham_no):pass
+class cham_no_sour_r   (cham_no):pass
+class cham_no_temp_c   (cham_no):pass
+class cham_no_temp_f   (cham_no):pass
+class cham_no_temp_r   (cham_no):pass
+class cham_no_vanl_r   (cham_no):pass
+class cham_no_var2_r   (cham_no):pass
+class cham_no_vnor_c   (cham_no):pass
+
+
+# resultat : (evol,mode_stat,mode_meca)
+#--------------------------------
+
+class resultat(ASSD):
+  def __getitem__(self,key):
+    return aster.getpara(self.get_name(),"RESULTAT",key[0],key[1])
+
+class acou_harmo    (resultat):pass
+class base_modale     (resultat):pass
+class comb_fourier  (resultat):pass
+class dyna_harmo    (resultat):pass
+class dyna_trans    (resultat):pass
+class fourier_elas  (resultat):pass
+class harm_gene     (resultat):pass
+class mode_acou     (resultat):pass
+class mode_cycl     (resultat):pass
+class mode_flamb    (resultat):pass
+class mode_gene     (resultat):pass
+class mult_elas     (resultat):pass
+class theta_geom    (resultat):pass
+
+# resultat/evol :
+#--------------------------------
+class evol(resultat):pass
+class evol_char(evol):pass
+class evol_elas(evol):pass
+class evol_noli(evol):pass
+class evol_ther(evol):pass
+class evol_varc(evol):pass
+
+# resultat/mode_stat :
+#--------------------------------
+class mode_stat(resultat):pass
+class mode_stat_depl(mode_stat):pass
+class mode_stat_acce(mode_stat):pass
+class mode_stat_forc(mode_stat):pass
+
+
+# resultat/mode_meca :
+#--------------------------------
+class mode_meca(resultat):pass
+class mode_meca_c(mode_meca):pass
+
+
+# fonction :
+#--------------------------------
+class para_sensi(fonction):pass
+class fonction_c(fonction):pass
+
+
+# matr_asse :
+#--------------------------------
+class matr_asse(ASSD):pass
+class matr_asse_depl_c(matr_asse):pass
+class matr_asse_depl_r(matr_asse):pass
+class matr_asse_gene_r(matr_asse):pass
+class matr_asse_gene_c(matr_asse):pass
+class matr_asse_pres_c(matr_asse):pass
+class matr_asse_pres_r(matr_asse):pass
+class matr_asse_temp_c(matr_asse):pass
+class matr_asse_temp_r(matr_asse):pass
+
+# matr_elem :
+#--------------------------------
+class matr_elem(ASSD):pass
+class matr_elem_depl_c(matr_elem):pass
+class matr_elem_depl_r(matr_elem):pass
+class matr_elem_pres_c(matr_elem):pass
+class matr_elem_temp_r(matr_elem):pass
+
+
+
+
+# table : (tabl_fonc)
+#--------------------------------
+
+class table(ASSD):
+  def __getitem__(self,key):
+    return aster.getpara(self.get_name(),"TABLE",key[0],key[1])
+
+class tabl_aire_int   (table):pass
+class tabl_calc_g_loca(table):pass
+class tabl_calc_g_th  (table):pass
+class tabl_cara_geom  (table):pass
+class tabl_char_limite(table):pass
+class tabl_ener_elas  (table):pass
+class tabl_ener_pot   (table):pass
+class tabl_ener_cin   (table):pass
+class tabl_ener_ext   (table):pass
+class tabl_ener_totale(table):pass
+class tabl_indic_ener (table):pass
+class tabl_indic_seuil(table):pass
+class tabl_intsp      (table):pass
+class tabl_mass_iner  (table):pass
+class tabl_post_alea  (table):pass
+class tabl_post_dyna  (table):pass
+class tabl_post_f_alea(table):pass
+class tabl_post_fatig (table):pass
+class tabl_post_gouj2e(table):pass
+class tabl_post_k     (table):pass
+class tabl_post_rccm  (table):pass
+class tabl_post_rele  (table):pass
+class tabl_post_simpli(table):pass
+class tabl_post_usur  (table):pass
+class tabl_reca_weib  (table):pass
+class tabl_rice_tracey(table):pass
+class tabl_texture    (table):pass
+class tabl_trc        (table):pass
+class tabl_weibull    (table):pass
+
+# table/tabl_fonc
+#--------------------------------
+class tabl_fonc       (table):pass
+class tabl_fonc_max   (tabl_fonc):pass
+class tabl_fonc_noci  (tabl_fonc):pass
+class tabl_fonc_rms   (tabl_fonc):pass
+
+
+# vect_asse :
+#--------------------------------
+class vect_asse(ASSD):pass
+class vect_asse_gene(vect_asse):pass
+
+
+# vect_elem :
+#--------------------------------
+class vect_elem(ASSD):pass
+class vect_elem_depl_r(vect_elem):pass
+class vect_elem_pres_c(vect_elem):pass
+class vect_elem_pres_r(vect_elem):pass
+class vect_elem_temp_r(vect_elem):pass
+
+#& MODIF COMMANDE  DATE 22/11/2001   AUTEUR VABHHTS J.PELLET 
+AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
+                    fr="Affectation de caractéristiques à des éléments de structure",
+                    docu="U4.42.01-f1",reentrant='n',
+         regles=(AU_MOINS_UN('POUTRE','BARRE','COQUE','CABLE','DISCRET','MASSIF',
+                             'ASSE_GRIL','GRILLE','AFFE_SECT','AFFE_FIBRE'),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         INFO            =SIMP(statut='f',typ='I', defaut= 1 ,into=(1,2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',max='**',into=("MAILLE","NOEUD") ),
+
+         POUTRE          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           SECTION         =SIMP(statut='o',typ='TXM' ,into=("GENERALE","RECTANGLE","CERCLE") ),
+           CARA_SECT       =SIMP(statut='f',typ=(cara_pout) ),
+           TUYAU_NCOU      =SIMP(statut='f',typ='I',min=1,max=10,defaut=3),
+           TUYAU_NSEC      =SIMP(statut='f',typ='I',min=1,max=32,defaut=16),
+           b_generale      =BLOC( condition = "SECTION=='GENERALE'",
+             CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("A","IY","IZ","AY","AZ","EY","EZ","JX","RY","RZ","RT",
+                                                           "AI","JG","IYR2","IZR2","A1",
+                                       "IY1","IZ1","AY1","AZ1","EY1","EZ1","JX1","RY1",
+                                       "RZ1","RT1","AI1","JG1","IYR21","IZR21","A2",
+                                       "IY2","IZ2","AY2","AZ2","EY2","EZ2","JX2","RY2",
+                                       "RZ2","RT2","AI2","JG2","IYR22","IZR22","H",
+                                       "HZ","HY","EP","EPY","EPZ","H1","HZ1","HY1",
+                                       "EP1","EPY1","EPZ1","H2","HZ2","HY2","EP2",
+                                       "EPY2","EPZ2","R","R1","R2") ),
+             VALE            =SIMP(statut='o',typ='R',max='**'),
+             VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE",) ),
+           ),
+           b_rectangle     =BLOC( condition = "SECTION=='RECTANGLE'",
+             CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("H","EP","HY","HZ","EPY","EPZ",
+                                                           "H1","HZ1","HY1","EP1","EPY1","EPZ1",
+                                                           "H2","HZ2","HY2","EP2","EPY2","EPZ2") ),
+             VALE            =SIMP(statut='o',typ='R',max='**'),
+             VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE","AFFINE"),defaut="HOMOTHETIQUE"),
+           ),
+           b_cercle        =BLOC( condition = "SECTION=='CERCLE'",
+             CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("R","EP","R1","R2","EP1","EP2") ),
+             VALE            =SIMP(statut='o',typ='R',max='**'),
+             VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE",) ),
+             MODI_METRIQUE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           ),
+           FCX             =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         BARRE           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           SECTION         =SIMP(statut='o',typ='TXM',into=("GENERALE","RECTANGLE","CERCLE") ),
+           b_generale      =BLOC( condition = "SECTION=='GENERALE'",
+             CARA            =SIMP(statut='o',typ='TXM',into=("A",) ),
+             VALE            =SIMP(statut='o',typ='R' ),
+           ),
+           b_rectangle     =BLOC( condition = "SECTION=='RECTANGLE'",
+             CARA            =SIMP(statut='o',typ='TXM',into=("H","HZ","HY","EPY","EPZ","EP"),max=6 ),
+             VALE            =SIMP(statut='o',typ='R',max=6 ),
+           ),
+           b_cercle        =BLOC( condition = "SECTION=='CERCLE'",
+             CARA            =SIMP(statut='o',typ='TXM',max=2,into=("R","EP") ),
+             VALE            =SIMP(statut='o',typ='R',max=2 ),
+           ),
+           FCX             =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         COQUE           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA' ),
+                   PRESENT_PRESENT( 'EXCENTREMENT','INER_ROTA' ),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           EPAIS           =SIMP(statut='o',typ='R' ),
+           ANGL_REP        =SIMP(statut='f',typ='R',min=2,max=2),
+           A_CIS           =SIMP(statut='f',typ='R',defaut= 0.8333333E0),
+           COEF_RIGI_DRZ   =SIMP(statut='f',typ='R',defaut= 1.0E-5 ),
+           COQUE_NCOU      =SIMP(statut='f',typ='I',defaut= 1 ),
+           EXCENTREMENT    =SIMP(statut='f',typ='R' ),
+           INER_ROTA       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MODI_METRIQUE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+
+         CABLE           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('A','SECTION') ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           N_INIT          =SIMP(statut='f',typ='R',defaut= 5000. ),
+           A               =SIMP(statut='f',typ='R' ),
+           SECTION         =SIMP(statut='f',typ='R' ),
+           FCX             =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         DISCRET         =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           REPERE          =SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+           AMOR_HYST       =SIMP(statut='f',typ='R' ),
+           CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("K_T_D_N","K_T_D_L","K_TR_D_N","K_TR_D_L",
+                                                           "K_T_N",  "K_T_L",  "K_TR_N",  "K_TR_L",
+                                                                "M_T_D_N","M_TR_D_N","M_T_N",
+                                                           "M_T_L",  "M_TR_N",  "M_TR_L",
+                                       "A_T_D_N","A_TR_D_N","A_T_D_L","A_TR_D_L",
+                                                           "A_T_N",  "A_T_L",   "A_TR_N", "A_TR_L") ),
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+         ),
+
+         ORIENTATION     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO' ),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           CARA            =SIMP(statut='o',typ='TXM',
+                                 into=("VECT_Y","ANGL_VRIL","VECT_X_Y","ANGL_NAUT","GENE_TUYAU") ),
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-4 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+
+         DEFI_ARC        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('ORIE_ARC','CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE',
+                            'POIN_TANG','NOEUD_POIN_TANG','GROUP_NO_POIN_TG'),
+                   PRESENT_PRESENT('ORIE_ARC','RAYON'),
+                   EXCLUS('COEF_FLEX','COEF_FLEX_XY'),
+                   EXCLUS('COEF_FLEX','COEF_FLEX_XZ'),
+                   EXCLUS('INDI_SIGM','INDI_SIGM_XY'),
+                   EXCLUS('INDI_SIGM','INDI_SIGM_XZ'),
+                   PRESENT_PRESENT('COEF_FLEX_XY','COEF_FLEX_XZ'),
+                   PRESENT_PRESENT('INDI_SIGM_XY','INDI_SIGM_XZ'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ORIE_ARC        =SIMP(statut='f',typ='R'),
+           CENTRE          =SIMP(statut='f',typ='R',max='**'),
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,max=1),
+           POIN_TANG       =SIMP(statut='f',typ='R',max='**'),
+           NOEUD_POIN_TANG =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_POIN_TG=SIMP(statut='f',typ=grno,max=1),
+           RAYON           =SIMP(statut='f',typ='R'),
+           COEF_FLEX       =SIMP(statut='f',typ='R'),
+           INDI_SIGM       =SIMP(statut='f',typ='R'),
+           COEF_FLEX_XY    =SIMP(statut='f',typ='R'),
+           INDI_SIGM_XY    =SIMP(statut='f',typ='R'),
+           COEF_FLEX_XZ    =SIMP(statut='f',typ='R'),
+           INDI_SIGM_XZ    =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+
+         MASSIF          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('ANGL_REP','ANGL_AXE'),
+                   EXCLUS('ANGL_REP','ANGL_AXE'),
+                   EXCLUS('ANGL_REP','ORIG_AXE'),
+                   PRESENT_PRESENT('ANGL_AXE','ORIG_AXE'), ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ANGL_REP        =SIMP(statut='f',typ='R',max=3),
+           ANGL_AXE        =SIMP(statut='f',typ='R',max=2),
+           ORIG_AXE        =SIMP(statut='f',typ='R',max=3),
+         ),
+
+         POUTRE_FLUI     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           B_T             =SIMP(statut='o',typ='R'),
+           B_N             =SIMP(statut='o',typ='R'),
+           B_TN            =SIMP(statut='o',typ='R',defaut= 0.E+0 ),
+           A_FLUI          =SIMP(statut='o',typ='R'),
+           A_CELL          =SIMP(statut='o',typ='R'),
+           COEF_ECHELLE    =SIMP(statut='o',typ='R'),
+         ),
+
+         GRILLE          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   EXCLUS('ANGL_REP','ORIG_AXE'),
+                   EXCLUS('EXCENTREMENT','DIST_N'),
+                   ENSEMBLE('ORIG_AXE','AXE')),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           SECTION_L       =SIMP(statut='o',typ='R'),
+           ANGL_REP        =SIMP(statut='f',typ='R',max=2),
+           ANGL_L          =SIMP(statut='f',typ='R'),
+           POUR_CENT_L     =SIMP(statut='f',typ='R'),
+           POUR_CENT_T     =SIMP(statut='f',typ='R'),
+           DIST_N          =SIMP(statut='f',typ='R'),
+           EXCENTREMENT    =SIMP(statut='f',typ='R'),
+           ORIG_AXE        =SIMP(statut='f',typ='R',max='**'),
+           AXE             =SIMP(statut='f',typ='R',max='**'),
+           COEF_RIGI_DRZ   =SIMP(statut='f',typ='R',defaut= 1.0E-10 ),
+           GRILLE_NCOU     =SIMP(statut='f',typ='I',defaut= 1,min=1,max=1 ),
+         ),
+
+         RIGI_PARASOL    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('COEF_GROUP','FONC_GROUP'),
+                   UN_PARMI('COOR_CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),),
+           GROUP_MA        =SIMP(statut='o',typ=ma,max='**'),
+           FONC_GROUP      =SIMP(statut='f',typ=(fonction) ),
+           COEF_GROUP      =SIMP(statut='f',typ='R',max='**'),
+           REPERE          =SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+           CARA            =SIMP(statut='o',typ='TXM',max='**',into=("K_TR_D_N","A_TR_D_N") ),
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+           COOR_CENTRE     =SIMP(statut='f',typ='R',max='**'),
+         ),
+
+         ASSE_GRIL       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("K_TR_D_N","K_TR_D_L_T","K_TR_D_L_N",) ),
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           PAS_T           =SIMP(statut='o',typ='R'),
+           PAS_N           =SIMP(statut='o',typ='R'),
+           ANGL_REP        =SIMP(statut='o',typ='R',max='**'),
+           COEF_ECHELLE    =SIMP(statut='o',typ='R'),
+         ),
+
+
+         AFFE_SECT     =FACT(statut='f',min=1,max='**',
+              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                      AU_MOINS_UN('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),
+                      PRESENT_ABSENT('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),),
+
+              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+              TOUT_SECT         =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+              GROUP_MA_SECT     =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_SECT       =SIMP(statut='f',typ=ma,max='**'),
+
+              MAILLAGE_SECT     =SIMP(statut='o',typ=maillage),
+              COOR_AXE_POUTRE    =SIMP(statut='o',typ='R',min=2,max=2),
+         ),
+
+
+         AFFE_FIBRE     =FACT(statut='f',min=1,max='**',
+              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+
+              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+              CARA              =SIMP(statut='f',typ='TXM',defaut='SURFACE',into=('SURFACE','DIAMETRE',)),
+              VALE              =SIMP(statut='o',typ='R',max='**'),
+              COOR_AXE_POUTRE    =SIMP(statut='o',typ='R',min=2,max=2),
+         ),
+
+
+) ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
+                    fr="Affectation de charges et conditions aux limites acoustiques constantes",
+                    docu="U4.44.04-e",reentrant='n',
+         regles=(AU_MOINS_UN('PRES_IMPO','VITE_FACE','IMPE_FACE','LIAISON_UNIF' ),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         PRES_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           PRES            =SIMP(statut='o',typ='C' ),
+         ),
+         VITE_FACE       =FACT(statut='f',min=01,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           VNOR            =SIMP(statut='o',typ='C' ),
+         ),
+         IMPE_FACE       =FACT(statut='f',min=01,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           IMPE            =SIMP(statut='o',typ='C' ),
+         ),
+         LIAISON_UNIF    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE' ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/06/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def affe_char_cine_prod(MECA_IMPO,THER_IMPO,ACOU_IMPO,**args):
+  if MECA_IMPO != None  : return char_cine_meca
+  if THER_IMPO != None  : return char_cine_ther
+  if ACOU_IMPO != None  : return char_cine_acou
+  raise AsException("type de concept resultat non prevu")
+
+AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
+                    ,fr="Affectation de conditions aux limites cinématiques pour traitement sans dualisation",
+                     docu="U4.44.03-e",reentrant='n',
+         regles=(AU_MOINS_UN('MECA_IMPO','THER_IMPO','ACOU_IMPO'),
+                 EXCLUS('MECA_IMPO','THER_IMPO'),
+                 EXCLUS('MECA_IMPO','ACOU_IMPO'),
+                 EXCLUS('THER_IMPO','ACOU_IMPO'),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         MECA_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','TEMP','PHI'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DX              =SIMP(statut='f',typ='R' ),
+           DY              =SIMP(statut='f',typ='R' ),
+           DZ              =SIMP(statut='f',typ='R' ),
+           DRX             =SIMP(statut='f',typ='R' ),
+           DRY             =SIMP(statut='f',typ='R' ),
+           DRZ             =SIMP(statut='f',typ='R' ),
+           GRX             =SIMP(statut='f',typ='R' ),
+           PRES            =SIMP(statut='f',typ='R' ),
+           TEMP            =SIMP(statut='f',typ='R' ),
+           PHI             =SIMP(statut='f',typ='R' ),
+         ),
+         THER_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           TEMP_SUP        =SIMP(statut='f',typ='R' ),
+           TEMP            =SIMP(statut='f',typ='R' ),
+           TEMP_INF        =SIMP(statut='f',typ='R' ),
+         ),
+         ACOU_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           PRES            =SIMP(statut='o',typ='C' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def affe_char_cine_f_prod(MECA_IMPO,THER_IMPO,**args):
+  if MECA_IMPO != None  : return char_cine_meca
+  if THER_IMPO != None  : return char_cine_ther
+  raise AsException("type de concept resultat non prevu")
+
+AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_prod
+                    ,fr="Affectation de conditions aux limites cinématiques pour traitement sans dualisation",
+                     docu="U4.44.03-e",reentrant='n',
+         regles=(AU_MOINS_UN('MECA_IMPO','THER_IMPO'),
+                 EXCLUS('MECA_IMPO','THER_IMPO'),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         MECA_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','TEMP','PHI'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DX              =SIMP(statut='f',typ=fonction ),
+           DY              =SIMP(statut='f',typ=fonction ),
+           DZ              =SIMP(statut='f',typ=fonction ),
+           DRX             =SIMP(statut='f',typ=fonction ),
+           DRY             =SIMP(statut='f',typ=fonction ),
+           DRZ             =SIMP(statut='f',typ=fonction ),
+           GRX             =SIMP(statut='f',typ=fonction ),
+           PRES            =SIMP(statut='f',typ=fonction ),
+           TEMP            =SIMP(statut='f',typ=fonction ),
+           PHI             =SIMP(statut='f',typ=fonction ),
+         ),
+         THER_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           TEMP_SUP        =SIMP(statut='f',typ=fonction ),
+           TEMP            =SIMP(statut='f',typ=fonction ),
+           TEMP_INF        =SIMP(statut='f',typ=fonction ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 24/01/2002   AUTEUR SMICHEL S.MICHEL-PONNELLE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
+                    ,fr="Affectation de charges et conditions aux limites mécaniques constantes",
+                     docu="U4.44.01-f1",reentrant='n',
+         regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','LIAISON_DDL','FORCE_NODALE',  
+                             'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',       
+                             'PRES_REP','FORCE_POUTRE','FORCE_COQUE','LIAISON_OBLIQUE',        
+                             'FORCE_ELEC','INTE_ELEC','PESANTEUR','ROTATION','IMPE_FACE',      
+                             'VITE_FACE','TEMP_CALCULEE','RELA_CINE_BP','EPSI_INIT','CONTACT', 
+                             'LIAISON_UNIL_NO','LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP',  
+                             'LIAISON_SOLIDE','LIAISON_ELEM','ONDE_FLUI','PRES_CALCULEE',      
+                             'EPSA_CALCULEE','LIAISON_CHAMNO','VECT_ASSE','LIAISON_COQUE',     
+                             'LIAISON_MAIL','FORCE_TUYAU','SECH_CALCULEE','HYDR_CALCULEE',     
+                             'EFFE_FOND','EVOL_CHAR','ARLEQUIN'),
+                 EXCLUS('PRES_CALCULEE','EVOL_CHAR'),
+                 EXCLUS('LIAISON_UNIL_NO','CONTACT'),),            
+         
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+#    A TERME PRES_CALCULEE N'EXISTERA PLUS
+         EVOL_CHAR       =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
+                               typ=evol_char ),
+         PRES_CALCULEE   =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
+                               typ=evol_char ),
+         TEMP_CALCULEE   =SIMP(statut='f',fr="Champ de température issu d'un autre calcul",
+                               typ=(evol_ther,cham_no_temp_r,carte_temp_r,carte_temp_f ) ),
+         HYDR_CALCULEE   =SIMP(statut='f',fr="Champ d hydratation issu d'un autre calcul",
+                               typ=evol_ther ),
+         SECH_CALCULEE   =SIMP(statut='f',fr="Champ de séchage issu d'un autre calcul",
+                               typ=(evol_ther,cham_no_temp_r,carte_temp_r,carte_temp_f ) ),
+         EPSA_CALCULEE   =SIMP(statut='f',fr="Champ de déformation anélastique issu d'un autre calcul",
+                               typ=evol_noli ),
+         VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+         
+         ARLEQUIN        =FACT(statut='f',min=1,max='**',
+           GROUP_MA_1     =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA_2     =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA_COLL  =SIMP(statut='o',typ=grma,max='**'),
+           regles        =(UN_PARMI('POIDS_1','POIDS_2'),),
+           POIDS_1       =SIMP(statut='f',typ='R'),
+           POIDS_2       =SIMP(statut='f',typ='R'),
+         ),
+
+         CONTACT         =FACT(statut='f',fr="Imposer du contact avec ou sans frottement",min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                 into=("NON","NODAL","NODAL_SYME","MAIT_ESCL","MAIT_ESCL_SYME")),
+           RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_VOISIN",into=("NOEUD_BOUCLE","NOEUD_VOISIN")),
+           LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),                 
+           NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",into=("MAIT","MAIT_ESCL")),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",    
+                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE") ),           
+           PROJECTION      =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE",) ),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           b_active        =BLOC(condition = "METHODE == 'CONTRAINTE' ",
+                                 fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
+                regles=(EXCLUS('DIST_2','COEF_IMPO'),
+                        EXCLUS('DIST_1','COEF_IMPO'),),
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP")),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS",) ), 
+                REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                COEF_IMPO       =SIMP(statut='f',typ='R'),
+                COEF_MULT_2     =SIMP(statut='f',typ='R'),
+                VECT_NORM_2     =SIMP(statut='f',typ='R',max=3),
+                DIST_1          =SIMP(statut='f',typ='R'),
+                DIST_2          =SIMP(statut='f',typ='R'),),
+           b_lagrangien    =BLOC(condition = "METHODE == 'LAGRANGIEN' ",
+                                 fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                DIST_1          =SIMP(statut='f',typ='R'),
+                DIST_2          =SIMP(statut='f',typ='R'),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),  
+                     VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),),),
+           b_penalisation       =BLOC(condition = "METHODE == 'PENALISATION' ",
+                                      fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                E_N             =SIMP(statut='f',typ='R'), 
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                DIST_1          =SIMP(statut='f',typ='R'),
+                DIST_2          =SIMP(statut='f',typ='R'),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     E_T             =SIMP(statut='f',typ='R',
+                                           fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"),
+                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),  
+                     VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),),),
+           b_continue      =BLOC(condition = "METHODE == 'CONTINUE' ",
+                                 fr="Paramètres de la méthode continue (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD")),
+                COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                MODL_AXIS       =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
+                ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=2),
+                ITER_CONT_MAXI  =SIMP(statut='f',typ='I',defaut=30),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     ITER_FROT_MAXI  =SIMP(statut='f',typ='I',defaut=2),
+                     COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                     SEUIL_INIT      =SIMP(statut='f',typ='I',defaut=0),),),
+         ),
+
+        DDL_IMPO        =FACT(statut='f',min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                     AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                                 'TEMP','PRE1','PRE2','UI2','UI3','VI2','VI3','WI2','WI3','UO2',
+                                 'UO3','VO2','VO3','WO2','WO3','UI4','UI5','VI4','VI5','WI4',
+                                 'WI5','UO4','UO5','VO4','VO5','WO4','WO5','UI6','UO6','VI6',
+                                 'VO6','WI6','WO6','WO','WI1','WO1','GONF'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+             GRX             =SIMP(statut='f',typ='R' ),
+             PRES            =SIMP(statut='f',typ='R' ),
+             PHI             =SIMP(statut='f',typ='R' ),
+             TEMP            =SIMP(statut='f',typ='R' ),
+             PRE1            =SIMP(statut='f',typ='R' ),
+             PRE2            =SIMP(statut='f',typ='R' ),
+             UI2             =SIMP(statut='f',typ='R' ),
+             UI3             =SIMP(statut='f',typ='R' ),
+             UI4             =SIMP(statut='f',typ='R' ),
+             UI5             =SIMP(statut='f',typ='R' ),
+             UI6             =SIMP(statut='f',typ='R' ),
+             UO2             =SIMP(statut='f',typ='R' ),
+             UO3             =SIMP(statut='f',typ='R' ),
+             UO4             =SIMP(statut='f',typ='R' ),
+             UO5             =SIMP(statut='f',typ='R' ),
+             UO6             =SIMP(statut='f',typ='R' ),
+             VI2             =SIMP(statut='f',typ='R' ),
+             VI3             =SIMP(statut='f',typ='R' ),
+             VI4             =SIMP(statut='f',typ='R' ),
+             VI5             =SIMP(statut='f',typ='R' ),
+             VI6             =SIMP(statut='f',typ='R' ),
+             VO2             =SIMP(statut='f',typ='R' ),
+             VO3             =SIMP(statut='f',typ='R' ),
+             VO4             =SIMP(statut='f',typ='R' ),
+             VO5             =SIMP(statut='f',typ='R' ),
+             VO6             =SIMP(statut='f',typ='R' ),
+             WI2             =SIMP(statut='f',typ='R' ),
+             WI3             =SIMP(statut='f',typ='R' ),
+             WI4             =SIMP(statut='f',typ='R' ),
+             WI5             =SIMP(statut='f',typ='R' ),
+             WI6             =SIMP(statut='f',typ='R' ),
+             WO2             =SIMP(statut='f',typ='R' ),
+             WO3             =SIMP(statut='f',typ='R' ),
+             WO4             =SIMP(statut='f',typ='R' ),
+             WO5             =SIMP(statut='f',typ='R' ),
+             WO6             =SIMP(statut='f',typ='R' ),
+             WO              =SIMP(statut='f',typ='R' ),
+             WI1             =SIMP(statut='f',typ='R' ),
+             WO1             =SIMP(statut='f',typ='R' ),
+             GONF            =SIMP(statut='f',typ='R' ),
+           ),
+
+         EFFE_FOND       =FACT(statut='f',fr="Imposer un effet de fond",min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+           GROUP_MA_INT    =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PRES            =SIMP(statut='o',typ='R' ),
+         ),
+         
+         EPSI_INIT       =FACT(statut='f',fr="Appliquer un chargement de déformation initiale à un volume 3D ou 2D",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ','EPX',
+                                 'KY','KZ','EXX','EYY','EXY','KXX','KYY','KXY'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             EPXX            =SIMP(statut='f',typ='R' ),
+             EPYY            =SIMP(statut='f',typ='R' ),
+             EPZZ            =SIMP(statut='f',typ='R' ),
+             EPXY            =SIMP(statut='f',typ='R' ),
+             EPXZ            =SIMP(statut='f',typ='R' ),
+             EPYZ            =SIMP(statut='f',typ='R' ),
+             EPX             =SIMP(statut='f',typ='R' ),
+             KY              =SIMP(statut='f',typ='R' ),
+             KZ              =SIMP(statut='f',typ='R' ),
+             EXX             =SIMP(statut='f',typ='R' ),
+             EYY             =SIMP(statut='f',typ='R' ),
+             EXY             =SIMP(statut='f',typ='R' ),
+             KXX             =SIMP(statut='f',typ='R' ),
+             KYY             =SIMP(statut='f',typ='R' ),
+             KXY             =SIMP(statut='f',typ='R' ),
+           ),
+         
+           FACE_IMPO       =FACT(statut='f',min=1,max='**',
+             regles=(UN_PARMI('GROUP_MA','MAILLE',),
+                     AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                                 'TEMP','PRE1','PRE2','DNOR','DTAN'),
+                     EXCLUS('DNOR','DX'),
+                     EXCLUS('DNOR','DY'),
+                     EXCLUS('DNOR','DZ'),
+                     EXCLUS('DNOR','DRX'),
+                     EXCLUS('DNOR','DRY'),
+                     EXCLUS('DNOR','DRZ'),
+                     EXCLUS('DTAN','DX'),
+                     EXCLUS('DTAN','DY'),
+                     EXCLUS('DTAN','DZ'),
+                     EXCLUS('DTAN','DRX'),
+                     EXCLUS('DTAN','DRY'),
+                     EXCLUS('DTAN','DRZ'),),
+#  rajout d'un mot clé REPERE :/ LOCAL /GLOBAL                     
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+             DNOR            =SIMP(statut='f',typ='R' ),
+             DTAN            =SIMP(statut='f',typ='R' ),
+             GRX             =SIMP(statut='f',typ='R' ),
+             PRES            =SIMP(statut='f',typ='R' ),
+             PHI             =SIMP(statut='f',typ='R' ),
+             TEMP            =SIMP(statut='f',typ='R' ),
+             PRE1            =SIMP(statut='f',typ='R' ),
+             PRE2            =SIMP(statut='f',typ='R' ),
+           ),
+
+         FLUX_THM_REP    =FACT(statut='f',min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FLUN            =SIMP(statut='f',typ='R' ),
+             FLUN_HYDR1      =SIMP(statut='f',typ='R' ),
+             FLUN_HYDR2      =SIMP(statut='f',typ='R' ),
+           ),
+         
+         FORCE_ARETE     =FACT(statut='f',fr="Appliquer des forces linéiques à une arete d élément volumique ou de coque",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+             MX              =SIMP(statut='f',typ='R' ),
+             MY              =SIMP(statut='f',typ='R' ),
+             MZ              =SIMP(statut='f',typ='R' ),
+           ), 
+         
+           FORCE_COQUE     =FACT(statut='f',fr="Appliquer des forces surfaciques sur des coques",min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),               
+                     PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('F1','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('F2','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('F3','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('MF1','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('MF2','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
+#  rajour d'un mot clé REPERE :/ LOCAL /GLOBAL              
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             
+               FX              =SIMP(statut='f',typ='R' ),
+               FY              =SIMP(statut='f',typ='R' ),
+               FZ              =SIMP(statut='f',typ='R' ),
+               MX              =SIMP(statut='f',typ='R' ),
+               MY              =SIMP(statut='f',typ='R' ),
+               MZ              =SIMP(statut='f',typ='R' ),
+             
+               F1              =SIMP(statut='f',typ='R' ),
+               F2              =SIMP(statut='f',typ='R' ),
+               F3              =SIMP(statut='f',typ='R' ),
+               MF1             =SIMP(statut='f',typ='R' ),
+               MF2             =SIMP(statut='f',typ='R' ),
+              
+             PRES            =SIMP(statut='f',typ='R' ),
+             PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL",) ),
+           ),
+
+         FORCE_CONTOUR   =FACT(statut='f',fr="Appliquer des forces linéiques au bord d'un domaine 2D ou AXIS_FOURIER",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+             MX              =SIMP(statut='f',typ='R' ),
+             MY              =SIMP(statut='f',typ='R' ),
+             MZ              =SIMP(statut='f',typ='R' ),
+           ), 
+
+         FORCE_ELEC      =FACT(statut='f',
+                                 fr="Force de Laplace due à la présence d'un conducteur rectiligne secondaire non maillé",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','POSITION'),
+                     EXCLUS('FX','POSITION'),
+                     EXCLUS('FY','POSITION'),   
+                     EXCLUS('FZ','POSITION'),),
+#  trop de regles : les blocs conditionnels permettent d en suprimer              
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+              
+             FX              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FY              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FZ              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             
+             POSITION        =SIMP(statut='f',typ='TXM',fr="Direction prédéfinie",into=("PARA","INFI","FINI",) ),
+             b_para     =BLOC ( condition = "POSITION == 'PARA'",
+               regles=(UN_PARMI('TRANS','DIST'),),
+               TRANS           =SIMP(statut='f',typ='R',max=3),
+               DIST            =SIMP(statut='f',typ='R' ),
+               b_point2        =BLOC ( condition = "DIST != None", 
+                 POINT2           =SIMP(statut='o',typ='R',max=3),
+               ),
+             ),
+             b_fini_infi     =BLOC ( condition = "(POSITION == 'FINI') or (POSITION == 'INFI')",
+               POINT1          =SIMP(statut='o',typ='R',max=3),
+               POINT2          =SIMP(statut='o',typ='R',max=3),
+             ), 
+           ),
+
+         FORCE_FACE      =FACT(statut='f',fr="Appliquer des forces surfaciques sur une face d'éléments volumiques",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+           ), 
+
+         FORCE_INTERNE   =FACT(statut='f',fr="Appliquer des forces volumiques (2D ou 3D) à un domaine volumique",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ' ),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+           ), 
+
+         IMPE_FACE       =FACT(statut='f',fr="Appliquer une impédance acoustique à une face",min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE' ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             IMPE            =SIMP(statut='o',typ='R' ),
+           ),
+         
+         FORCE_NODALE    =FACT(statut='f',fr="Imposer des forces nodales en des noeuds",min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           FX              =SIMP(statut='f',typ='R' ),
+           FY              =SIMP(statut='f',typ='R' ),
+           FZ              =SIMP(statut='f',typ='R' ),
+           MX              =SIMP(statut='f',typ='R' ),
+           MY              =SIMP(statut='f',typ='R' ),
+           MZ              =SIMP(statut='f',typ='R' ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+         ),
+
+        FORCE_POUTRE    =FACT(statut='f',fr="Appliquer des forces linéiques sur des poutres",min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','N','VY','VZ'),
+                     PRESENT_ABSENT('FX','N','VY','VZ'),              
+                     PRESENT_ABSENT('FY','N','VY','VZ'),
+                     PRESENT_ABSENT('FZ','N','VY','VZ'),
+                     PRESENT_ABSENT('N','FX','FY','FZ'),
+                     PRESENT_ABSENT('VY','FX','FY','FZ'),
+                     PRESENT_ABSENT('VZ','FX','FY','FZ'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE",) ),
+#  rajour d'un mot clé REPERE :/ LOCAL /GLOBAL              
+               FX              =SIMP(statut='f',typ='R' ),
+               FY              =SIMP(statut='f',typ='R' ),
+               FZ              =SIMP(statut='f',typ='R' ),
+             
+               N               =SIMP(statut='f',typ='R' ),
+               VY              =SIMP(statut='f',typ='R' ),
+               VZ              =SIMP(statut='f',typ='R' ),
+              
+           ),
+         
+         FORCE_TUYAU     =FACT(statut='f',fr="imposer une pression dans un élément TUYAU",min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             PRES            =SIMP(statut='f',typ='R' ),
+           ),
+             
+        INTE_ELEC       =FACT(statut='f',fr="Force de Laplace due à la présence d'un conducteur non rectiligne secondaire",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('GROUP_MA_2','MAILLE_2','TRANS','SYME'),
+                     EXCLUS('TRANS','SYME'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+             TRANS           =SIMP(statut='f',typ='R',max='**'),
+             SYME            =SIMP(statut='f',typ='R',max='**'),
+           ),
+         
+         LIAISON_CHAMNO  =FACT(statut='f',fr="définir une relation linéaire entre tous les ddls d'un concept cham_nno",
+                                 min=1,max='**',
+#  type de cham_no CO()
+             CHAM_NO         =SIMP(statut='o',typ=cham_no), #CO()
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ), 
+
+           LIAISON_COQUE   =FACT(statut='f',min=1,max='**',
+             GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+           LIAISON_DDL     =FACT(statut='f',fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             DDL             =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+           ),
+
+           LIAISON_ELEM    =FACT(statut='f',fr="Raccorder une poutre à une partie massive 3D ou une coque", min=1,max='**',
+             regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                     UN_PARMI('GROUP_NO_2','NOEUD_2'),),
+             OPTION          =SIMP(statut='o',typ='TXM',into=("3D_TUYAU","3D_POU","COQ_POU","COQ_TUYAU") ),
+             GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+             CARA_ELEM       =SIMP(statut='f',typ=(cara_elem) ),
+             AXE_POUTRE      =SIMP(statut='f',typ='R',max=3),
+             ANGL_MAX        =SIMP(statut='f',typ='R',defaut= 1. ),
+           ),
+
+           LIAISON_GROUP   =FACT(statut='f',fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),        
+                     UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                     EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                     EXCLUS('GROUP_MA_1','NOEUD_2'),      
+                     EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                     EXCLUS('GROUP_NO_1','MAILLE_2'),
+                     EXCLUS('MAILLE_1','GROUP_NO_2'),
+                     EXCLUS('MAILLE_1','NOEUD_2'),
+                     EXCLUS('NOEUD_1','GROUP_MA_2'),
+                     EXCLUS('NOEUD_1','MAILLE_2'),
+                     EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+             
+               GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+               GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+               GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+               NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+               GROUP_NO_2      =SIMP(statut='f',typ=no,max='**'),
+               NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+             
+             SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+             SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+             DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+             DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+             SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             TRAN            =SIMP(statut='f',typ='R',max=3),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+             CENTRE          =SIMP(statut='f',typ='R',max=3),
+           ),
+
+           LIAISON_OBLIQUE =FACT(statut='f',fr="Appliquer à des noeuds une valeur de déplacement dans un repere oblique",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                     UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+           ), 
+
+           LIAISON_SOLIDE  =FACT(statut='f',fr="Modéliser une partie indéformable d'une structure",min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ), 
+
+           LIAISON_UNIF    =FACT(statut='f',fr="Imposer une meme valeur (inconnue) à des ddls d'un emsemble de noeuds",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           ), 
+
+         LIAISON_UNIL_NO =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),# CO()
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),# CO()
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),# CO()
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),# CO()
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max=3 ),  
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),  
+           CENTRE          =SIMP(statut='f',typ='R',max=3 ),  
+           ANGLE_MAX       =SIMP(statut='f',typ='R' ),  
+           VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
+           FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",   
+                                 into=("SANS","TRESCA","COULOMB") ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",    
+                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION") ),
+           COULOMB         =SIMP(statut='f',typ='R' ),  
+           TRESCA          =SIMP(statut='f',typ='R' ),  
+           E_T             =SIMP(statut='f',typ='R' ),  
+           COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           CONTACT         =SIMP(statut='f',typ='TXM',into=("MAINTENU",) ),
+           JEU             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+         ),
+         
+           LIAISON_MAIL    =FACT(statut='f',min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA_MAIT','MAILLE_MAIT'),
+                     AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL'),
+                     PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),),
+              GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_MAIT     =SIMP(statut='f',typ=ma,max='**'), 
+              GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_ESCL     =SIMP(statut='f',typ=ma,max='**'), 
+              GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,max='**'),
+              NOEUD_ESCL      =SIMP(statut='f',typ=no,max='**'), 
+              TRAN            =SIMP(statut='f',typ='R',max=3 ),
+              ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),
+              CENTRE          =SIMP(statut='f',typ='R',max=3 ),
+              DDL_MAIT        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+              DDL_ESCL        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+         ),
+         
+         ONDE_FLUI       =FACT(statut='f',fr="Appliquer une amplitude de pression d onde incidente",min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             PRES            =SIMP(statut='o',typ='R' ),
+           ),
+         
+         PRES_REP        =FACT(statut='f',fr="Appliquer une pression à un domaine de milieu continu 2D ou 3D",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('PRES','CISA_2D' ),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             PRES            =SIMP(statut='f',typ='R' ),
+             CISA_2D         =SIMP(statut='f',typ='R' ),
+           ),
+         
+         PESANTEUR       =SIMP(statut='f',typ='R',fr="Champ de pesanteur",min=4,max=4),
+
+         RELA_CINE_BP    =FACT(statut='f',min=1,max='**',
+           CABLE_BP        =SIMP(statut='o',typ=cabl_precont ),
+           SIGM_BPEL       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           RELA_CINE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+
+        ROTATION        =SIMP(statut='f',typ='R',fr="Champ de rotation",min=4,max=4),
+         b_rotation      =BLOC ( condition = "ROTATION != None",
+           CENTRE          =SIMP(statut='f',typ='R',defaut=(0.,0.,0.),max=3),),     
+         
+         VITE_FACE       =FACT(statut='f',fr="Imposer des vitesses acoustiquesnormales à une face",min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             VNOR            =SIMP(statut='o',typ='R' ),
+           ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op=   7,sd_prod=char_meca,
+                     fr="Affectation de charges et conditions aux limites mécaniques complexes",
+                     docu="U4.44.05-c",reentrant='n',
+         regles=(AU_MOINS_UN('DDL_IMPO','FORCE_POUTRE','LIAISON_DDL', ),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         DDL_IMPO        =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD',),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI', ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DX              =SIMP(statut='f',typ='C' ),
+           DY              =SIMP(statut='f',typ='C' ),
+           DZ              =SIMP(statut='f',typ='C' ),
+           DRX             =SIMP(statut='f',typ='C' ),
+           DRY             =SIMP(statut='f',typ='C' ),
+           DRZ             =SIMP(statut='f',typ='C' ),
+           GRX             =SIMP(statut='f',typ='C' ),
+           PRES            =SIMP(statut='f',typ='C' ),
+           PHI             =SIMP(statut='f',typ='C' ),
+         ),
+         FORCE_POUTRE    =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','N','VY','VZ',),
+                   PRESENT_ABSENT('FX','N','VY','VZ',),
+                   PRESENT_ABSENT('FY','N','VY','VZ',),
+                   PRESENT_ABSENT('FZ','N','VY','VZ',),
+                   PRESENT_ABSENT('N','FX','FY','FZ',),
+                   PRESENT_ABSENT('VY', 'FX','FY','FZ',),
+                   PRESENT_ABSENT('VZ','FX','FY','FZ', ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE") ),
+           FX              =SIMP(statut='f',typ='C' ),
+           FY              =SIMP(statut='f',typ='C' ),
+           FZ              =SIMP(statut='f',typ='C' ),
+           N               =SIMP(statut='f',typ='C' ),
+           VY              =SIMP(statut='f',typ='C' ),
+           VZ              =SIMP(statut='f',typ='C' ),
+         ),
+         LIAISON_DDL     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD', ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ='C' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
+                      fr="Affectation de charges et conditions aux limites mécaniques fonction d une grandeur",
+                      docu="U4.44.01-f",reentrant='n',
+        regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','LIAISON_DDL','FORCE_NODALE',
+                            'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',
+                            'PRES_REP','FORCE_POUTRE','VITE_FACE','IMPE_FACE','ONDE_PLANE',
+                            'LIAISON_OBLIQUE','EPSI_INIT','LIAISON_GROUP','LIAISON_UNIF',
+                            'LIAISON_SOLIDE','FORCE_COQUE','LIAISON_COQUE','FORCE_TUYAU',
+                            'CONTACT'),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+
+         DDL_IMPO        =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                               'TEMP','PRE1','PRE2'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DX              =SIMP(statut='f',typ=(fonction) ),
+           DY              =SIMP(statut='f',typ=(fonction) ),
+           DZ              =SIMP(statut='f',typ=(fonction) ),
+           DRX             =SIMP(statut='f',typ=(fonction) ),
+           DRY             =SIMP(statut='f',typ=(fonction) ),
+           DRZ             =SIMP(statut='f',typ=(fonction) ),
+           GRX             =SIMP(statut='f',typ=(fonction) ),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           PHI             =SIMP(statut='f',typ=(fonction) ),
+           TEMP            =SIMP(statut='f',typ=(fonction) ),
+           PRE1            =SIMP(statut='f',typ=(fonction) ),
+           PRE2            =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_UNIF    =FACT(statut='f',min=1,max='**',
+                               fr="Imposer une meme valeur (inconnue) a des ddls d un emsemble de noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+         ),
+         LIAISON_SOLIDE  =FACT(statut='f',min=1,max='**',
+                               fr="Modéliser une partie indéformable d une structure",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
+         ),
+         LIAISON_OBLIQUE =FACT(statut='f',min=1,max='**',
+                               fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                   UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
+           DX              =SIMP(statut='f',typ=(fonction) ),
+           DY              =SIMP(statut='f',typ=(fonction) ),
+           DZ              =SIMP(statut='f',typ=(fonction) ),
+           DRX             =SIMP(statut='f',typ=(fonction) ),
+           DRY             =SIMP(statut='f',typ=(fonction) ),
+           DRZ             =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_COQUE   =FACT(statut='f',min=1,max='**',
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
+         ),
+         FACE_IMPO       =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI','TEMP','PRE1','PRE2','DNOR','DTAN'),
+                   EXCLUS('DNOR','DX'),
+                   EXCLUS('DNOR','DY'),
+                   EXCLUS('DNOR','DZ'),
+                   EXCLUS('DNOR','DRX'),
+                   EXCLUS('DNOR','DRY'),
+                   EXCLUS('DNOR','DRZ'),
+                   EXCLUS('DTAN','DX'),
+                   EXCLUS('DTAN','DY'),
+                   EXCLUS('DTAN','DZ'),
+                   EXCLUS('DTAN','DRX'),
+                   EXCLUS('DTAN','DRY'),
+                   EXCLUS('DTAN','DRZ'),),
+#  rajout d un mot cle REPERE : / GLOBAL / LOCAL
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           DX              =SIMP(statut='f',typ=(fonction) ),
+           DY              =SIMP(statut='f',typ=(fonction) ),
+           DZ              =SIMP(statut='f',typ=(fonction) ),
+           DRX             =SIMP(statut='f',typ=(fonction) ),
+           DRY             =SIMP(statut='f',typ=(fonction) ),
+           DRZ             =SIMP(statut='f',typ=(fonction) ),
+           GRX             =SIMP(statut='f',typ=(fonction) ),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           PHI             =SIMP(statut='f',typ=(fonction) ),
+           TEMP            =SIMP(statut='f',typ=(fonction) ),
+           PRE1            =SIMP(statut='f',typ=(fonction) ),
+           PRE2            =SIMP(statut='f',typ=(fonction) ),
+           DNOR            =SIMP(statut='f',typ=(fonction) ),
+           DTAN            =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_DDL     =FACT(statut='f',min=1,max='**',
+                               fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
+         ),
+         LIAISON_GROUP   =FACT(statut='f',min=1,max='**',
+                               fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                   EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                   EXCLUS('GROUP_MA_1','NOEUD_2'),
+                   EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                   EXCLUS('GROUP_NO_1','MAILLE_2'),
+                   EXCLUS('MAILLE_1','GROUP_NO_2'),
+                   EXCLUS('MAILLE_1','NOEUD_2'),
+                   EXCLUS('NOEUD_1','GROUP_MA_2'),
+                   EXCLUS('NOEUD_1','MAILLE_2'),
+                   EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+           DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+           DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+           CENTRE          =SIMP(statut='f',typ='R',max=3),
+         ),
+
+         FORCE_NODALE    =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           MX              =SIMP(statut='f',typ=(fonction) ),
+           MY              =SIMP(statut='f',typ=(fonction) ),
+           MZ              =SIMP(statut='f',typ=(fonction) ),
+           ANGL_NAUT       =SIMP(statut='f',typ=(fonction),max=3 ),
+         ),
+         FORCE_INTERNE   =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FORCE_FACE      =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FORCE_ARETE     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           MX              =SIMP(statut='f',typ=(fonction) ),
+           MY              =SIMP(statut='f',typ=(fonction) ),
+           MZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FORCE_CONTOUR   =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           MX              =SIMP(statut='f',typ=(fonction) ),
+           MY              =SIMP(statut='f',typ=(fonction) ),
+           MZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         PRES_REP        =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('PRES','CISA_2D'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           CISA_2D         =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         FORCE_COQUE     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('F1','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('F2','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('F3','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('MF1','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('MF2','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
+#  rajout d un mot cle REPERE : / GLOBAL / LOCAL
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           MX              =SIMP(statut='f',typ=(fonction) ),
+           MY              =SIMP(statut='f',typ=(fonction) ),
+           MZ              =SIMP(statut='f',typ=(fonction) ),
+           F1              =SIMP(statut='f',typ=(fonction) ),
+           F2              =SIMP(statut='f',typ=(fonction) ),
+           F3              =SIMP(statut='f',typ=(fonction) ),
+           MF1             =SIMP(statut='f',typ=(fonction) ),
+           MF2             =SIMP(statut='f',typ=(fonction) ),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",
+                                 into=("SUP","INF","MOY","MAIL") ),
+         ),
+         FORCE_POUTRE    =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','N','VY','VZ'),
+                   PRESENT_ABSENT('FX','N','VY','VZ'),
+                   PRESENT_ABSENT('FY','N','VY','VZ'),
+                   PRESENT_ABSENT('FZ','N','VY','VZ'),
+                   PRESENT_ABSENT('N','FX','FY','FZ'),
+                   PRESENT_ABSENT('VY','FX','FY','FZ'),
+                   PRESENT_ABSENT('VZ','FX','FY','FZ'),),
+#  rajout d un mot cle REPERE : / GLOBAL / LOCAL
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE") ),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           N               =SIMP(statut='f',typ=(fonction) ),
+           VY              =SIMP(statut='f',typ=(fonction) ),
+           VZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FORCE_TUYAU     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+         ),
+         VITE_FACE       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           VNOR            =SIMP(statut='o',typ=(fonction) ),
+         ),
+         IMPE_FACE       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           IMPE            =SIMP(statut='o',typ=(fonction) ),
+         ),
+         ONDE_PLANE      =FACT(statut='f',min=1,max='**',
+           DIRECTION       =SIMP(statut='o',typ='R',max='**'),
+           TYPE_ONDE       =SIMP(statut='o',typ='TXM' ),
+           FONC_SIGNAL     =SIMP(statut='o',typ=(fonction) ),
+           DIST_ORIG       =SIMP(statut='o',typ='R' ),
+         ),
+         EPSI_INIT       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           EPXX            =SIMP(statut='f',typ=(fonction) ),
+           EPYY            =SIMP(statut='f',typ=(fonction) ),
+           EPZZ            =SIMP(statut='f',typ=(fonction) ),
+           EPXY            =SIMP(statut='f',typ=(fonction) ),
+           EPXZ            =SIMP(statut='f',typ=(fonction) ),
+           EPYZ            =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         CONTACT         =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_2','MAILLE_2'),
+                   EXCLUS('DIST_2','COEF_IMPO'),
+                   EXCLUS('DIST_1','COEF_IMPO'),
+                   EXCLUS('COEF_MULT_2','GROUP_MA_1'),
+                   EXCLUS('COEF_MULT_2','MAILLE_1'),
+                   EXCLUS('COEF_IMPO','GROUP_MA_1'),
+                   EXCLUS('COEF_IMPO','MAILLE_1'),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP") ),
+           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                 into=("NON","NODAL","NODAL_SYME","MAIT_ESCL","MAIT_ESCL_SYME") ),
+           RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_VOISIN",
+                                 into=("NOEUD_BOUCLE","NOEUD_VOISIN") ),
+           INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD")),
+           COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+           COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+           MODL_AXIS       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=2),
+           ITER_CONT_MAXI  =SIMP(statut='f',typ='I',defaut=30),
+           ITER_FROT_MAXI  =SIMP(statut='f',typ='I',defaut=2),
+           LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           SEUIL_INIT      =SIMP(statut='f',typ='I',defaut=0),
+           REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
+           NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",into=("MAIT","MAIT_ESCL")),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
+                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION") ),
+           FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+           COULOMB         =SIMP(statut='f',typ='R',max=1,defaut=0.E+0),
+           E_N             =SIMP(statut='f',typ='R' ),
+           E_T             =SIMP(statut='f',typ='R' ),
+           COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
+           VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
+           VECT_NORM_2     =SIMP(statut='f',typ='R',max=3),
+           PROJECTION      =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE",) ),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'  ),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'  ),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'  ),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+           DIST_1          =SIMP(statut='f',typ=(fonction) ),
+           DIST_2          =SIMP(statut='f',typ=(fonction) ),
+           COEF_IMPO       =SIMP(statut='f',typ='R',defaut=0.E+0),
+           COEF_MULT_2     =SIMP(statut='f',typ='R',defaut=1.E+0),
+         ),
+         FLUX_THM_REP    =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUN            =SIMP(statut='f',typ=(fonction) ),
+           FLUN_HYDR1      =SIMP(statut='f',typ=(fonction) ),
+           FLUN_HYDR2      =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther,
+                      fr=" ",
+                      docu="",reentrant='n',
+         regles=(AU_MOINS_UN('CARA_TORSION', ),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",
+                               into=("OUI","NON") ),
+         CARA_TORSION    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
+                    ,fr="Affectation de charges et conditions aux limites thermiques constantes",
+                    docu="U4.44.02-f",reentrant='n',
+      regles=(AU_MOINS_UN('TEMP_IMPO','SOURCE','FLUX_REP','ECHANGE',
+                          'ECHANGE_PAROI','GRAD_TEMP_INIT','LIAISON_DDL','LIAISON_GROUP',
+                          'LIAISON_UNIF','LIAISON_CHAMNO','RAYONNEMENT','LIAISON_MAIL' ),),
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="OUI"),
+         LIAISON_DDL     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD', ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ='R' ),
+         ),
+         TEMP_IMPO       =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP_SUP','TEMP','TEMP_INF'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           TEMP            =SIMP(statut='f',typ='R'),
+           TEMP_INF        =SIMP(statut='f',typ='R'),
+           TEMP_SUP        =SIMP(statut='f',typ='R'), ),
+         LIAISON_UNIF    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+         ),
+         LIAISON_CHAMNO  =FACT(statut='f',min=01,max='**',
+           CHAM_NO         =SIMP(statut='o',typ=cham_no),# CO()# "il faut definir une structure de donnee generique chamno"
+           COEF_IMPO       =SIMP(statut='o',typ='R' ),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+         ),
+         SOURCE          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('SOUR','SOUR_CALCULEE',),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('SOUR_CALCULEE','TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SOUR            =SIMP(statut='f',typ='R'),
+           SOUR_CALCULEE   =SIMP(statut='f',typ=(cham_elem_sour_r) ),
+         ),
+         FLUX_REP        =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_PRESENT('CARA_TORSION','GROUP_MA'),
+                   AU_MOINS_UN('FLUN','FLUN_INF','FLUN_SUP','CARA_TORSION') ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUN            =SIMP(statut='f',typ='R'),
+           FLUN_INF        =SIMP(statut='f',typ='R'),
+           FLUN_SUP        =SIMP(statut='f',typ='R'),
+           CARA_TORSION    =SIMP(statut='f',typ=tabl_aire_int ),
+         ),
+         ECHANGE         =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('COEF_H','COEF_H_INF','COEF_H_SUP'),
+                   ENSEMBLE('COEF_H','TEMP_EXT',),
+                   ENSEMBLE('COEF_H_INF','TEMP_EXT_INF'),
+                             ENSEMBLE('COEF_H_SUP','TEMP_EXT_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           COEF_H          =SIMP(statut='f',typ='R'),
+           TEMP_EXT        =SIMP(statut='f',typ='R'),
+           COEF_H_INF      =SIMP(statut='f',typ='R'),
+           TEMP_EXT_INF    =SIMP(statut='f',typ='R'),
+           COEF_H_SUP      =SIMP(statut='f',typ='R'),
+           TEMP_EXT_SUP    =SIMP(statut='f',typ='R'),
+         ),
+         ECHANGE_PAROI   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           COEF_H          =SIMP(statut='f',typ='R'),
+           TRAN            =SIMP(statut='f',typ='R',min=2,max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',min=1,max=3),
+           CENTRE          =SIMP(statut='f',typ='R',min=2,max=3),
+                         ),
+         GRAD_TEMP_INIT  =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FLUX_X','FLUX_Y','FLUX_Z'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUX_X          =SIMP(statut='f',typ='R' ),
+           FLUX_Y          =SIMP(statut='f',typ='R' ),
+           FLUX_Z          =SIMP(statut='f',typ='R' ),
+                         ),
+         LIAISON_GROUP   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                             EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                             EXCLUS('GROUP_MA_1','NOEUD_2'),
+                   EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                             EXCLUS('GROUP_NO_1','MAILLE_2'),
+                             EXCLUS('MAILLE_1','GROUP_NO_2'),
+                             EXCLUS('MAILLE_1','NOEUD_2'),
+                             EXCLUS('NOEUD_1','GROUP_MA_2'),
+                             EXCLUS('NOEUD_1','MAILLE_2'),
+                             EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+           DDL_1           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+           DDL_2           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP",) ),
+           COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ='R' ),
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max='**'),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**'),
+           CENTRE          =SIMP(statut='f',typ='R',max='**'),
+         ),
+         CONVECTION      =FACT(statut='f',min=01,max='**',
+           VITESSE         =SIMP(statut='o',typ=(cham_no_depl_r) ),
+         ),
+         RAYONNEMENT     =FACT(statut='f',min=01,max='**',
+           fr="Attention, exprimer les températures en Celsius si rayonnement",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SIGMA           =SIMP(statut='o',typ='R'),
+           EPSILON         =SIMP(statut='o',typ='R'),
+           TEMP_EXT        =SIMP(statut='o',typ='R'),
+         ),
+         LIAISON_MAIL    =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA_MAIT','MAILLE_MAIT'),
+                   AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL',
+                               'NOEUD_ESCL'),),
+           GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_MAIT     =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_ESCL     =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_ESCL      =SIMP(statut='f',typ=no,max='**'),
+           TRAN            =SIMP(statut='f',typ='R',max='**' ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**' ),
+           CENTRE          =SIMP(statut='f',typ='R',max='**' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
+                     fr="Affectation de charges et conditions aux limites thermiques fonction dune grandeur (temps, ...)",
+                     docu="U4.44.02-f",reentrant='n',
+      regles=(AU_MOINS_UN('TEMP_IMPO','SOURCE','FLUX_REP','FLUX_NL','ECHANGE',
+                          'ECHANGE_PAROI','LIAISON_DDL','LIAISON_GROUP','LIAISON_UNIF',
+                          'GRAD_TEMP_INIT','RAYONNEMENT'),),
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         LIAISON_DDL     =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
+         ),
+         TEMP_IMPO       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP_SUP','TEMP','TEMP_INF','EVOL_THER'),
+                   PRESENT_ABSENT('EVOL_THER','TEMP','TEMP_INF','TEMP_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           EVOL_THER       =SIMP(statut='f',typ=(evol_ther) ),
+           DDL             =SIMP(statut='f',typ='TXM',into=("TEMP",) ),
+           TEMP            =SIMP(statut='f',typ=(fonction) ),
+           TEMP_INF        =SIMP(statut='f',typ=(fonction) ),
+           TEMP_SUP        =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_UNIF    =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+         ),
+         SOURCE          =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SOUR            =SIMP(statut='o',typ=(fonction) ),
+         ),
+         FLUX_REP        =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FLUN','FLUN_INF','FLUN_SUP','FLUX_X','FLUX_Y','FLUX_Z'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUN            =SIMP(statut='f',typ=(fonction) ),
+           FLUN_INF        =SIMP(statut='f',typ=(fonction) ),
+           FLUN_SUP        =SIMP(statut='f',typ=(fonction) ),
+           FLUX_X          =SIMP(statut='f',typ=(fonction) ),
+           FLUX_Y          =SIMP(statut='f',typ=(fonction) ),
+           FLUX_Z          =SIMP(statut='f',typ=(fonction) ),
+         ),
+         FLUX_NL         =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUN            =SIMP(statut='o',typ=(fonction) ),
+         ),
+         ECHANGE         =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('COEF_H','COEF_H_INF','COEF_H_SUP'),
+                   ENSEMBLE('COEF_H','TEMP_EXT'),
+                   ENSEMBLE('COEF_H_INF','TEMP_EXT_INF'),
+                   ENSEMBLE('COEF_H_SUP','TEMP_EXT_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           COEF_H          =SIMP(statut='f',typ=(fonction) ),
+           TEMP_EXT        =SIMP(statut='f',typ=(fonction) ),
+           COEF_H_INF      =SIMP(statut='f',typ=(fonction) ),
+           TEMP_EXT_INF    =SIMP(statut='f',typ=(fonction) ),
+           COEF_H_SUP      =SIMP(statut='f',typ=(fonction) ),
+           TEMP_EXT_SUP    =SIMP(statut='f',typ=(fonction) ),
+         ),
+         ECHANGE_PAROI   =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                        UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           COEF_H          =SIMP(statut='o',typ=(fonction) ),
+           TRAN            =SIMP(statut='f',typ='R',min=2,max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',min=1,max=3),
+           CENTRE          =SIMP(statut='f',typ='R',min=2,max=3),
+         ),
+         GRAD_TEMP_INIT  =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FLUX_X','FLUX_Y','FLUX_Z'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUX_X          =SIMP(statut='f',typ=(fonction) ),
+           FLUX_Y          =SIMP(statut='f',typ=(fonction) ),
+           FLUX_Z          =SIMP(statut='f',typ=(fonction) ),
+         ),
+         LIAISON_GROUP   =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                             EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                        EXCLUS('GROUP_MA_1','NOEUD_2'),
+                   EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                        EXCLUS('GROUP_NO_1','MAILLE_2'),
+                        EXCLUS('MAILLE_1','GROUP_NO_2'),
+                        EXCLUS('MAILLE_1','NOEUD_2'),
+                        EXCLUS('NOEUD_1','GROUP_MA_2'),
+                        EXCLUS('NOEUD_1','MAILLE_2'),
+                        EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+           DDL_1           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+           DDL_2           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max='**'),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**'),
+           CENTRE          =SIMP(statut='f',typ='R',max='**'),
+         ),
+         CONVECTION      =FACT(statut='f',min=1,max='**',
+           VITESSE         =SIMP(statut='o',typ=(cham_no_depl_r) ),
+         ),
+         RAYONNEMENT     =FACT(statut='f',min=1,max='**',
+           fr="Attention, exprimer les températures en Celsius si rayonnement",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SIGMA           =SIMP(statut='o',typ=(fonction) ),
+           EPSILON         =SIMP(statut='o',typ=(fonction) ),
+           TEMP_EXT        =SIMP(statut='o',typ=(fonction) ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
+                   fr="Affectation de caractéristiques de matériaux à un maillage",
+                         docu="U4.43.03-f",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         MODELE          =SIMP(statut='f',typ=modele),
+         AFFE            =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           MATER           =SIMP(statut='o',typ=mater),
+           TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR VABHHTS J.TESELET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-f1",
+                 fr="Affectation des éléments finis sur le maillage",reentrant='n',
+         regles=(AU_MOINS_UN('AFFE','AFFE_SOUS_STRUC'),),
+         MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',max=2,into=("MAILLE","NOEUD") ),
+         AFFE_SOUS_STRUC =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('TOUT','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PHENOMENE       =SIMP(statut='f',typ='TXM',defaut="MECANIQUE",into=("MECANIQUE",) ),
+         ),
+         AFFE            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           PHENOMENE       =SIMP(statut='o',typ='TXM',
+                                 into=("MECANIQUE","THERMIQUE","ACOUSTIQUE","NON_LOCAL") ),
+                b_mecanique     =BLOC( condition = "PHENOMENE=='MECANIQUE'",
+                                        fr="modelisations mécaniques",
+                    MODELISATION    =SIMP(statut='o',typ='TXM', into=(
+                                                                      "2D_CONTACT",
+                                                                      "2D_DIS_T",
+                                                                      "2D_DIS_TR",
+                                                                      "2D_FLUI_ABSO",
+                                                                      "2D_FLUI_PESA",
+                                                                      "2D_FLUI_STRU",
+                                                                      "2D_FLUIDE",
+                                                                      "3D",
+                                                                      "3D_ABSO",
+                                                                      "3D_CONTACT",
+                                                                      "3D_FAISCEAU",
+                                                                      "3D_FLUI_ABSO",
+                                                                      "3D_FLUIDE",
+                                                                      "3D_HHM" ,
+                                                                      "3D_HM",
+                                                                      "3D_INCO",
+                                                                      "3D_JOINT_CT",
+                                                                      "3D_SI",
+                                                                      "3D_THH",
+                                                                      "3D_THHM",
+                                                                      "3D_THM",
+                                                                      "APPUI_REP",
+                                                                      "ASSE_GRIL",
+                                                                      "AXIS",
+                                                                      "AXIS_FLUI_STRU",
+                                                                      "AXIS_FLUIDE",
+                                                                      "AXIS_FOURIER",
+                                                                      "AXIS_HHM",
+                                                                      "AXIS_HM",
+                                                                      "AXIS_INCO",
+                                                                      "AXIS_SI",
+                                                                      "AXIS_THH",
+                                                                      "AXIS_THHM",
+                                                                      "AXIS_THM",
+                                                                      "BARRE",
+                                                                      "2D_BARRE",
+                                                                      "C_PLAN",
+                                                                      "C_PLAN_SI",
+                                                                      "CABLE",
+                                                                      "CABLE_POULIE",
+                                                                      "COQUE_3D",
+                                                                      "COQUE_AXIS",
+                                                                      "COQUE_C_PLAN",
+                                                                      "COQUE_D_PLAN",
+                                                                      "CONT_DVP_2D",
+                                                                      "CONT_DVP_3D",
+                                                                      "D_PLAN",
+                                                                      "D_PLAN_ABSO",
+                                                                      "D_PLAN_HHM",
+                                                                      "D_PLAN_HM",
+                                                                      "D_PLAN_INCO",
+                                                                      "D_PLAN_SI",
+                                                                      "D_PLAN_THH",
+                                                                      "D_PLAN_THHM",
+                                                                      "D_PLAN_THM",
+                                                                      "DIS_T",
+                                                                      "DIS_TR",
+                                                                      "DKT",
+                                                                      "DST",
+                                                                      "FLUI_STRU",
+                                                                      "GRILLE",
+                                                                      "POU_C_T",
+                                                                      "POU_D_E",
+                                                                      "POU_D_EM",
+                                                                      "POU_D_T",
+                                                                      "POU_D_T_GD",
+                                                                      "POU_D_TG",
+                                                                      "Q4G",
+                                                                      "TUYAU",
+                                                                      "TUYAU_3M",
+                                                                      "TUYAU_6M"
+                                                                     )  )  ),
+
+                b_thermique     =BLOC( condition = "PHENOMENE=='THERMIQUE'",
+                                        fr="modelisations thermiques",
+                    MODELISATION    =SIMP(statut='o',typ='TXM',into=(
+                                                                      "3D",
+                                                                      "3D_DIAG",
+                                                                      "AXIS",
+                                                                      "AXIS_DIAG",
+                                                                      "AXIS_FOURIER",
+                                                                      "COQUE",
+                                                                      "COQUE_AXIS",
+                                                                      "COQUE_PLAN",
+                                                                      "PLAN",
+                                                                      "PLAN_DIAG",
+                                                                      ),),),
+
+                b_acoustique    =BLOC( condition = "PHENOMENE=='ACOUSTIQUE'",
+                                        fr="modelisations acoustiques",
+                     MODELISATION    =SIMP(statut='o',typ='TXM',into=(
+                                                                       "3D",
+                                                                       "PLAN"
+                                                                       ), ),),
+
+                b_non_local     =BLOC( condition = "PHENOMENE=='NON_LOCAL'",
+                                        fr="modelisations non locales",
+                     MODELISATION    =SIMP(statut='o',typ='TXM',into=(
+                                                                      "3D",
+                                                                      "AXIS",
+                                                                      "C_PLAN",
+                                                                      "D_PLAN",
+                                                                     ) ), ),
+         ),
+) ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+AIDE=PROC(nom="AIDE",op=42,docu="U4.02.01-f",
+          fr="Interrogation sur le catalogue des commandes et les concepts produits",
+         regles=(AU_MOINS_UN('COMMANDE','CONCEPT','TYPE_ELEM', ),),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         TYPE_ELEM       =FACT(fr="couple type_elem option",
+                               statut='f',min=01,max=01,
+           INITEL          =SIMP(statut='f',typ='TXM',defaut="NON",
+                                 into=("OUI","NON",) ),
+         ),
+         COMMANDE        =FACT(statut='f',min=01,max='**',
+           NOM             =SIMP(fr="liste des noms de commande", 
+                                 statut='f',typ='TXM',max='**',defaut="*"),
+           OPTION          =SIMP(fr="option d'édition de commande",
+                                 statut='f',typ='TXM',defaut="CATALOGUE",
+                                 into=("CATALOGUE","A_REMPLIR","NUMERO",) ),
+         ),
+         CONCEPT         =FACT(statut='f',min=01,max='**',
+           NOM             =SIMP(fr="liste des noms de concept", 
+                                 statut='f',typ='TXM',max='**',defaut="*"),
+           OPTION          =SIMP(fr="option d'édition de concept",
+                                 statut='f',typ='TXM',defaut="TOUT_TYPE",
+                                 into=("TOUT_TYPE","CREER","A_CREER",) ),
+         ),
+) ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage,
+                   fr="Assembler deux maillages sous un seul nom",
+                   docu="U4.23.03-e",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage,min=2,max=2 ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=matr_asse_gene_r,
+                    fr="Assemblage des matrices généralisées de macro éléments pour construction de la matrice globale généralisée",
+                    docu="U4.65.04-d",reentrant='n',
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         OPTION          =SIMP(statut='o',typ='TXM',into=("RIGI_GENE","MASS_GENE","AMOR_GENE") ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def asse_matrice_prod(MATR_ELEM,**args):
+  if AsType(MATR_ELEM) == matr_elem_depl_r : return matr_asse_depl_r
+  if AsType(MATR_ELEM) == matr_elem_depl_c : return matr_asse_depl_c
+  if AsType(MATR_ELEM) == matr_elem_temp_r : return matr_asse_temp_r
+  if AsType(MATR_ELEM) == matr_elem_pres_c : return matr_asse_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+ASSE_MATRICE=OPER(nom="ASSE_MATRICE",op=12,sd_prod=asse_matrice_prod,
+                  fr="Construction d une matrice assemblée",docu="U4.61.22-f",reentrant='n',
+         MATR_ELEM       =SIMP(statut='o',
+                               typ=(matr_elem_depl_r,matr_elem_depl_c,matr_elem_temp_r,matr_elem_pres_c) ),
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl),
+         CHAR_CINE       =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene,
+                    fr="Assemblage de vecteurs de chargement en coordonnées généralisées",
+                    docu="U4.65.05-d",reentrant='n',
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         CHAR_SOUS_STRUC =FACT(statut='o',min=01,max='**',
+           SOUS_STRUC      =SIMP(statut='o',typ='TXM' ),
+           VECT_ASSE       =SIMP(statut='o',typ=cham_no_depl_r ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def asse_vecteur_prod(VECT_ELEM,**args):
+  if AsType(VECT_ELEM) == vect_elem_depl_r : return cham_no_depl_r
+  if AsType(VECT_ELEM) == vect_elem_temp_r : return cham_no_temp_r
+  if AsType(VECT_ELEM) == vect_elem_pres_r : return cham_no_pres_r
+  if AsType(VECT_ELEM) == vect_elem_pres_c : return cham_no_pres_c
+  raise AsException("type de concept resultat non prevu ")
+
+ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=asse_vecteur_prod,
+                  fr="Assemblage d un second membre",docu="U4.61.23-f",reentrant='n',
+         VECT_ELEM       =SIMP(statut='o',typ=vect_elem,max='**'),
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2,) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8,
+                     fr="Création d'une liste d'amortissements modaux calculés selon la règle du RCC-G",
+                     docu="U4.52.13-c",reentrant='n',
+         ENER_SOL        =FACT(statut='o',min=01,max=01,
+           regles=(UN_PARMI('GROUP_NO_RADIER','GROUP_MA_RADIER'),
+                   PRESENT_ABSENT('COEF_GROUP','FONC_GROUP'),
+#  Peut-on remplacer les deux règles suivantes par un ENSEMBLE_('KRX','KRY','KRZ')
+                   PRESENT_PRESENT('KRX','KRY'),
+                   PRESENT_PRESENT('KRX','KRZ'),
+                   PRESENT_ABSENT('COOR_CENTRE','NOEUD_CENTRE'),
+                   PRESENT_ABSENT('GROUP_NO_CENTRE','NOEUD_CENTRE'),
+                   PRESENT_ABSENT('GROUP_NO_CENTRE','COOR_CENTRE'),),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","RIGI_PARASOL") ),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+           GROUP_NO_RADIER =SIMP(statut='f',typ=grno,max='**'),
+           GROUP_MA_RADIER =SIMP(statut='f',typ=grma,max='**'),
+           FONC_GROUP      =SIMP(statut='f',typ=fonction ),
+           COEF_GROUP      =SIMP(statut='f',typ='R',max='**'),
+           KX              =SIMP(statut='o',typ='R' ),
+           KY              =SIMP(statut='o',typ='R' ),
+           KZ              =SIMP(statut='o',typ='R' ),
+           KRX             =SIMP(statut='f',typ='R' ),
+           KRY             =SIMP(statut='f',typ='R' ),
+           KRZ             =SIMP(statut='f',typ='R' ),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+           COOR_CENTRE     =SIMP(statut='f',typ='R',max=03),
+         ),
+         AMOR_INTERNE    =FACT(statut='o',min=01,max=01,
+           ENER_POT        =SIMP(statut='o',typ=tabl_ener_pot ),
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+           AMOR_REDUIT     =SIMP(statut='o',typ='R',max='**'),
+         ),
+         AMOR_SOL        =FACT(statut='o',min=01,max=01,
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FONC_AMOR_GEO   =SIMP(statut='o',typ=fonction,max='**' ),
+           HOMOGENE        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 0.3 ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+def calc_cham_elem_prod(OPTION,**args):
+
+# options mecaniques
+  if OPTION == "DEGE_ELNO_DEPL" : return cham_elem_epsi_r
+  if OPTION == "ECIN_ELEM_DEPL" : return cham_elem_ener_r
+  if OPTION == "EFGE_ELNO_CART" : return cham_elem_sief_r
+  if OPTION == "EFGE_ELNO_DEPL" : return cham_elem_sief_r
+  if OPTION == "ENDO_ELNO_SIGM" : return cham_elem_sief_r
+  if OPTION == "EPOT_ELEM_DEPL" : return cham_elem_ener_r
+  if OPTION == "ENEL_ELGA" :      return cham_elem_ener_r
+  if OPTION == "ENEL_ELNO_ELGA" : return cham_elem_ener_r
+  if OPTION == "EPSI_ELNO_DEPL" : return cham_elem_epsi_r
+  if OPTION == "EQUI_ELGA_EPSI" : return cham_elem_epsi_r
+  if OPTION == "EQUI_ELGA_SIGM" : return cham_elem_sief_r
+  if OPTION == "EQUI_ELNO_EPSI" : return cham_elem_epsi_r
+  if OPTION == "EQUI_ELNO_SIGM" : return cham_elem_sief_r
+  if OPTION == "PRES_DBEL_DEPL" : return cham_elem_dbel_r
+  if OPTION == "SIEF_ELGA_DEPL" : return cham_elem_sief_r
+  if OPTION == "SIEF_ELGA_LAGR" : return cham_elem_sief_r
+  if OPTION == "SIGM_ELNO_CART" : return cham_elem_sief_r
+  if OPTION == "SIGM_ELNO_DEPL" : return cham_elem_sief_r
+  if OPTION == "SIGM_ELNO_LAGR" : return cham_elem_sief_r
+  if OPTION == "SIPO_ELNO_DEPL" : return cham_elem_sief_r
+
+# options thermiques
+
+  if OPTION == "FLUX_ELGA_TEMP" : return cham_elem_flux_r
+  if OPTION == "FLUX_ELNO_TEMP" : return cham_elem_flux_r
+  if OPTION == "SOUR_ELGA_ELEC" : return cham_elem_sour_r
+
+# options acoustiques
+
+  if OPTION == "PRES_ELNO_DBEL" : return cham_elem_dbel_r
+  if OPTION == "PRES_ELNO_REEL" : return cham_elem_pres_r
+  if OPTION == "PRES_ELNO_IMAG" : return cham_elem_pres_r
+
+# autres options
+
+  if OPTION == "COOR_ELGA" :      return cham_elem_geom_r
+
+  raise AsException("type de concept resultat non prevu")
+
+CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=calc_cham_elem_prod,
+                    fr="Calcul de champs par éléments à partir de champs solution ou de champs par éléments",
+                    docu="U4.81.03-f",reentrant='n',
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+
+         regles=(EXCLUS('TOUT','GROUP_MA',),EXCLUS('TOUT','MAILLE',),),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+#
+#
+#  introduire un mot cle de type modelisation : mécanique,thermique,...
+#
+
+         OPTION          =SIMP(statut='o',typ='TXM',
+                               into=("DEGE_ELNO_DEPL","ECIN_ELEM_DEPL","EFGE_ELNO_CART",
+                                     "EFGE_ELNO_DEPL","ENDO_ELNO_SIGM","EPOT_ELEM_DEPL",
+                                     "ENEL_ELGA",     "ENEL_ELNO_ELGA","EPSI_ELNO_DEPL",
+                                     "EQUI_ELGA_EPSI","EQUI_ELGA_SIGM","EQUI_ELNO_EPSI",
+                                     "EQUI_ELNO_SIGM","PRES_DBEL_DEPL","SIEF_ELGA_DEPL",
+                                     "SIEF_ELGA_LAGR","SIGM_ELNO_CART","SIGM_ELNO_DEPL",
+                                     "SIGM_ELNO_LAGR","SIPO_ELNO_DEPL",
+                                     "FLUX_ELGA_TEMP","FLUX_ELNO_TEMP","SOUR_ELGA_ELEC",
+                                     "PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
+                                     "COOR_ELGA"), ),
+
+         b_dege_elno_depl  =BLOC(condition="OPTION=='DEGE_ELNO_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+           PLAN            =SIMP(statut='o',typ='TXM',defaut="MAIL", into=("SUP","INF","MOY","MAIL"), ),
+         ),
+
+         b_ecin_elem_depl  =BLOC(condition="OPTION=='ECIN_ELEM_DEPL'",
+           regles=(UN_PARMI('VITE','DEPL',),ENSEMBLE('DEPL','FREQ',),),
+           FREQ            =SIMP(statut='f',typ='R'),
+           VITE            =SIMP(statut='f',typ=cham_no_depl_r),
+           DEPL            =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_depl_c)),
+         ),
+
+         b_efge_elno_cart  =BLOC(condition="OPTION=='EFGE_ELNO_CART'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,) ),
+           PLAN            =SIMP(statut='o',typ='TXM',defaut="MAIL", into=("SUP","INF","MOY","MAIL"), ),
+         ),
+
+         b_efge_elno_depl  =BLOC(condition="OPTION=='EFGE_ELNO_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+           PLAN            =SIMP(statut='o',typ='TXM',defaut="MAIL", into=("SUP","INF","MOY","MAIL"), ),
+         ),
+
+         b_endo_elno_sigm  =BLOC(condition="OPTION=='ENDO_ELNO_SIGM'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,) ),
+         ),
+
+         b_epot_elem_depl  =BLOC(condition="OPTION=='EPOT_ELEM_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+         ),
+
+         b_enel_elga       =BLOC(condition="OPTION=='ENEL_ELGA'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,) ),
+         ),
+
+         b_enel_elno_elga  =BLOC(condition="OPTION=='ENEL_ELNO_ELGA'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,) ),
+         ),
+
+         b_epsi_elno_depl  =BLOC(condition="OPTION=='EPSI_ELNO_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+         ),
+
+         b_equi_elga_epsi  =BLOC(condition="OPTION=='EQUI_ELGA_EPSI'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_epsi_r,) ),
+         ),
+
+         b_equi_elga_sigm  =BLOC(condition="OPTION=='EQUI_ELGA_SIGM'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,) ),
+         ),
+
+         b_equi_elno_epsi  =BLOC(condition="OPTION=='EQUI_ELNO_EPSI'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_epsi_r,) ),
+         ),
+
+         b_equi_elno_sigm  =BLOC(condition="OPTION=='EQUI_ELNO_SIGM'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,) ),
+         ),
+
+         b_pres_dbel_depl  =BLOC(condition="OPTION=='PRES_DBEL_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_c,)),
+         ),
+
+         b_sief_elga_depl  =BLOC(condition="OPTION=='SIEF_ELGA_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+         ),
+
+         b_sief_elga_lagr  =BLOC(condition="OPTION=='SIEF_ELGA_LAGR'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+           THETA           =SIMP(statut='o',typ=(theta_geom,)),
+           PROPAGATION     =SIMP(statut='f',typ='R',defaut=0.E+0),
+         ),
+
+         b_sigm_elno_cart  =BLOC(condition="OPTION=='SIGM_ELNO_CART'",
+           CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,) ),
+         ),
+
+         b_sigm_elno_depl  =BLOC(condition="OPTION=='SIGM_ELNO_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,) ),
+         ),
+
+         b_sigm_elno_lagr  =BLOC(condition="OPTION=='SIGM_ELNO_LAGR'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+           THETA           =SIMP(statut='o',typ=(theta_geom,)),
+           PROPAGATION     =SIMP(statut='f',typ='R',defaut=0.E+0),
+         ),
+
+         b_sipo_elno_depl  =BLOC(condition="OPTION=='SIPO_ELNO_DEPL'",
+           DEPL            =SIMP(statut='o',typ=(cham_no_depl_r,)),
+         ),
+
+         b_thermique  =BLOC(condition="OPTION in ('FLUX_ELNO_TEMP','FLUX_ELGA_TEMP','SOUR_ELGA_ELEC',)",
+           TEMP            =SIMP(statut='o',typ=(cham_no_temp_r,)),
+         ),
+
+         b_acoustique  =BLOC(condition="OPTION in ('PRES_ELNO_DBEL','PRES_ELNO_REEL','PRES_ELNO_IMAG',)",
+           PRES            =SIMP(statut='o',typ=(cham_no_pres_c,)),
+         ),
+
+
+
+         EXCIT           =FACT(statut='f',min=01,max='**',
+               regles=(EXCLUS('FONC_MULT','COEF_MULT', ),),
+               CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou)),
+               FONC_MULT       =SIMP(statut='f',typ=fonction),
+               COEF_MULT       =SIMP(statut='f',typ='R'), ),
+
+         INST            =SIMP(statut='f',typ='R',defaut= 0.E+0),
+         ACCE            =SIMP(statut='f',typ=cham_no_depl_r),
+         NUME_COUCHE     =SIMP(statut='f',typ='I',defaut= 1),
+         NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY") ),
+         MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0 ),
+         ANGLE           =SIMP(statut='f',typ='I',defaut= 0),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def calc_char_cine_prod(CHAR_CINE,**args):
+  if AsType(CHAR_CINE) == char_cine_meca : return cham_no_depl_r
+  if AsType(CHAR_CINE) == char_cine_ther : return cham_no_temp_r
+  if AsType(CHAR_CINE) == char_cine_acou : return cham_no_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=calc_char_cine_prod,
+                    fr="Calcul des seconds membres associés à des charges cinématiques (conditions aux limites non dualisées)",
+                    docu="U4.61.03-e",reentrant='n',
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl ),
+         CHAR_CINE       =SIMP(statut='o',typ=(char_cine_meca,char_cine_ther,char_cine_acou ) ),
+         INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/03/2001   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def calc_char_seisme_prod(MATR_MASS,**args ):
+  if AsType(MATR_MASS) == matr_asse_depl_r : return cham_no_depl_r
+  raise AsException("type de concept resultat non prevu")
+
+CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op=  92,sd_prod=calc_char_seisme_prod,
+                      docu="U4.63.01-e",reentrant='n',
+         regles=(UN_PARMI('MONO_APPUI','MODE_STAT' ),),
+         MATR_MASS       =SIMP(statut='o',typ=matr_asse_depl_r,fr="Matrice de masse" ),
+         DIRECTION       =SIMP(statut='o',typ='R',max=06,fr="Directions du séisme imposé"),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),         
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,) ),
+         b_mode_stat     =BLOC ( condition = "MODE_STAT != None",
+           regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 04/12/2001   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+def calc_elem_prod(RESULTAT,**args):
+   if AsType(RESULTAT) != None : return AsType(RESULTAT)
+   raise AsException("type de concept resultat non prevu")
+
+CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,docu="U4.81.01-f1",reentrant='f',
+                    fr="Compléter un résultat en calculant des champs par éléments (contraintes, déformations,... )",
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                        'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+
+         LIST_ORDRE      =SIMP(statut='f',typ=listis),
+
+         OPTION          =SIMP(statut='o',typ='TXM',max='**',
+                               into=("EFGE_ELNO_DEPL","EPOT_ELEM_DEPL","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
+                                     "SIGM_ELNO_TUYO","SIGM_ELNO_CART","DEGE_ELNO_DEPL","EFGE_ELNO_CART",
+                                     "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL",
+                                     "EPME_ELNO_DEPL","EPME_ELGA_DEPL","EPMG_ELNO_DEPL","EPMG_ELGA_DEPL",
+                                     "EPSP_ELNO","EPSP_ELGA","ECIN_ELEM_DEPL","SIPO_ELNO_DEPL",
+                                     "EPGR_ELNO","EPGR_ELGA","DURT_ELGA_META","DURT_ELNO_META",
+                                     "SIGM_ELNO_COQU","SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",
+                                     "SIGM_NOZ1_ELGA","ERRE_ELEM_NOZ1","SIGM_NOZ2_ELGA","ERRE_ELEM_NOZ2",
+                                     "VNOR_ELEM_DEPL","SIRE_ELNO_DEPL","ERRE_ELGA_NORE","ERRE_ELNO_ELGA",
+                                     "VARI_ELNO_ELGA","VARI_ELNO_TUYO","EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
+                                     "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
+                                     "DCHA_ELNO_SIGM","DCHA_ELGA_SIGM","RADI_ELNO_SIGM","RADI_ELGA_SIGM",
+                                     "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","ENEL_ELGA","ENEL_ELNO_ELGA","SIEF_ELNO_ELGA",
+                                     "DEUL_ELGA_TEMP","DETE_ELNO_DLTE","DEUL_ELGA_DEPL","DEDE_ELNO_DLDE",
+                                     "DESI_ELNO_DLSI","PMPB_ELNO_SIEF","PMPB_ELGA_SIEF",
+                                     "FLUX_ELGA_TEMP","FLUX_ELNO_TEMP","HYDR_ELNO_ELGA",
+                                     "SOUR_ELGA_ELEC",
+                                     "PRES_ELNO_DBEL","PRES_DBEL_DEPL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
+                                     "INTE_ELNO_ACTI","INTE_ELNO_REAC","ERTH_ELEM_TEMP","ERTH_ELNO_ELEM"
+                                     ) ),
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,mode_meca,
+                                    mode_stat,mode_stat_depl,mode_stat_acce,mode_stat_forc,
+                                    evol_noli,mult_elas,fourier_elas,
+                                               evol_ther,base_modale,
+                                               acou_harmo,mode_acou,mode_flamb) ),
+         EXCIT           =FACT(statut='f',min=1,max='**',
+             regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+             CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),
+             FONC_MULT       =SIMP(statut='f',typ=fonction),
+             FONC_MULT_C     =SIMP(statut='f',typ=fonction_c),
+             COEF_MULT       =SIMP(statut='f',typ='R'),
+             COEF_MULT_C     =SIMP(statut='f',typ='C'),
+             PHAS_DEG        =SIMP(statut='f',typ='R'),
+             PUIS_PULS       =SIMP(statut='f',typ='I'),
+             TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+         ),
+         NORME           =SIMP(statut='f',typ='TXM',defaut="VMIS",
+                               into=("VMIS","TOTAL","VMIS_CINE","TOTAL_CINE") ),
+         NUME_COUCHE     =SIMP(statut='f',typ='I',defaut= 1 ),
+         NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY") ),
+          
+         ANGLE           =SIMP(statut='f',typ='I',defaut= 0 ),
+         PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL") ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters"),
+         TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),
+         
+         TEMP_INIT       =FACT(statut='f',min=1,max='**',
+             regles=(EXCLUS('META_INIT','EVOL_THER'),),
+             META_INIT       =SIMP(statut='f',typ=carte_meta_r),
+             EVOL_THER       =SIMP(statut='f',typ=evol_ther,),
+             NUME_INIT       =SIMP(statut='f',typ='I'),
+         ),
+         PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57,),         
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),                 
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=cham_elem_dommag,reentrant='n',
+                  fr="Calcul d un champ de dommage subi par une structure",
+                  docu="U4.83.02-c",
+      regles=(PRESENT_PRESENT('DOMMAGE','MATER', ),),
+         OPTION          =SIMP(statut='o',typ='TXM',
+                               into=("DOMA_ELNO_SIGM","DOMA_ELGA_SIGM",
+                                     "DOMA_ELNO_EPSI","DOMA_ELGA_EPSI",
+                                     "DOMA_ELNO_EPME","DOMA_ELGA_EPME") ),
+         HISTOIRE        =FACT(statut='o',min=01,max=01,
+           RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,evol_noli) ),
+           EQUI_GD         =SIMP(statut='f',typ='TXM',defaut="VMIS_SG",into=("VMIS_SG","INVA_2_SG") ),
+         ),
+         DOMMAGE         =SIMP(statut='o',typ='TXM',
+                               into=("WOHLER","MANSON_COFFIN","TAHERI_MANSON","TAHERI_MIXTE",) ),
+         MATER           =SIMP(statut='o',typ=(mater) ),
+         TAHERI_NAPPE    =SIMP(statut='f',typ=(fonction) ),
+         TAHERI_FONC     =SIMP(statut='f',typ=(fonction) ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 23/04/2001   AUTEUR MCOURTOI M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu,
+                    docu="U4.66.02-d",reentrant='n',
+         VITE_FLUI       =FACT(statut='o',min=01,max=01,
+                               fr="Définir la plage de vitesse fluide étudiée",
+           VITE_MIN        =SIMP(statut='o',typ='R' ),
+           VITE_MAX        =SIMP(statut='o',typ='R' ),
+           NB_POIN         =SIMP(statut='o',typ='I' ),
+         ),
+         BASE_MODALE     =FACT(statut='o',min=01,max=01,
+                               
+           regles=(UN_PARMI('AMOR_REDUIT','AMOR_UNIF'),),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           AMOR_UNIF       =SIMP(statut='f',typ='R' ),
+         ),
+         TYPE_FLUI_STRU  =SIMP(statut='o',typ=type_flui_stru ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+                               fr="Choix des informations à imprimer dans le fichier RESULTAT",
+           PARA_COUPLAGE   =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           DEFORMEE        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=fonction,
+                      docu="U4.32.01-d1",reentrant='f',
+         regles=(UN_PARMI('VALE_R','LIST_PARA'),),
+         FONCTION        =SIMP(statut='o',typ=fonction ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE_R          =SIMP(statut='f',typ='R',max='**'),
+         LIST_PARA       =SIMP(statut='f',typ=listr8 ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG","INT") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("EXCLU","CONSTANT","LINEAIRE","INTERPRE") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("EXCLU","CONSTANT","LINEAIRE","INTERPRE") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE MCOURTOI M.COURTOIS
+def calc_fonction_prod(DERIVE,EXTRACTION,INTEGRE,RMS,NOCI_SEISME,MAX,COMB,COMB_C,ENVELOPPE,SPEC_OSCI,ASSE,FFT,COMPOSE,**args):
+  if (RMS != None)        : return tabl_fonc_rms
+  if (MAX != None)        : return tabl_fonc_max
+  if (NOCI_SEISME != None): return tabl_fonc_noci
+  if (INTEGRE != None)    : return fonction
+  if (DERIVE != None)     : return fonction
+  if (COMB != None)       : return fonction
+  if (ENVELOPPE != None)  : return fonction
+  if (EXTRACTION != None) : return fonction
+  if (SPEC_OSCI != None)  : return fonction
+  if (COMB_C != None)     : return fonction_c
+  if (COMPOSE != None)    : return fonction
+  if (ASSE != None)       : return fonction
+  if (FFT != None)        : 
+     vale=FFT.get_child('FONCTION').get_valeur()
+     if (AsType(vale) == fonction )  : return fonction_c
+     if (AsType(vale) == fonction_c) : return fonction
+  raise AsException("type de concept resultat non prevu")
+
+CALC_FONCTION=OPER(nom="CALC_FONCTION",op=  91,sd_prod=calc_fonction_prod
+                    ,fr="Opérations mathématiques sur des concepts de type fonction",
+                     docu="U4.32.04-e1",reentrant='n',
+         regles=(UN_PARMI('DERIVE','INTEGRE','SPEC_OSCI','MAX','COMB','COMB_C','ENVELOPPE','RMS',
+                          'NOCI_SEISME','COMPOSE','EXTRACTION','ASSE','FFT' ),),
+         FFT             =FACT(statut='f',min=1,max=1,fr="Calcul de la transformee de Fourier ou de son inverse",
+           FONCTION        =SIMP(statut='o',typ=(fonction,fonction_c) )
+         ),
+         DERIVE          =FACT(statut='f',min=1,max=1,fr="Calcul de la dérivée d une fonction",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="DIFF_CENTREE",into=("DIFF_CENTREE",) ),
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+         ),
+         INTEGRE         =FACT(statut='f',min=1,max=1,fr="Calcul de l intégrale d une fonction",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+           FONCTION        =SIMP(statut='o',typ=fonction),
+           COEF            =SIMP(statut='f',typ='R',defaut= 0.E+0,fr="Valeur de la constante d intégration" ),
+         ),
+         RMS             =FACT(statut='f',min=1,max=1,fr="Calcul de la valeur RMS d une fonction",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           INST_INIT       =SIMP(statut='f',typ='R',fr="Instant initial définissant le début du signal" ),
+           INST_FIN        =SIMP(statut='f',typ='R',fr="Instant final définissant la fin du signal" ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+         ),
+         NOCI_SEISME     =FACT(statut='f',min=1,max=1,
+           FONCTION        =SIMP(statut='f',typ=fonction ),
+           SPEC_OSCI       =SIMP(statut='f',typ=fonction ),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",max='**',
+                                 into=("INTE_ARIAS","POUV_DEST","INTE_SPEC","VITE_ABSO_CUMU",
+                                       "DUREE_PHAS_FORT","MAXI","ACCE_SUR_VITE","TOUT",) ),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           NATURE          =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE") ),
+           COEF            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           PESANTEUR       =SIMP(statut='f',typ='R',defaut= 9.81E+0 ),
+           FREQ_INIT       =SIMP(statut='f',typ='R',defaut= 4.E-1 ),
+           FREQ_FIN        =SIMP(statut='f',typ='R',defaut= 10.E+0 ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           NORME           =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+           BORNE_INF       =SIMP(statut='f',typ='R',defaut= 0.05E+0 ),
+           BORNE_SUP       =SIMP(statut='f',typ='R',defaut= 0.95E+0 ),
+           b_acce_reel     =BLOC(condition="(INST_INIT != None)or(INST_FIN != None)or(FREQ_INIT != None)or(FREQ_FIN != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           ),
+         ),
+         SPEC_OSCI       =FACT(statut='f',min=1,max=1,fr="Calcul du spectre d oscillateur",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="NIGAM",into=("NIGAM",) ),
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           NORME           =SIMP(statut='f',typ='R',defaut= 9.81E+0,fr="Valeur de la norme du spectre d oscillateur" ),
+           NATURE          =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("DEPL","VITE","ACCE") ),
+           NATURE_FONC     =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("DEPL","VITE","ACCE") ),
+         ),
+         MAX             =FACT(statut='f',min=1,max=1,fr="Calcul des extrémas locaux d une fonction",
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+         ),
+         COMB            =FACT(statut='f',min=1,max='**',fr="Calcul d une combinaison linéaire réelle de fonctions",
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           COEF            =SIMP(statut='o',typ='R',fr="Coefficient réel de la combinaison linéaire associée à la fonction" ),
+         ),
+         COMB_C          =FACT(statut='f',min=1,max='**',fr="Calcul d une combinaison linéaire complexe de fonctions",
+           regles=(UN_PARMI('COEF_R','COEF_C'),),
+           FONCTION        =SIMP(statut='o',typ=(fonction, fonction_c) ),
+           COEF_R          =SIMP(statut='f',typ='R',fr="Coefficient réel de la combinaison linéaire associée à la fonction" ),
+           COEF_C          =SIMP(statut='f',typ='C',fr="Coefficient complexe de la combinaison linéaire associée à la fonction" ),
+         ),
+         b_comb          =BLOC ( condition = " (COMB != None) or (COMB_C != None)",
+             LIST_PARA      =SIMP(statut='f',typ=listr8 ),  
+         ),
+         COMPOSE         =FACT(statut='f',min=1,max=1,fr="Calcul de la composition de deux fonctions FONC_RESU(FONC_PARA)",
+           FONC_RESU       =SIMP(statut='o',typ=fonction),
+           FONC_PARA       =SIMP(statut='o',typ=fonction),
+         ),
+         EXTRACTION      =FACT(statut='f',min=1,max=1,fr="Opération d extraction sur une fonction complexe",
+           FONCTION        =SIMP(statut='o',typ=fonction_c),
+           PARTIE          =SIMP(statut='o',typ='TXM',into=("REEL","IMAG","MODULE","PHASE"),fr="Partie à extraire"),
+         ),
+         ENVELOPPE       =FACT(statut='f',min=1,max=1,fr="Calcul de l enveloppe d une famille de fonctions",
+           FONCTION        =SIMP(statut='o',typ=fonction,max='**' ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="SUP",into=("SUP","INF"),fr="Type de l enveloppe" ),
+         ),
+         ASSE            =FACT(statut='f',min=1,max=1,fr="Création à partir de la concatenation de fonctions",
+           FONCTION        =SIMP(statut='o',typ=fonction,max='**' ),
+           SURCHARGE       =SIMP(statut='f',typ='TXM',defaut="DROITE",into=("DROITE","GAUCHE")),
+         ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                                          "INST","X","Y","Z","EPSI","FREQ","PULS",
+                                                          "AMOR","ABSC") ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                                          "INST","X","Y","Z","EPSI","FREQ","PULS",
+                                                          "AMOR","ABSC") ),
+         INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
+                   fr="calcul de la force ajoutee ",
+                   docu="U4.66.03-a",reentrant ='n',
+
+        regles=(EXCLUS('MODE_MECA','MODELE_GENE'),
+                PRESENT_PRESENT( 'MODELE_GENE','NUME_DDL_GENE'),
+                UN_PARMI('MONO_APPUI', 'NOEUD','GROUP_NO'),
+                UN_PARMI('MONO_APPUI','MODE_STAT')),
+
+         MODELE_FLUIDE   =SIMP(statut='o',typ=modele ),
+         MODELE_INTERFACE=SIMP(statut='o',typ=modele ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CHARGE          =SIMP(statut='o',typ=char_ther ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         NUME_DDL_GENE   =SIMP(statut='f',typ=nume_ddl_gene ),
+         DIST_REFE       =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+         AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         NUME_MODE_MECA  =SIMP(statut='f',typ='I',max='**'),
+         POTENTIEL       =SIMP(statut='f',typ=evol_ther ),
+         NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+
+         DIRECTION       =SIMP(statut='o',typ='R',max=3),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",),),
+         NOEUD           =SIMP(statut='f',typ=no,max='**'),
+         GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,),),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    = BLOC ( condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC( condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult     =BLOC( condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non iversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC (condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut=0),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0),  ),
+
+           ) ;
+#& MODIF COMMANDE  DATE 12/09/2001   AUTEUR MCOURTOI M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_G_LOCAL_T=OPER(nom="CALC_G_LOCAL_T",op=77,sd_prod=tabl_calc_g_loca,
+                    fr="Calcul du taux de restitution local d énergie",docu="U4.82.04-e1",reentrant='n',
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         FOND            =SIMP(statut='o',typ=fond_fiss),
+         regles=(UN_PARMI('RESULTAT','DEPL'),
+                 UN_PARMI('R_INF','R_INF_FO'),
+                 PRESENT_PRESENT('R_INF','R_SUP'),
+                 PRESENT_PRESENT('R_INF_FO','R_SUP_FO'), ),
+                         
+         DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+         RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_noli),),
+         b_extrac        =BLOC(condition="RESULTAT != None",fr="extraction d un champ",
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis),
+             INST            =SIMP(statut='f',typ='R',max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8),
+             
+             b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
+               PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+         ),
+         CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
+         SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS") ),
+         COMP_ELAS       =FACT(statut='f',min=01,max=01,
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC") ),
+               ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_LINE  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_TRAC  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","GREEN") ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         COMP_INCR       =FACT(statut='f',min=01,max=01,
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE") ),
+               ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               VMIS_ISOT_TRAC  =SIMP(statut='f',typ='I',defaut=2,into=(2,) ),
+               VMIS_ISOT_LINE  =SIMP(statut='f',typ='I',defaut=2,into=(2,) ),
+               VMIS_CINE_LINE  =SIMP(statut='f',typ='I',defaut=7,into=(7,) ),
+               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC") ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           SIGM            =SIMP(statut='f',typ=cham_elem_sief_r),
+           DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+         ),
+
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="CALC_G",
+                               into=("CALC_G","CALC_G_LGLO","G_BILINEAIRE","CALC_G_MAX") ),
+         b_g             =BLOC(condition="OPTION=='CALC_G'",
+           LISSAGE_THETA   =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE") ),
+           LISSAGE_G       =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE","LAGRANGE_NO_NO",) ),
+         ), 
+         b_g_lglo        =BLOC(condition="OPTION=='CALC_G_LGLO'",
+           PROPAGATION     =SIMP(statut='o',typ='R'),
+           THETA           =SIMP(statut='o',typ=theta_geom),
+           DIRE_THETA      =SIMP(statut='f',typ=cham_no_depl_r),
+           LISSAGE_THETA   =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE") ),
+           LISSAGE_G       =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE","LAGRANGE_NO_NO",) ),
+         ), 
+         b_g_bilin       =BLOC(condition="OPTION=='G_BILINEAIRE'",
+           LISSAGE_THETA   =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE") ),
+           LISSAGE_G       =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE") ),
+         ), 
+         b_calc_g_max    =BLOC(condition="OPTION=='CALC_G_MAX'",
+           BORNES          =FACT(statut='o',min=01,max='**',
+              NUME_ORDRE     =SIMP(statut='o',typ='I'),
+              VALE_MIN       =SIMP(statut='o',typ='R'),
+              VALE_MAX       =SIMP(statut='o',typ='R'),
+                                ),
+           LISSAGE_THETA   =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE") ),
+           LISSAGE_G       =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE") ),
+         ),
+           
+         DEGRE           =SIMP(statut='f',typ='I',defaut=5,into=(0,1,2,3,4,5,6,7) ),
+
+         R_INF           =SIMP(statut='f',typ='R'),
+         R_SUP           =SIMP(statut='f',typ='R'),
+         R_INF_FO        =SIMP(statut='f',typ=fonction),
+         R_SUP_FO        =SIMP(statut='f',typ=fonction),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 12/09/2001   AUTEUR MCOURTOI M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_G_THETA_T=OPER(nom="CALC_G_THETA_T",op=53,sd_prod=tabl_calc_g_th,
+                    fr="Calcul du taux de restitution d énergie par la méthode theta en thermo-élasticité en 2D ou en 3D",
+                    docu="U4.82.03-e1",reentrant='n',
+         regles=(UN_PARMI('RESULTAT','DEPL'),
+                 EXCLUS('COMP_ELAS','COMP_INCR'),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         THETA           =SIMP(statut='o',typ=theta_geom),
+         DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+         RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_noli),),
+
+         b_extrac        =BLOC(condition="RESULTAT != None",fr="extraction d un champ",
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+            
+           b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           ),
+         ),
+
+         CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
+         SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS") ),
+         COMP_ELAS       =FACT(statut='f',min=01,max=01,
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC") ),
+               ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_LINE  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_TRAC  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","GREEN") ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),  
+         COMP_INCR       =FACT(statut='f',min=01,max=01,
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE") ),
+               ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+               VMIS_ISOT_TRAC  =SIMP(statut='f',typ='I',defaut=2,into=(2,) ),
+               VMIS_ISOT_LINE  =SIMP(statut='f',typ='I',defaut=2,into=(2,) ),
+               VMIS_CINE_LINE  =SIMP(statut='f',typ='I',defaut=7,into=(7,) ),
+               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC") ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           SIGM            =SIMP(statut='f',typ=cham_elem_sief_r),
+           DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="CALC_G",
+                               into=("CALC_G","CALC_G_LAGR","CALC_K_G","G_BILINEAIRE","CALC_G_MAX","CALC_DG",) ),
+         b_calc_g_max    =BLOC(condition="OPTION=='CALC_G_MAX'",
+           BORNES          =FACT(statut='o',min=01,max='**',
+                NUME_ORDRE     =SIMP(statut='o',typ='I'),
+                VALE_MIN       =SIMP(statut='o',typ='R'),
+                VALE_MAX       =SIMP(statut='o',typ='R'),
+                                ),
+         ),
+         b_calc_k_g      =BLOC(condition="OPTION=='CALC_K_G'",
+           FOND            =SIMP(statut='o',typ=fond_fiss),
+         ),
+         b_calc_g_lagr   =BLOC(condition="OPTION=='CALC_G_LAGR'",
+           PROPAGATION     =SIMP(statut='o',typ='R'),
+         ),
+         b_calc_dg       =BLOC(condition="OPTION=='CALC_DG'",
+           SENSIBILITE     =FACT(statut='f',min=01,max=01,
+                 THETA          =SIMP(statut='o',typ=theta_geom ),
+                               ),  
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=tabl_intsp,
+                    fr="Calcul d une matrice interspectrale d une fonction du temps",
+                    docu="U4.36.03-e",reentrant='n',
+         INST_INIT       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         INST_FIN        =SIMP(statut='o',typ='R' ),
+         DUREE_ANALYSE   =SIMP(statut='f',typ='R' ),
+         DUREE_DECALAGE  =SIMP(statut='f',typ='R' ),
+         NB_POIN         =SIMP(statut='o',typ='I' ),
+         FONCTION        =SIMP(statut='o',typ=fonction,max='**' ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
+                    fr="Calcul des matrices de masse, d amortissement ou de raideur ajoutées",
+                    docu="U4.66.01-c",reentrant='n',
+         regles=(EXCLUS('MODE_MECA','CHAM_NO','MODELE_GENE'),
+                 PRESENT_ABSENT('NUME_DDL_GENE','CHAM_NO'),
+                 PRESENT_PRESENT('MODELE_GENE','NUME_DDL_GENE'),),
+         MODELE_FLUIDE   =SIMP(statut='o',typ=modele ),
+         MODELE_INTERFACE=SIMP(statut='o',typ=modele ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CHARGE          =SIMP(statut='o',typ=char_ther ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         CHAM_NO         =SIMP(statut='f',typ=cham_no_depl_r ),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         NUME_DDL_GENE   =SIMP(statut='f',typ=nume_ddl_gene ),
+         DIST_REFE       =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+         AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         NUME_MODE_MECA  =SIMP(statut='f',typ='I',max='**'),
+         OPTION          =SIMP(statut='o',typ='TXM',into=("MASS_AJOU","AMOR_AJOU","RIGI_AJOU") ),
+         POTENTIEL       =SIMP(statut='f',typ=evol_ther ),
+         NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    = BLOC ( condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC( condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult     =BLOC( condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non iversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC (condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut=0),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 11/12/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def calc_matr_elem_prod(OPTION,**args):
+  if OPTION == "RIGI_MECA"        : return matr_elem_depl_r
+  if OPTION == "RIGI_FLUI_STRU"   : return matr_elem_depl_r
+  if OPTION == "RIGI_MECA_LAGR"   : return matr_elem_depl_r
+  if OPTION == "MASS_ID_MDEP_R"   : return matr_elem_depl_r
+  if OPTION == "MASS_ID_MDNS_R"   : return matr_elem_depl_r
+  if OPTION == "MASS_ID_MTEM_R"   : return matr_elem_temp_r
+  if OPTION == "MASS_ID_MTNS_R"   : return matr_elem_temp_r
+  if OPTION == "MASS_MECA"        : return matr_elem_depl_r
+  if OPTION == "MASS_FLUI_STRU"   : return matr_elem_depl_r
+  if OPTION == "RIGI_GEOM"        : return matr_elem_depl_r
+  if OPTION == "RIGI_ROTA"        : return matr_elem_depl_r
+  if OPTION == "AMOR_MECA"        : return matr_elem_depl_r
+  if OPTION == "IMPE_MECA"        : return matr_elem_depl_r
+  if OPTION == "ONDE_FLUI"        : return matr_elem_depl_r
+  if OPTION == "RIGI_MECA_HYST"   : return matr_elem_depl_c
+  if OPTION == "RIGI_THER"        : return matr_elem_temp_r
+  if OPTION == "MASS_THER"        : return matr_elem_temp_r
+  if OPTION == "MASS_MECA_DIAG"   : return matr_elem_depl_r
+  if OPTION == "RIGI_ACOU"        : return matr_elem_pres_c
+  if OPTION == "MASS_ACOU"        : return matr_elem_pres_c
+  if OPTION == "AMOR_ACOU"        : return matr_elem_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
+                    ,fr="Calcul des matrices élémentaires",docu="U4.61.01-f",reentrant='n',
+         OPTION          =SIMP(statut='o',typ='TXM',
+                               into=("RIGI_MECA","MASS_MECA","RIGI_GEOM",
+                                     "AMOR_MECA","RIGI_THER","MASS_THER","IMPE_MECA",
+                                     "ONDE_FLUI","MASS_FLUI_STRU","RIGI_FLUI_STRU",
+                                     "RIGI_ROTA","MASS_MECA_DIAG","RIGI_ACOU",
+                                     "MASS_ID_MDEP_R","MASS_ID_MDNS_R","MASS_ID_MTEM_R","MASS_ID_MTNS_R",
+                                     "MASS_ACOU","AMOR_ACOU","RIGI_MECA_HYST",
+                                     "RIGI_MECA_LAGR") ),
+
+         b_rigi_meca = BLOC( condition = "OPTION=='RIGI_MECA'",
+           regles=(AU_MOINS_UN('MODELE','CHARGE' ),),
+           MODELE          =SIMP(statut='f',typ=modele ),
+           b_modele        =BLOC(condition = "MODELE != None",
+             CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+             CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+             MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**' ),
+           b_charge        =BLOC (condition = "CHARGE != None",
+             INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+         ),
+
+         b_rigi_meca_lagr  =BLOC(condition = "OPTION=='RIGI_MECA_LAGR'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='f',typ=char_meca,max='**'  ),
+           b_charge        =BLOC(condition = "CHARGE != None",
+             INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           THETA           =SIMP(statut='o',typ=theta_geom ),
+           PROPAGATION     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+
+         b_mass_meca       =BLOC(condition = "(OPTION=='MASS_MECA') or (OPTION=='MASS_MECA_DIAG')",
+           regles=(AU_MOINS_UN('MODELE','CHARGE'),),
+           MODELE          =SIMP(statut='f',typ=modele ),
+           b_modele          =BLOC(condition = "MODELE != None",
+             CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
+             CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           ),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**' ),
+           b_charge        =BLOC(condition = "CHARGE != None",
+             INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+         ),
+
+         b_mass_identite   =BLOC(condition = "(OPTION in ('MASS_ID_MDEP_R','MASS_ID_MTEM_R','MASS_ID_MDNS_R','MASS_ID_MTNS_R')) ",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           # j'ajoute ces 2 mot clés inutiles à cause de l'alarme pas assez subtile de MEDOME
+           CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+         ),
+
+         b_rigi_geom       =BLOC(condition = "OPTION=='RIGI_GEOM'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           SIEF_ELGA         =SIMP(statut='o',typ=cham_elem_sief_r ),
+           MODE_FOURIER      =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+
+         b_rigi_rota       =BLOC(condition = "OPTION=='RIGI_ROTA'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='o',typ=char_meca,max='**' ),
+           INST              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+
+         b_amor_meca       =BLOC(condition = "OPTION=='AMOR_MECA'",
+           regles=(AU_MOINS_UN('CARA_ELEM','RIGI_MECA'),
+                   ENSEMBLE('RIGI_MECA','MASS_MECA','CHAM_MATER'), ),
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
+           RIGI_MECA         =SIMP(statut='f',typ=matr_elem_depl_r ),
+           MASS_MECA         =SIMP(statut='f',typ=matr_elem_depl_r ),
+           CHARGE            =SIMP(statut='f',typ=char_meca,max='**' ),
+         ),
+
+         b_rigi_meca_hyst  =BLOC( condition = "OPTION=='RIGI_MECA_HYST'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHARGE            =SIMP(statut='o',typ=char_meca ,max='**' ),
+           CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           RIGI_MECA         =SIMP(statut='o',typ=matr_elem_depl_r ),
+         ),
+
+         b_rigi_ther       =BLOC(condition = "OPTION=='RIGI_THER'",
+           regles=(AU_MOINS_UN('MODELE','CHARGE' ),),
+           MODELE            =SIMP(statut='f',typ=modele ),
+           b_modele          =BLOC(condition = "MODELE != None",
+             CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+             CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+             MODE_FOURIER      =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           CHARGE            =SIMP(statut='f',typ=char_ther,max='**' ),
+         ),
+
+         b_mass_ther       =BLOC(condition = "OPTION=='MASS_THER'",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+         ),
+
+         b_rigi_acou       =BLOC(condition = "(OPTION=='RIGI_ACOU') or (OPTION=='MASS_ACOU') or (OPTION=='AMOR_ACOU')",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='f',typ=char_acou ,max='**' ),
+         ),
+
+         b_rigi_flui       =BLOC(condition = "(OPTION=='RIGI_FLUI_STRU') or (OPTION=='MASS_FLUI_STRU')",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CARA_ELEM         =SIMP(statut='o',typ=cara_elem ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='o',typ=char_meca ,max='**' ),
+           INST              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+
+         b_impe_meca       =BLOC(condition = "(OPTION=='IMPE_MECA') or (OPTION=='ONDE_FLUI')",
+           MODELE            =SIMP(statut='o',typ=modele ),
+           CHARGE            =SIMP(statut='o',typ=char_meca,max='**' ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 27/06/2001   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,docu="U4.85.01-a",reentrant='o',
+               fr="Calcule la métallurgie a partir du résultat du calcul thermique",
+         MODELE          =SIMP(statut='o',typ=modele ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         RESULTAT        =SIMP(statut='o',typ=evol_ther ),
+         ETAT_INIT       =FACT(statut='o',min=01,max=01,
+      regles=(UN_PARMI('NUME_INIT','META_INIT',),),
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther ),
+           NUME_INIT       =SIMP(statut='f',typ='I' ),  
+           META_INIT       =SIMP(statut='f',typ=carte_var2_r ),
+         ),
+         COMP_INCR       =FACT(statut='o',min=01,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',into=("ACIER","ZIRC",) ),
+           ACIER           =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+           ZIRC            =SIMP(statut='c',typ='I',defaut=3,into=(3,) ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           MAILLE          =SIMP(statut='f',typ=ma),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM'     
+                             ,into=("META_ELNO_TEMP",) ),
+)  ;
+#& MODIF COMMANDE  DATE 04/12/2001   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+def calc_no_prod(RESULTAT,**args):
+   if AsType(RESULTAT) != None : return AsType(RESULTAT)
+   raise AsException("type de concept resultat non prevu")
+
+CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,docu="U4.81.02-e1",reentrant='o',
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,acou_harmo,mode_meca,
+                                               mode_acou,mode_stat,mode_stat_depl,mode_stat_acce,
+                                              mode_stat_forc,evol_ther,evol_noli,base_modale,
+                                               mult_elas,fourier_elas,mode_flamb ) ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters"),
+
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                        'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           
+         OPTION          =SIMP(statut='o',typ='TXM',max='**',
+                               into=("FORC_NODA","REAC_NODA",
+                                     "DCHA_NOEU_SIGM",
+                                     "DEGE_NOEU_DEPL",
+                                     "DETE_NOEU_DLTE",
+                                     "DEDE_NOEU_DLDE",
+                                     "DESI_NOEU_DLSI",
+                                     "DURT_NOEU_META",
+                                     "EFGE_NOEU_CART","EFGE_NOEU_DEPL",
+                                     "ENDO_NOEU_SINO",
+                                     "ENEL_NOEU_ELGA",
+                                     "EPMG_NOEU_DEPL",
+                                     "EPSA_NOEU",
+                                     "EPSG_NOEU"     ,"EPSG_NOEU_DEPL",
+                                     "EPSI_NOEU_DEPL","EPSI_NOEU_DPGE",
+                                     "EPSP_NOEU"     ,"EPSP_NOEU_ZAC",
+                                     "EQUI_NOEU_EPME","EQUI_NOEU_EPSI","EQUI_NOEU_SIGM",
+                                     "ERRE_NOEU_ELGA",
+                                     "FLUX_NOEU_TEMP",
+                                     "GRAD_NOEU_THETA",
+                                     "HYDR_NOEU_ELGA",
+                                     "INTE_NOEU_ACTI","INTE_NOEU_REAC",
+                                     "META_NOEU_TEMP",
+                                     "PMPB_NOEU_SIEF",
+                                     "PRES_NOEU_DBEL","PRES_NOEU_IMAG","PRES_NOEU_REEL",
+                                     "RADI_NOEU_SIGM",
+                                     "SIEF_NOEU"     ,"SIEF_NOEU_ELGA",
+                                     "SIGM_NOEU_CART","SIGM_NOEU_COQU","SIGM_NOEU_DEPL","SIGM_NOEU_DPGE",
+                                     "SIGM_NOEU_SIEF","SIGM_NOEU_VARI","SIGM_NOEU_ZAC",
+                                     "SIPO_NOEU_DEPL","SIPO_NOEU_SIEF",
+                                     "SIRE_NOEU_DEPL",
+                                     "VARI_NOEU"     ,"VARI_NOEU_ELGA",) ),
+         
+         b_forc_reac     =BLOC(condition = """(OPTION == 'FORC_NODA') or (type(OPTION) == type(()) and 'FORC_NODA' in OPTION) or\
+ (OPTION == 'REAC_NODA') or (type(OPTION) == type(()) and 'REAC_NODA' in OPTION)""",
+             MODELE          =SIMP(statut='o',typ=modele),
+         ),
+
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='f',min=1,max='**',
+           CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou) ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE","FIXE_PILO","SUIV") ),
+         ),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         TAILLE_BLOC     =SIMP(statut='f',typ='R' ,defaut= 400. ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,docu="U4.82.02-d",reentrant='n',
+                fr="Affectation d un champ sur le maillage (mécanique de la rupture)",
+         regles=(UN_PARMI('THETA_2D','THETA_3D','THETA_BANDE'),
+                 PRESENT_PRESENT('THETA_3D','FOND_3D'),
+                 PRESENT_ABSENT('THETA_2D','DIRE_THETA'),
+                 EXCLUS('DIRECTION','DIRE_THETA'),),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="COURONNE",into=("COURONNE","BANDE") ),
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         FOND_3D         =SIMP(statut='f',typ=(fond_fiss) ),
+         THETA_3D        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   UN_PARMI('MODULE','MODULE_FO'),
+                   ENSEMBLE('MODULE','R_INF','R_SUP'),
+                   ENSEMBLE('MODULE_FO','R_INF_FO','R_SUP_FO'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           MODULE          =SIMP(statut='f',typ='R'),
+           R_INF           =SIMP(statut='f',typ='R'),
+           R_SUP           =SIMP(statut='f',typ='R'),
+           MODULE_FO       =SIMP(statut='f',typ=fonction),
+           R_INF_FO        =SIMP(statut='f',typ=fonction),
+           R_SUP_FO        =SIMP(statut='f',typ=fonction),
+                         ),
+         DIRE_THETA      =SIMP(statut='f',typ=(cham_no_depl_r) ),
+         DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+         THETA_2D        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           MODULE          =SIMP(statut='o',typ='R'),
+           R_INF           =SIMP(statut='o',typ='R'),
+           R_SUP           =SIMP(statut='o',typ='R'),
+         ),
+         THETA_BANDE     =FACT(statut='f',min=01,max='**',
+           MODULE          =SIMP(statut='o',typ='R'),
+           R_INF           =SIMP(statut='o',typ='R'),
+           R_SUP           =SIMP(statut='o',typ='R'),
+         ),
+         GRAD_NOEU_THETA =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT",into=("RESULTAT",) ),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="EXCEL",into=("EXCEL","AGRAF") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def calc_vect_elem_prod(OPTION,**args):
+  if OPTION == "CHAR_MECA" :      return vect_elem_depl_r
+  if OPTION == "CHAR_MECA_LAGR" : return vect_elem_depl_r
+  if OPTION == "CHAR_THER" :      return vect_elem_temp_r
+  if OPTION == "CHAR_ACOU" :      return vect_elem_pres_c
+  if OPTION == "FORC_NODA" :      return vect_elem_depl_r
+  raise AsException("type de concept resultat non prevu")
+
+CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,docu="U4.61.02-f",reentrant='n',
+                    fr="Calcul des seconds membres élémentaires",
+         OPTION          =SIMP(statut='o',typ='TXM',into=("CHAR_MECA","CHAR_THER","CHAR_ACOU",
+                                                           "FORC_NODA","CHAR_MECA_LAGR") ),
+         b_char_meca     =BLOC(condition = "OPTION=='CHAR_MECA'",
+           regles=(AU_MOINS_UN('CHARGE','MODELE'),),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
+           MODELE          =SIMP(statut='f',typ=modele),
+           b_charge     =BLOC(condition = "CHARGE != None", fr="modèle ne contenant pas de sous-structure",
+              CHAM_MATER   =SIMP(statut='f',typ=cham_mater),
+              CARA_ELEM    =SIMP(statut='f',typ=cara_elem),
+              INST         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+              MODE_FOURIER =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),  
+           b_modele     =BLOC(condition = "(MODELE != None)",fr="modèle contenant une sous-structure",
+              SOUS_STRUC      =FACT(statut='o',min=01,
+                regles=(UN_PARMI('TOUT','MAILLE'),),
+                CAS_CHARGE  =SIMP(statut='o',typ='TXM' ),
+                TOUT        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                MAILLE      =SIMP(statut='f',typ=ma,max='**',),
+              ),
+           ),
+         ),
+         b_char_ther     =BLOC(condition = "OPTION=='CHAR_THER'",
+           CARA_ELEM        =SIMP(statut='f',typ=cara_elem),
+           CHARGE           =SIMP(statut='o',typ=char_ther,max='**'),
+           INST             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+              
+         b_char_acou     =BLOC(condition = "OPTION=='CHAR_ACOU'",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater),
+           CHARGE            =SIMP(statut='o',typ=char_acou,max='**'),
+         ),
+         
+         b_forc_noda     =BLOC(condition = "OPTION=='FORC_NODA'",
+           SIEF_ELGA         =SIMP(statut='o',typ=cham_elem_sief_r),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem),
+           MODELE            =SIMP(statut='f',typ=modele),
+         ),
+         
+         b_meca_lagr     =BLOC(condition = "OPTION=='CHAR_MECA_LAGR'",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater),
+           THETA             =SIMP(statut='o',typ=theta_geom),
+           PROPAGATION       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           CHARGE            =SIMP(statut='f',typ=char_meca,max='**'),
+           INST              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+) ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+def comb_cham_elem_prod(COMB_R=None,COMB_C=None,COMB_FOURIER=None,**args):
+
+  if COMB_R != None:
+    vale=COMB_R.get_child('CHAM_ELEM').get_valeur()
+  elif COMB_C != None:
+    vale=COMB_C.get_child('CHAM_ELEM').get_valeur()
+  elif COMB_FOURIER != None:
+    vale=COMB_FOURIER.get_child('CHAM_ELEM').get_valeur()
+  else :
+    raise AsException("type de concept resultat non prevu")
+
+  if AsType(vale) == cham_elem_sief_r : return cham_elem_sief_r
+  if AsType(vale) == cham_elem_flux_r : return cham_elem_flux_r
+  if AsType(vale) == cham_elem_epsi_r : return cham_elem_epsi_r
+  if AsType(vale) == cham_elem_ener_r : return cham_elem_ener_r
+  if AsType(vale) == cham_elem_crit_r : return cham_elem_crit_r
+  if AsType(vale) == cham_elem_dbel_r : return cham_elem_dbel_r
+  if AsType(vale) == cham_elem_pres_r : return cham_elem_pres_r
+  if AsType(vale) == cham_elem_sief_c : return cham_elem_sief_c
+  raise AsException("type de concept resultat non prevu")
+
+COMB_CHAM_ELEM=OPER(nom="COMB_CHAM_ELEM",op= 139,sd_prod=comb_cham_elem_prod,reentrant='f',
+                    fr="Combinaison linéaire de champs par éléments",docu="U4.72.03-e",
+      regles=(UN_PARMI('COMB_R','COMB_C','COMB_FOURIER'),
+              PRESENT_PRESENT('COMB_FOURIER','ANGL'),),
+      COMB_R          =FACT(statut='f',min=01,max='**',
+        PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
+        COEF_R          =SIMP(statut='o',typ='R'),
+        CHAM_ELEM       =SIMP(statut='o',
+                              typ=(cham_elem_sief_r,cham_elem_flux_r,cham_elem_epsi_r,
+                                   cham_elem_ener_r,cham_elem_crit_r,cham_elem_dbel_r,
+                                   cham_elem_pres_r,cham_elem_sief_c ) ),
+      ),
+      COMB_C          =FACT(statut='f',min=01,max='**',
+        regles=(UN_PARMI('COEF_R','COEF_C', ),),
+        COEF_R          =SIMP(statut='f',typ='R'),
+        COEF_C          =SIMP(statut='f',typ='C'),
+        CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r) ),
+      ),
+      COMB_FOURIER    =FACT(statut='f',min=01,max='**',
+        COEF_R          =SIMP(statut='f',typ='R',defaut= 1.),
+        NUME_MODE       =SIMP(statut='o',typ='I'),
+        TYPE_MODE       =SIMP(statut='o',typ='TXM',into=("SYME","ANTI") ),
+        CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r,cham_elem_flux_r,cham_elem_epsi_r ) ),
+      ),
+      ANGL            =SIMP(statut='f',typ='R' ),
+)  ;
+
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+def comb_cham_no_prod(COMB_R,COMB_C,COMB_FOURIER,**args):
+  if COMB_C != None:
+    type_mat = AsType(COMB_C.get_child('CHAM_NO').get_valeur())
+    if type_mat in  (cham_no_depl_c,cham_no_depl_r) : return cham_no_depl_c
+    if type_mat in  (cham_no_temp_c,cham_no_temp_r) : return cham_no_temp_c
+    if type_mat in  (cham_no_pres_c,cham_no_pres_r) : return cham_no_pres_c
+  elif COMB_R != None:
+    type_mat = AsType(COMB_R.get_child('CHAM_NO').get_valeur())
+    if type_mat in  (cham_no_depl_c,cham_no_depl_r) : return cham_no_depl_r
+    if type_mat in  (cham_no_temp_c,cham_no_temp_r) : return cham_no_temp_r
+    if type_mat in  (cham_no_pres_c,cham_no_pres_r) : return cham_no_pres_r
+    if type_mat ==  matr_asse_gene_r : return matr_asse_gene_r
+  elif COMB_FOURIER != None:
+    type_mat = AsType(COMB_FOURIER.get_child('CHAM_NO').get_valeur())
+    if type_mat == cham_no_temp_r : return cham_no_temp_r
+    if type_mat == cham_no_depl_r : return cham_no_depl_r
+  raise AsException("type de concept resultat non prevu")
+
+
+COMB_CHAM_NO=OPER(nom="COMB_CHAM_NO",op=  30,sd_prod=comb_cham_no_prod
+                    ,fr="Combinaison linéaire de champs aux noeuds",
+                     docu="U4.72.02-f",reentrant='f',
+         regles=(UN_PARMI('COMB_R','COMB_C','COMB_FOURIER'),),
+         COMB_R          =FACT(statut='f',min=01,max='**',
+           PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG",) ),
+           CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_temp_c,cham_no_depl_r,cham_no_depl_c
+                                                ,cham_no_pres_r,cham_no_pres_c ) ),
+           COEF_R          =SIMP(statut='o',typ='R' ),
+         ),
+         COMB_C          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('COEF_R','COEF_C' ),),
+           CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_r,cham_no_temp_c
+                                                ,cham_no_depl_c,cham_no_pres_c ) ),
+           COEF_R          =SIMP(statut='f',typ='R' ),
+           COEF_C          =SIMP(statut='f',typ='C' ),
+         ),
+         COMB_FOURIER    =FACT(statut='f',min=01,max='**',
+           CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_depl_r) ),
+           COEF_R          =SIMP(statut='f',typ='R',defaut= 1. ),
+           NUME_MODE       =SIMP(statut='o',typ='I' ),
+           TYPE_MODE       =SIMP(statut='o',typ='TXM',into=("SYME","ANTI") ),
+         ),
+         b_angl = BLOC ( condition = "COMB_FOURIER != None",
+           ANGL            =SIMP(statut='o',typ='R' ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier,
+                  docu="U4.83.31-c",reentrant='n',
+         RESULTAT        =SIMP(statut='o',typ=fourier_elas ),
+         ANGL            =SIMP(statut='o',typ='R',max='**'),
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',max=05,
+                               into=("DEPL","REAC_NODA","SIEF_ELGA_DEPL","EPSI_ELNO_DEPL","SIGM_ELNO_DEPL") ),
+)  ;
+#& MODIF COMMANDE  DATE 10/07/2001   AUTEUR ACBHHCD G.DEVESA 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def comb_matr_asse_prod(COMB_R,COMB_C,**args):
+  if COMB_C != None:
+    type_mat = AsType(COMB_C.get_child('MATR_ASSE').get_valeur())
+    if type_mat in  (matr_asse_depl_c,matr_asse_depl_r) : return matr_asse_depl_c
+    if type_mat in  (matr_asse_gene_c,matr_asse_gene_r) : return matr_asse_gene_c    
+    if type_mat in  (matr_asse_temp_c,matr_asse_temp_r) : return matr_asse_temp_c
+    if type_mat in  (matr_asse_pres_c,matr_asse_pres_r) : return matr_asse_pres_c
+  elif COMB_R != None:
+    type_mat = AsType(COMB_R.get_child('MATR_ASSE').get_valeur())
+    if type_mat in  (matr_asse_depl_c,matr_asse_depl_r) : return matr_asse_depl_r
+    if type_mat in  (matr_asse_temp_c,matr_asse_temp_r) : return matr_asse_temp_r
+    if type_mat in  (matr_asse_pres_c,matr_asse_pres_r) : return matr_asse_pres_r
+    if type_mat in  (matr_asse_gene_c,matr_asse_gene_r) : return matr_asse_gene_r
+  raise AsException("type de concept resultat non prevu")
+
+COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op=  31,sd_prod=comb_matr_asse_prod,
+                    fr="Combinaison linéaire de matrices assemblées",
+                    docu="U4.72.01-f",reentrant='f',
+         regles=(UN_PARMI('COMB_R','COMB_C' ),),
+         COMB_R          =FACT(statut='f',min=01,max='**',
+           PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
+           MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_temp_c
+                                                ,matr_asse_pres_r,matr_asse_pres_c,matr_asse_gene_r,matr_asse_gene_c ) ),
+           COEF_R          =SIMP(statut='o',typ='R' ),
+         ),
+         COMB_C          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('COEF_R','COEF_C' ),),
+           MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_temp_c
+                                                ,matr_asse_pres_r,matr_asse_pres_c,matr_asse_gene_r,matr_asse_gene_c ) ),
+           COEF_R          =SIMP(statut='f',typ='R' ),
+           COEF_C          =SIMP(statut='f',typ='C' ),
+         ),
+         SANS_CMP        =SIMP(statut='f',typ='TXM',into=("LAGR",) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/03/2001   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
+                     fr="Réponse sismique par recombinaison modale par une méthode spectrale",
+                     docu="U4.84.01-d",reentrant='n',
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','FREQ','NUME_MODE','LIST_FREQ','LIST_ORDRE'),
+                 UN_PARMI('AMOR_REDUIT','LIST_AMOR','AMOR_GENE' ),),
+         MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+         b_freq          =BLOC(condition = "FREQ != None or LIST_FREQ != None",
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+         MODE_CORR       =SIMP(statut='f',typ=mode_stat_acce ),
+         
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         LIST_AMOR       =SIMP(statut='f',typ=listr8 ),
+         AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r ),
+         
+         MASS_INER       =SIMP(statut='f',typ=tabl_mass_iner ),
+         CORR_FREQ       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         
+         EXCIT           =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('MONO_APPUI','NOEUD','GROUP_NO'),
+                   UN_PARMI('AXE','TRI_AXE','TRI_SPEC' ),),
+           
+           MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           AXE             =SIMP(statut='f',fr="Excitation suivant un seul axe",
+                                 typ='R',max=03),  
+           TRI_AXE         =SIMP(statut='f',fr="Excitation suivant les trois axes mais avec le meme spectre",
+                                 typ='R',max=03),
+           TRI_SPEC        =SIMP(statut='f',fr="Excitation suivant les trois axes  avec trois spectres",
+                                 typ='TXM',into=("OUI",) ),
+           b_axe           =BLOC(condition = "AXE != None",fr="Excitation suivant un seul axe",
+             SPEC_OSCI       =SIMP(statut='o',typ=fonction,max=01 ),
+             ECHELLE         =SIMP(statut='f',typ='R',max=01),
+           ),
+           b_tri_axe       =BLOC(condition = "TRI_AXE != None",fr="Excitation suivant les trois axes mais avec le meme spectre",
+             SPEC_OSCI       =SIMP(statut='o',typ=fonction,max=01 ),
+             ECHELLE         =SIMP(statut='f',typ='R',max=01),
+           ),
+           b_tri_spec      =BLOC(condition = "TRI_SPEC != None",fr="Excitation suivant les trois axes  avec trois spectres",
+             SPEC_OSCI       =SIMP(statut='o',typ=fonction,min=03,max=03 ),
+             ECHELLE         =SIMP(statut='f',typ='R',min=03,max=03),
+           ),       
+           NATURE          =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("ACCE","VITE","DEPL") ),
+         ),
+         COMB_MODE       =FACT(statut='o',min=01,max=01,
+           TYPE            =SIMP(statut='o',typ='TXM',into=("SRSS","CQC","DSC","ABS","DPC") ),
+           DUREE           =SIMP(statut='f',typ='R' ),
+         ),
+         COMB_DIRECTION  =FACT(statut='f',min=01,max=01,
+           TYPE            =SIMP(statut='f',typ='TXM',into=("QUAD","NEWMARK") ),
+         ),
+         COMB_MULT_APPUI =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("QUAD","LINE","ABS") ),
+         ),
+         DEPL_MULT_APPUI =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO'),
+                   AU_MOINS_UN('DX','DY','DZ' ),),
+           MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,), ),
+           NOEUD_REFE      =SIMP(statut='f',typ=no),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           DX              =SIMP(statut='f',typ='R' ),
+           DY              =SIMP(statut='f',typ='R' ),
+           DZ              =SIMP(statut='f',typ='R' ),
+         ),
+         OPTION          =SIMP(statut='o',typ='TXM',max=9,
+                               into=("DEPL","VITE","ACCE_ABSOLU","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
+                                     "EFGE_ELNO_DEPL","REAC_NODA","FORC_NODA","EFGE_ELNO_CART",
+                                     "SIPO_ELNO_DEPL") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         IMPRESSION      =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('TOUT','NIVEAU'),),
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           NIVEAU          =SIMP(statut='f',typ='TXM',into=("SPEC_OSCI","MASS_EFFE","MAXI_GENE"),max=03 ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def crea_champ_prod(TYPE_CHAM,**args):
+  if TYPE_CHAM == "CART_DBEL_R" : return carte_dbel_r
+  if TYPE_CHAM == "CART_DEPL_C" : return carte_depl_c
+  if TYPE_CHAM == "CART_DEPL_F" : return carte_depl_f
+  if TYPE_CHAM == "CART_DEPL_R" : return carte_depl_r
+  if TYPE_CHAM == "CART_DURT_R" : return carte_durt_r
+  if TYPE_CHAM == "CART_ENER_R" : return carte_ener_r 
+  if TYPE_CHAM == "CART_EPSI_R" : return carte_epsi_r
+  if TYPE_CHAM == "CART_ERREUR" : return carte_erreur
+  if TYPE_CHAM == "CART_FLUX_R" : return carte_flux_r
+  if TYPE_CHAM == "CART_GEOM_R" : return carte_geom_r
+  if TYPE_CHAM == "CART_G_DEPL_R" : return carte_g_depl_r
+  if TYPE_CHAM == "CART_HYDR_R" : return carte_hydr_r
+  if TYPE_CHAM == "CART_INST_R" : return carte_inst_r
+  if TYPE_CHAM == "CART_INTE_R" : return carte_inte_r
+  if TYPE_CHAM == "CART_META_R" : return carte_meta_r
+  if TYPE_CHAM == "CART_NEUT_F" : return carte_neut_f
+  if TYPE_CHAM == "CART_NEUT_R" : return carte_neut_r
+  if TYPE_CHAM == "CART_PRES_R" : return carte_pres_r
+  if TYPE_CHAM == "CART_SIEF_R" : return carte_sief_r
+  if TYPE_CHAM == "CART_SOUR_R" : return carte_sour_r
+  if TYPE_CHAM == "CART_TEMP_F" : return carte_temp_f
+  if TYPE_CHAM == "CART_TEMP_R" : return carte_temp_r
+  if TYPE_CHAM == "CART_VAR2_R" : return carte_var2_r
+  if TYPE_CHAM == "CART_VNOR_C" : return carte_vnor_c
+  if TYPE_CHAM == "NOEU_DBEL_R" : return cham_no_dbel_r
+  if TYPE_CHAM == "NOEU_DEPL_C" : return cham_no_depl_c
+  if TYPE_CHAM == "NOEU_DEPL_F" : return cham_no_depl_f
+  if TYPE_CHAM == "NOEU_DEPL_R" : return cham_no_depl_r
+  if TYPE_CHAM == "NOEU_DURT_R" : return cham_no_durt_r
+  if TYPE_CHAM == "NOEU_ENER_R" : return cham_no_ener_r
+  if TYPE_CHAM == "NOEU_EPSI_R" : return cham_no_epsi_r
+  if TYPE_CHAM == "NOEU_ERREUR" : return cham_no_erreur
+  if TYPE_CHAM == "NOEU_FLUX_R" : return cham_no_flux_r
+  if TYPE_CHAM == "NOEU_GEOM_R" : return cham_no_geom_r
+  if TYPE_CHAM == "NOEU_G_DEPL_R" : return cham_no_g_depl_r
+  if TYPE_CHAM == "NOEU_HYDR_R" : return cham_no_hydr_r
+  if TYPE_CHAM == "NOEU_INST_R" : return cham_no_inst_r
+  if TYPE_CHAM == "NOEU_INTE_R" : return cham_no_inte_r
+  if TYPE_CHAM == "NOEU_META_R" : return cham_no_meta_r
+  if TYPE_CHAM == "NOEU_NEUT_F" : return cham_no_neut_f
+  if TYPE_CHAM == "NOEU_NEUT_R" : return cham_no_neut_r
+  if TYPE_CHAM == "NOEU_PRES_R" : return cham_no_pres_r
+  if TYPE_CHAM == "NOEU_SIEF_R" : return cham_no_sief_r
+  if TYPE_CHAM == "NOEU_SOUR_R" : return cham_no_sour_r
+  if TYPE_CHAM == "NOEU_TEMP_F" : return cham_no_temp_f
+  if TYPE_CHAM == "NOEU_TEMP_R" : return cham_no_temp_r
+  if TYPE_CHAM == "NOEU_VAR2_R" : return cham_no_var2_r
+  if TYPE_CHAM == "NOEU_VNOR_C" : return cham_no_vnor_c
+  if TYPE_CHAM == "ELEM_DBEL_R" : return cham_elem_dbel_r
+  if TYPE_CHAM == "ELEM_DEPL_C" : return cham_elem_depl_c
+  if TYPE_CHAM == "ELEM_DEPL_F" : return cham_elem_depl_f
+  if TYPE_CHAM == "ELEM_DEPL_R" : return cham_elem_depl_r
+  if TYPE_CHAM == "ELEM_DURT_R" : return cham_elem_durt_r
+  if TYPE_CHAM == "ELEM_ENER_R" : return cham_elem_ener_r
+  if TYPE_CHAM == "ELEM_EPSI_R" : return cham_elem_epsi_r
+  if TYPE_CHAM == "ELEM_ERREUR" : return cham_elem_erreur
+  if TYPE_CHAM == "ELEM_FLUX_R" : return cham_elem_flux_r
+  if TYPE_CHAM == "ELEM_GEOM_R" : return cham_elem_geom_r
+  if TYPE_CHAM == "ELEM_G_DEPL_R" : return cham_elem_g_depl
+  if TYPE_CHAM == "ELEM_HYDR_R" : return cham_elem_hydr_r
+  if TYPE_CHAM == "ELEM_INST_R" : return cham_elem_inst_r
+  if TYPE_CHAM == "ELEM_INTE_R" : return cham_elem_inte_r
+  if TYPE_CHAM == "ELEM_META_R" : return cham_elem_meta_r
+  if TYPE_CHAM == "ELEM_NEUT_F" : return cham_elem_neut_f
+  if TYPE_CHAM == "ELEM_NEUT_R" : return cham_elem_neut_r
+  if TYPE_CHAM == "ELEM_PRES_R" : return cham_elem_pres_r
+  if TYPE_CHAM == "ELEM_SIEF_R" : return cham_elem_sief_r
+  if TYPE_CHAM == "ELEM_SOUR_R" : return cham_elem_sour_r
+  if TYPE_CHAM == "ELEM_TEMP_F" : return cham_elem_temp_f
+  if TYPE_CHAM == "ELEM_TEMP_R" : return cham_elem_temp_r
+  if TYPE_CHAM == "ELEM_VARI_R" : return cham_elem_vari_r
+  if TYPE_CHAM == "ELEM_VNOR_C" : return cham_elem_vnor_c
+  if TYPE_CHAM == "ELNO_DBEL_R" : return cham_elem_dbel_r
+  if TYPE_CHAM == "ELNO_DEPL_C" : return cham_elem_depl_c
+  if TYPE_CHAM == "ELNO_DEPL_F" : return cham_elem_depl_f
+  if TYPE_CHAM == "ELNO_DEPL_R" : return cham_elem_depl_r
+  if TYPE_CHAM == "ELNO_DURT_R" : return cham_elem_durt_r
+  if TYPE_CHAM == "ELNO_ENER_R" : return cham_elem_ener_r
+  if TYPE_CHAM == "ELNO_EPSI_R" : return cham_elem_epsi_r
+  if TYPE_CHAM == "ELNO_ERREUR" : return cham_elem_erreur
+  if TYPE_CHAM == "ELNO_FLUX_R" : return cham_elem_flux_r
+  if TYPE_CHAM == "ELNO_GEOM_R" : return cham_elem_geom_r
+  if TYPE_CHAM == "ELNO_G_DEPL_R" : return cham_elem_g_depl
+  if TYPE_CHAM == "ELNO_HYDR_R" : return cham_elem_hydr_r
+  if TYPE_CHAM == "ELNO_INST_R" : return cham_elem_inst_r
+  if TYPE_CHAM == "ELNO_INTE_R" : return cham_elem_inte_r
+  if TYPE_CHAM == "ELNO_META_R" : return cham_elem_meta_r
+  if TYPE_CHAM == "ELNO_NEUT_F" : return cham_elem_neut_f
+  if TYPE_CHAM == "ELNO_NEUT_R" : return cham_elem_neut_r
+  if TYPE_CHAM == "ELNO_PRES_R" : return cham_elem_pres_r
+  if TYPE_CHAM == "ELNO_SIEF_R" : return cham_elem_sief_r
+  if TYPE_CHAM == "ELNO_SOUR_R" : return cham_elem_sour_r
+  if TYPE_CHAM == "ELNO_TEMP_F" : return cham_elem_temp_f
+  if TYPE_CHAM == "ELNO_TEMP_R" : return cham_elem_temp_r
+  if TYPE_CHAM == "ELNO_VARI_R" : return cham_elem_vari_r
+  if TYPE_CHAM == "ELNO_VNOR_C" : return cham_elem_vnor_c
+  if TYPE_CHAM == "ELGA_DBEL_R" : return cham_elem_dbel_r
+  if TYPE_CHAM == "ELGA_DEPL_C" : return cham_elem_depl_c
+  if TYPE_CHAM == "ELGA_DEPL_F" : return cham_elem_depl_f
+  if TYPE_CHAM == "ELGA_DEPL_R" : return cham_elem_depl_r
+  if TYPE_CHAM == "ELGA_DURT_R" : return cham_elem_durt_r
+  if TYPE_CHAM == "ELGA_ENER_R" : return cham_elem_ener_r
+  if TYPE_CHAM == "ELGA_EPSI_R" : return cham_elem_epsi_r
+  if TYPE_CHAM == "ELGA_ERREUR" : return cham_elem_erreur
+  if TYPE_CHAM == "ELGA_FLUX_R" : return cham_elem_flux_r
+  if TYPE_CHAM == "ELGA_GEOM_R" : return cham_elem_geom_r
+  if TYPE_CHAM == "ELGA_G_DEPL_R" : return cham_elem_g_depl
+  if TYPE_CHAM == "ELGA_HYDR_R" : return cham_elem_hydr_r
+  if TYPE_CHAM == "ELGA_INST_R" : return cham_elem_inst_r
+  if TYPE_CHAM == "ELGA_INTE_R" : return cham_elem_inte_r
+  if TYPE_CHAM == "ELGA_META_R" : return cham_elem_meta_r
+  if TYPE_CHAM == "ELGA_NEUT_F" : return cham_elem_neut_f
+  if TYPE_CHAM == "ELGA_NEUT_R" : return cham_elem_neut_r
+  if TYPE_CHAM == "ELGA_PRES_R" : return cham_elem_pres_r
+  if TYPE_CHAM == "ELGA_SIEF_R" : return cham_elem_sief_r
+  if TYPE_CHAM == "ELGA_SOUR_R" : return cham_elem_sour_r
+  if TYPE_CHAM == "ELGA_TEMP_F" : return cham_elem_temp_f
+  if TYPE_CHAM == "ELGA_TEMP_R" : return cham_elem_temp_r
+  if TYPE_CHAM == "ELGA_VARI_R" : return cham_elem_vari_r
+  if TYPE_CHAM == "ELGA_VNOR_C" : return cham_elem_vnor_c
+  if TYPE_CHAM == "CART_IRRA_R" : return carte_irra_r
+  if TYPE_CHAM == "NOEU_IRRA_R" : return cham_no_irra_r
+  if TYPE_CHAM == "ELEM_IRRA_R" : return cham_elem_irra_r
+  if TYPE_CHAM == "ELNO_IRRA_R" : return cham_elem_irra_r
+  if TYPE_CHAM == "ELGA_IRRA_R" : return cham_elem_irra_r
+  raise AsException("type de concept resultat non prevu")
+
+CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
+                fr="  ",docu="U4.72.04-a1",reentrant='n',
+         TYPE_CHAM       =SIMP(statut='o',typ='TXM',     
+                        into=("CART_DBEL_R","NOEU_DBEL_R","ELEM_DBEL_R",  
+                             "ELNO_DBEL_R","ELGA_DBEL_R","CART_DEPL_C",         
+                             "NOEU_DEPL_C","ELEM_DEPL_C","ELNO_DEPL_C",         
+                             "ELGA_DEPL_C","CART_DEPL_F","NOEU_DEPL_F",         
+                             "ELEM_DEPL_F","ELNO_DEPL_F","ELGA_DEPL_F",         
+                             "CART_DEPL_R","NOEU_DEPL_R","ELEM_DEPL_R",         
+                             "ELNO_DEPL_R","ELGA_DEPL_R","CART_DURT_R",         
+                             "NOEU_DURT_R","ELEM_DURT_R","ELNO_DURT_R",         
+                             "ELGA_DURT_R","CART_ENER_R","NOEU_ENER_R",         
+                             "ELEM_ENER_R","ELNO_ENER_R","ELGA_ENER_R",         
+                             "CART_EPSI_R","NOEU_EPSI_R","ELEM_EPSI_R",         
+                             "ELNO_EPSI_R","ELGA_EPSI_R","CART_ERREUR",         
+                             "NOEU_ERREUR","ELEM_ERREUR","ELNO_ERREUR",         
+                             "ELGA_ERREUR","CART_FLUX_R","NOEU_FLUX_R",         
+                             "ELEM_FLUX_R","ELNO_FLUX_R","ELGA_FLUX_R",         
+                             "CART_GEOM_R","NOEU_GEOM_R","ELEM_GEOM_R",         
+                             "ELNO_GEOM_R","ELGA_GEOM_R","CART_G_DEPL_R",       
+                             "NOEU_G_DEPL_R","ELEM_G_DEPL_R","ELNO_G_DEPL_R",   
+                             "ELGA_G_DEPL_R","CART_HYDR_R","NOEU_HYDR_R",       
+                             "ELEM_HYDR_R","ELNO_HYDR_R","ELGA_HYDR_R",         
+                             "CART_INST_R","NOEU_INST_R","ELEM_INST_R",         
+                             "ELNO_INST_R","ELGA_INST_R","CART_INTE_R",         
+                             "NOEU_INTE_R","ELEM_INTE_R","ELNO_INTE_R",         
+                             "ELGA_INTE_R","CART_META_R","NOEU_META_R",         
+                             "ELEM_META_R","ELNO_META_R","ELGA_META_R",         
+                             "CART_NEUT_F","NOEU_NEUT_F","ELEM_NEUT_F",         
+                             "ELNO_NEUT_F","ELGA_NEUT_F","CART_NEUT_R",         
+                             "NOEU_NEUT_R","ELEM_NEUT_R","ELNO_NEUT_R",         
+                             "ELGA_NEUT_R","CART_PRES_R","NOEU_PRES_R",         
+                             "ELEM_PRES_R","ELNO_PRES_R","ELGA_PRES_R",         
+                             "CART_SIEF_R","NOEU_SIEF_R","ELEM_SIEF_R",         
+                             "ELNO_SIEF_R","ELGA_SIEF_R","CART_SOUR_R",         
+                             "NOEU_SOUR_R","ELEM_SOUR_R","ELNO_SOUR_R",         
+                             "ELGA_SOUR_R","CART_TEMP_F","NOEU_TEMP_F",         
+                             "ELEM_TEMP_F","ELNO_TEMP_F","ELGA_TEMP_F",         
+                             "CART_TEMP_R","NOEU_TEMP_R","ELEM_TEMP_R",         
+                             "ELNO_TEMP_R","ELGA_TEMP_R","CART_VAR2_R",         
+                             "NOEU_VAR2_R","ELEM_VARI_R","ELNO_VARI_R",         
+                             "ELGA_VARI_R","CART_VNOR_C","NOEU_VNOR_C",         
+                             "ELEM_VNOR_C","ELNO_VNOR_C","ELGA_VNOR_C",
+                             "CART_IRRA_R","NOEU_IRRA_R","ELEM_IRRA_R",
+                             "ELNO_IRRA_R","ELGA_IRRA_R",) ),
+
+#        SI CREATION D'UN CHAM_NO, POUR IMPOSER LA NUMEROTATION DES DDLS :
+#        ------------------------------------------------------------------
+         regles=(EXCLUS('NUME_DDL','CHAM_NO',)),         
+         NUME_DDL        =SIMP(statut='f',typ=(nume_ddl) ),
+         CHAM_NO         =SIMP(statut='f',typ=(cham_no) ),
+
+         OPERATION       =SIMP(statut='o',typ='TXM',into=("AFFE","ASSE","EVAL","EXTR","DISC",) ),
+
+         b_affe          =BLOC(condition = "OPERATION == 'AFFE'", 
+             regles=(UN_PARMI('MAILLAGE','MODELE'),EXCLUS('MAILLAGE','PROL_ZERO'),),         
+             MAILLAGE        =SIMP(statut='f',typ=(maillage) ),
+             MODELE          =SIMP(statut='f',typ=(modele) ),
+             PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+             AFFE            =FACT(statut='o',min=01,max='**',
+                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD',),         
+                        UN_PARMI('VALE','VALE_I','VALE_C','VALE_F', ),),
+                TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+                MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+                GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+                NOEUD           =SIMP(statut='f',typ=no,max='**'),
+                NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
+                VALE            =SIMP(statut='f',typ='R',max='**' ),  
+                VALE_I          =SIMP(statut='f',typ='I',max='**' ),  
+                VALE_C          =SIMP(statut='f',typ='C',max='**' ),  
+                VALE_F          =SIMP(statut='f',typ=fonction,max='**'), 
+                                   ),
+                             ),
+         b_asse          =BLOC(condition = "OPERATION == 'ASSE'", 
+             regles=(UN_PARMI('MAILLAGE','MODELE'),EXCLUS('MAILLAGE','PROL_ZERO'),),         
+             MAILLAGE        =SIMP(statut='f',typ=(maillage) ),
+             MODELE          =SIMP(statut='f',typ=(modele) ),
+             PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+             ASSE            =FACT(statut='o',min=01,max='**',
+                regles=(AU_MOINS_UN('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD',),      
+                PRESENT_PRESENT('NOM_CMP_RESU','NOM_CMP', ),),
+                TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+                GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+                MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+                NOEUD           =SIMP(statut='f',typ=no,max='**'),
+                CHAM_GD         =SIMP(statut='o',typ=(cham_gd)),
+                NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),  
+                NOM_CMP_RESU    =SIMP(statut='f',typ='TXM',max='**' ),  
+                CUMUL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                COEF_R          =SIMP(statut='f',typ='R',defaut= 1. ),  
+                                    ),
+                             ),
+         b_eval          =BLOC(condition = "OPERATION == 'EVAL'", 
+             CHAM_F          =SIMP(statut='o',typ=(cham_gd)),
+             CHAM_PARA       =SIMP(statut='o',typ=(cham_gd),max='**'),
+                             ),
+         b_disc          =BLOC(condition = "OPERATION == 'DISC'", 
+             MODELE          =SIMP(statut='f',typ=(modele) ),
+             PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+             CHAM_GD         =SIMP(statut='o',typ=(cham_gd)),
+                             ),
+         b_extr          =BLOC(condition = "OPERATION == 'EXTR'", 
+             regles=(UN_PARMI('MAILLAGE','RESULTAT'),),         
+             MAILLAGE        =SIMP(statut='f',typ=(maillage) ),
+             RESULTAT        =SIMP(statut='f',typ=(resultat) ),
+             b_extr_maillage =BLOC(condition = "MAILLAGE != None",
+                 NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("GEOMETRIE",)),
+                                  ),
+             b_extr_resultat =BLOC(condition = "RESULTAT != None",
+                 regles=(EXCLUS('TYPE_MAXI','NUME_ORDRE','INST','FREQ','NUME_MODE',        
+                                'NOEUD_CMP','NOM_CAS','ANGL', ),),
+                 NOM_CHAM        =SIMP(statut='o',typ='TXM',     
+                           into=("DEPL","VITE","ACCE",          
+                             "DEPL_ABSOLU","VITE_ABSOLU",
+                             "TEMP","IRRA","ACCE_ABSOLU",  
+                             "FORC_NODA","REAC_NODA","EFGE_NOEU_DEPL",          
+                             "EFGE_NOEU_CART","EPSI_NOEU_DEPL",                 
+                             "SIGM_NOEU_DEPL","SIGM_NOEU_CART",                 
+                             "SIPO_NOEU_DEPL","EQUI_NOEU_SIGM",                 
+                             "EQUI_NOEU_EPSI","FLUX_NOEU_TEMP",                 
+                             "FLUX_ELGA_TEMP","FLUX_ELNO_TEMP",                 
+                             "META_ELGA_TEMP","META_ELNO_TEMP",                 
+                             "META_NOEU_TEMP","DURT_ELGA_META",                 
+                             "DURT_ELNO_META","DURT_NOEU_META","SIEF_ELGA",     
+                             "SIEF_ELNO_ELGA","SIEF_ELGA_DEPL",                 
+                             "VARI_ELNO_ELGA","VARI_ELGA","EPOT_ELEM_DEPL",     
+                             "ECIN_ELEM_DEPL","SOUR_ELGA_ELEC",                 
+                             "PRES_ELNO_REEL","PRES_ELNO_IMAG",                 
+                             "PRES_ELNO_DBEL","INTE_ELNO_ACTI",                 
+                             "INTE_ELNO_REAC","EFGE_ELNO_DEPL",                 
+                             "SIGM_ELNO_DEPL","EFGE_ELNO_CART",                 
+                             "SIGM_ELNO_CART","SIPO_ELNO_DEPL",                 
+                             "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL",                 
+                             "EPSG_ELNO_DEPL","EPSG_ELGA_DEPL","EPSP_ELNO",     
+                             "EPSP_ELGA","EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",     
+                             "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI",                 
+                             "ERRE_ELNO_ELGA","ERRE_ELGA_NORE",                 
+                             "ERRE_ELEM_NOZ1","ERRE_ELEM_NOZ2",                 
+                             "SIGM_NOZ1_ELGA","SIGM_NOZ2_ELGA",                 
+                             "DEGE_ELNO_DEPL","SIRE_ELNO_DEPL",                 
+                             "VNOR_ELEM_DEPL","SIEF_ELNO","VARI_ELNO",          
+                             "SIEF_NOEU_ELGA","VARI_NOEU_ELGA",                 
+                             "PRES_NOEU_DBEL","PRES_NOEU_REEL",                 
+                             "PRES_NOEU_IMAG","INTE_NOEU_ACTI",                 
+                             "INTE_NOEU_REAC","DCHA_ELGA_SIGM",                 
+                             "DCHA_ELNO_SIGM","RADI_ELGA_SIGM",                 
+                             "RADI_ELNO_SIGM","ENDO_ELNO_SIGA",                 
+                             "ENDO_ELNO_SINO","ENDO_ELNO_SIGM",                 
+                             "SIGM_ELNO_VARI","SIGM_NOEU_VARI",                 
+                             "EPME_ELNO_DEPL","EPME_ELGA_DEPL",                 
+                             "EPME_ELNO_DPGE","EPMG_ELNO_DEPL",                 
+                             "EPMG_ELGA_DEPL","GRAD_ELGA_THETA",                
+                             "GTHE_ELNO_ELGA","GRAD_NOEU_THETA",
+                             "HYDR_ELGA","HYDR_ELNO_ELGA","HYDR_NOEU_ELGA",    
+                             "THETA","SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",
+                             "VALE_CONT",) ),
+                 TYPE_MAXI       =SIMP(statut='f',typ='TXM',into=("MAXI","MINI","MAXI_ABS","MINI_ABS","NORM_TRAN",) ),
+                 TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="VALE",into=("VALE","INST",) ),
+                 TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                 LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+                 NUME_ORDRE      =SIMP(statut='f',typ='I'),  
+                 INST            =SIMP(statut='f',typ='R'),  
+                 FREQ            =SIMP(statut='f',typ='R'),  
+                 NUME_MODE       =SIMP(statut='f',typ='I'),  
+                 NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),  
+                 NOM_CAS         =SIMP(statut='f',typ='TXM'),  
+                 ANGL            =SIMP(statut='f',typ='R'),  
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),  
+                 CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+                 INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN",) ),
+                              ),
+
+                ),
+# FIN DU CATALOGUE : INFO,TITRE ET TYPAGE DU RESULAT :
+#-----------------------------------------------------
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage,
+                     docu="U4.23.02-c",reentrant='n',
+         regles=(EXCLUS('ECLA_PG','CREA_MAILLE'),
+                 EXCLUS('ECLA_PG','CREA_GROUP_MA'),
+                 EXCLUS('ECLA_PG','DETR_GROUP_MA'),
+                 EXCLUS('ECLA_PG','MODI_MAILLE'),),
+         MAILLAGE        =SIMP(statut='o',typ=maillage ),
+         CREA_POI1       =FACT(statut='f',min=01,max='**',fr="Création de mailles de type POI1 à partir de noeuds",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD' ),),
+           NOM_GROUP_MA    =SIMP(statut='f',typ=grma,max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+         ),
+         CREA_MAILLE     =FACT(statut='f',min=01,max='**',fr="Duplication de mailles",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           PREF_MAILLE     =SIMP(statut='o',typ='TXM' ),
+           PREF_NUME       =SIMP(statut='f',typ='I' ),
+         ),
+         CREA_GROUP_MA   =FACT(statut='f',min=01,max='**',fr="Duplication de mailles et création de groupes de mailles",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           NOM             =SIMP(statut='o',typ='TXM'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           PREF_MAILLE     =SIMP(statut='o',typ='TXM' ),
+           PREF_NUME       =SIMP(statut='f',typ='I' ),
+         ),
+         DETR_GROUP_MA   =FACT(statut='f',min=01,max=01,fr="Destruction de groupes de mailles",
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           NB_MAILLE       =SIMP(statut='f',typ='I',defaut= 0,
+                                 fr="Nombre minimal de mailles que doit contenir le groupe pour etre détruit",  ),  
+         ),
+         MODI_MAILLE     =FACT(statut='f',min=01,max='**',fr="Modification du type de mailles",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=ma,max='**'),
+           OPTION          =SIMP(statut='o',typ='TXM',into=("TRIA6_7","QUAD8_9","SEG3_4"),fr="Choix de la transformation" ),
+           PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
+           PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
+         ),
+         REPERE          =FACT(statut='f',min=01,max='**',
+                               fr="changement de repère servant à déterminer les caractéristiques d une section de poutre",
+           TABLE           =SIMP(statut='o',typ=tabl_cara_geom,
+                                 fr="Nom de la table contenant les caractéristiques de la section de poutre" ),
+           NOM_ORIG        =SIMP(statut='f',typ='TXM',into=("CDG","TORSION"),fr="Origine du nouveau repère" ),
+           NOM_ROTA        =SIMP(statut='f',typ='TXM',into=("INERTIE",),fr="Direction du repére"  ),   
+           b_cdg =BLOC(condition = "NOM_ORIG == 'CDG'",
+             GROUP_MA        =SIMP(statut='f',typ=grma,
+                                   fr="Nom du groupe de mailles dont le centre de gravité sera l origine du nouveau repère"),
+           ),
+         ),
+         ECLA_PG         =FACT(statut='f',min=01,max=01,
+                               fr="Eclatement des mailles en petites mailles contenant chacune un seul point de gauss",
+           MODELE          =SIMP(statut='o',typ=modele ),
+           SHRINK          =SIMP(statut='f',typ='R',defaut= 0.9, fr="Facteur de réduction" ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 07/01/2002   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def crea_resu_prod(TYPE_RESU,**args):
+  if TYPE_RESU == "EVOL_ELAS"    : return evol_elas
+  if TYPE_RESU == "EVOL_NOLI"    : return evol_noli
+  if TYPE_RESU == "EVOL_THER"    : return evol_ther
+  if TYPE_RESU == "MULT_ELAS"    : return mult_elas
+  if TYPE_RESU == "FOURIER_ELAS" : return fourier_elas
+  if TYPE_RESU == "EVOL_VARC"    : return evol_varc
+  raise AsException("type de concept resultat non prevu")
+
+CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-d1",reentrant='f',
+               fr="Engendrer ou enrichir une structure de donnees en affectant les cham_gd associes",
+
+         OPERATION =SIMP(statut='o',typ='TXM',into=("AFFE","ECLA_PG","PERM_CHAM","PROL_RTZ",),
+                         fr="choix de la fonction a activer",),
+
+         b_affe       =BLOC(condition = "OPERATION == 'AFFE'",
+
+           TYPE_RESU    =SIMP(statut='o',typ='TXM',into=("MULT_ELAS","EVOL_ELAS","EVOL_NOLI","FOURIER_ELAS",
+                                                         "EVOL_THER","EVOL_VARC",) ),
+           NOM_CHAM     =SIMP(statut='f',typ='TXM',into=("DEPL","TEMP","IRRA","HYDR_ELGA",),max=1 ),
+           AFFE         =FACT(statut='f',min=01,max='**',
+             regles=(UN_PARMI('NOM_CAS','NUME_MODE','LIST_INST','INST',),),
+             CHAM_GD         =SIMP(statut='f',typ=(cham_gd)),
+             NUME_ORDRE_INIT =SIMP(statut='f',typ='I'),
+             NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+             NUME_MODE       =SIMP(statut='f',typ='I'),
+             TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
+             INST            =SIMP(statut='f',typ='R',max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8),
+             NUME_INIT       =SIMP(statut='f',typ='I'),
+             NUME_FIN        =SIMP(statut='f',typ='I'),
+           ),  
+         ),  
+
+         b_ecla_pg    =BLOC(condition = "OPERATION == 'ECLA_PG'",
+           
+           TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_ELAS","EVOL_NOLI","EVOL_THER"), ),
+         
+           ECLA_PG         =FACT(statut='f',min=01,max=01,
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                   into=("SIEF_ELGA","VARI_ELGA","SIEF_ELGA_DEPL","FLUX_ELGA_TEMP",) ),
+             MODELE_INIT     =SIMP(statut='o',typ=modele),
+             RESU_INIT       =SIMP(statut='o',typ=resultat),
+             MAILLAGE        =SIMP(statut='o',typ=maillage),
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis),
+             INST            =SIMP(statut='f',typ='R',max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+           ),
+         ),
+
+         b_perm_cham =BLOC(condition = "OPERATION == 'PERM_CHAM'",
+
+           TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_NOLI",) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","SIEF_ELGA","VARI_ELGA",),max='**' ),
+           RESU_INIT       =SIMP(statut='o',typ=evol_noli),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+           CRITERE         =SIMP(statut='f',typ='TXM',into=('RELATIF','ABSOLU'),defaut='RELATIF'),
+           MAILLAGE_INIT   =SIMP(statut='o',typ=maillage,),
+           RESU_FINAL      =SIMP(statut='o',typ=evol_noli,),
+           MAILLAGE_FINAL  =SIMP(statut='o',typ=maillage,),
+           PERM_CHAM       =FACT(statut='o',min=01,max=01,
+              GROUP_MA_FINAL =SIMP(statut='o',typ=grma),
+              GROUP_MA_INIT  =SIMP(statut='o',typ=grma),
+              TRAN           =SIMP(statut='o',typ='R',max='**'),
+              PRECISION      =SIMP(statut='f',typ='R',defaut=1.0E-3),
+           ),
+         ),
+
+         b_prol_rtz   =BLOC(condition = "OPERATION == 'PROL_RTZ'",
+
+           TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_THER",) ),
+
+           PROL_RTZ        =FACT(statut='f',min=01,max=01,
+              regles=(EXCLUS('INST','LIST_INST'),),
+              MAILLAGE_FINAL  =SIMP(statut='o',typ=maillage,),
+              TABLE           =SIMP(statut='o',typ=tabl_post_rele,fr="Table issue de post_releve_t"),
+              INST            =SIMP(statut='f',typ='R',max='**'),
+              LIST_INST       =SIMP(statut='f',typ=listr8),
+              b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
+                 CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+              ),
+              PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU",),),
+              PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU",),),
+              REPERE          =SIMP(statut='o',typ='TXM',into=("CYLINDRIQUE",),),
+              ORIGINE         =SIMP(statut='o',typ='R',min=03,max=03),  
+              AXE_Z           =SIMP(statut='o',typ='R',min=03,max=03),  
+           ),
+         ),
+
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEBUT=MACRO(nom="DEBUT",op=0 ,docu="U4.11.01-f1",repetable='n',
+           fr="Ouverture d une étude. Allocation des ressources mémoire et disque",
+          sd_prod=ops.DEBUT,
+
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+                           into=("OUI","NON"),defaut="OUI"),
+         BASE            =FACT(fr="définition des paramètres associés aux bases JEVEUX",
+                               statut='f',min=01,max=03,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM',
+                                 into=('GLOBALE','VOLATILE','LOCALE'),),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           CAS             =SIMP(statut='f',typ='TXM'),
+           NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+           LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+           LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max=03,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='o',typ='I'),
+         ),
+         CATALOGUE       =FACT(statut='f',min=01,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+         CODE            =FACT("définition d un nom pour l'esemble d'une étude",
+                               statut='f',min=01,max=01,
+           NOM             =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I',defaut=15),
+         ),
+         DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
+                               statut='f',min=01,max=01,
+           JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+                                 statut='f',typ='TXM',into=('TEST',)),
+         ),
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=01,max=01,
+           GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
+           TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
+           TAILLE          =SIMP(statut='f',typ='I'),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut=800.),
+           PARTITION       =SIMP(statut='f',typ='R'),
+         ),
+ );
+#& MODIF COMMANDE  DATE 19/12/2001   AUTEUR CIBHHPD D.NUNEZ 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=base_modale,
+                     docu="U4.64.02-e",reentrant='f',
+         regles=(UN_PARMI('CLASSIQUE','RITZ','DIAG_MASS'),),
+         CLASSIQUE       =FACT(statut='f',min=01,max=01,
+           INTERF_DYNA     =SIMP(statut='o',typ=interf_dyna_clas ),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca,max='**' ),
+           NMAX_MODE       =SIMP(statut='f',typ='I',defaut= 10 ),
+         ),
+         RITZ            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MODE_STAT','MODE_MECA','MULT_ELAS','BASE_MODALE'),),
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca,max='**'  ),
+           NMAX_MODE       =SIMP(statut='f',typ='I',defaut= 999 ),
+           MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,) ),
+           MULT_ELAS       =SIMP(statut='f',typ=mult_elas ),
+           BASE_MODALE     =SIMP(statut='f',typ=base_modale ),
+         ),
+        DIAG_MASS        =FACT(statut='f',min=01,max='**',
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca,max='**'  ),
+           MODE_STAT       =SIMP(statut='o',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,) ),
+         ),
+#  le bloc conditionnel remplace-t-il PRESENT_PRESENT('RITZ','NUME_REF'),
+#                                     PRESENT_ABSENT('INTERF_DYNA','CLASSIQUE'),        
+         b_ritz          =BLOC(condition = "RITZ != None",
+           INTERF_DYNA     =SIMP(statut='f',typ=interf_dyna_clas ),
+           NUME_REF        =SIMP(statut='o',typ=nume_ddl ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_CABLE_BP=OPER(nom="DEFI_CABLE_BP",op= 180,sd_prod=cabl_precont,
+                   fr=" ",
+                   docu="U4.42.04-a",reentrant='n',
+         MODELE          =SIMP(statut='o',typ=modele ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+         GROUP_MA_BETON  =SIMP(statut='o',typ=grma),
+         DEFI_CABLE      =FACT(statut='o',min=1,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('NOEUD_ANCRAGE','GROUP_NO_ANCRAGE'),),
+           MAILLE          =SIMP(statut='f',typ=ma,min=2,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           NOEUD_ANCRAGE   =SIMP(statut='f',typ=no,max=2),
+           GROUP_NO_ANCRAGE=SIMP(statut='f',typ=grno,max=2),
+           TYPE_ANCRAGE    =SIMP(statut='o',typ='TXM',min=2,max=2,     
+                                 into=("ACTIF","PASSIF") ),
+         ),
+         TENSION_INIT    =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         RECUL_ANCRAGE   =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         RELAXATION      =FACT(statut='f',min=0,max=1,
+           R_J             =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op=   2,sd_prod=fonction,
+                    fr="Définition d une fonction constante",
+                    docu="U4.31.01-f",reentrant='n',
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE            =SIMP(statut='o',typ='R',max=01 ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater,docu="U4.42.03-e",reentrant='n',
+                    fr="Définition d une coque composite couche par couche",
+         COUCHE          =FACT(statut='o',min=01,max='**',
+           EPAIS           =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+           MATER           =SIMP(statut='o',typ=(mater) ),
+           ORIENTATION     =SIMP(statut='f',typ='R',defaut= 0.E+0,
+                                 val_min=-90.E+0,val_max=90.E+0   ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
+                                 into=("RESULTAT",) ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
+                    docu="U4.25.01-d",reentrant='n',
+         regles=(  UN_PARMI('FAISCEAU_TRANS','GRAPPE','FAISCEAU_AXIAL','COQUE_COAX',),),
+         FAISCEAU_TRANS  =FACT(statut='f',min=01,max='**',
+           COUPLAGE        =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           PROF_RHO_F_INT  =SIMP(statut='f',typ=fonction ),
+           PROF_RHO_F_EXT  =SIMP(statut='f',typ=fonction ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',into=("DX","DY","DZ") ),
+           COEF_MASS_AJOU  =SIMP(statut='f',typ='R' ),
+           TYPE_PAS        =SIMP(statut='f',typ='TXM',into=("CARRE_LIGN","TRIA_LIGN") ),
+           TYPE_RESEAU     =SIMP(statut='f',typ='I' ),
+           UNITE_CD        =SIMP(statut='f',typ='I',defaut=70),
+           UNITE_CK        =SIMP(statut='f',typ='I',defaut=71),            
+           PAS             =SIMP(statut='f',typ='R' ),
+         ),
+         GRAPPE          =FACT(statut='f',min=00,max=01,
+           regles=(ENSEMBLE('GRAPPE_2','NOEUD','CARA_ELEM','MODELE','RHO_FLUI',),
+                   PRESENT_PRESENT('COEF_MASS_AJOU','GRAPPE_2', ),),
+#  peut on créer un bloc a partir de la valeur de couplage  
+           COUPLAGE        =SIMP(statut='o',typ='TXM',into=("OUI","NON") ),
+           GRAPPE_2        =SIMP(statut='f',typ='TXM',
+                                 into=("ASC_CEN","ASC_EXC","DES_CEN","DES_EXC") ),
+           NOEUD           =SIMP(statut='f',typ=no),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           MODELE          =SIMP(statut='f',typ=modele ),
+           COEF_MASS_AJOU  =SIMP(statut='f',typ='R' ),
+           RHO_FLUI        =SIMP(statut='f',typ='R' ),
+           UNITE_CA        =SIMP(statut='f',typ='I',defaut=70),
+           UNITE_KA        =SIMP(statut='f',typ='I',defaut=71),            
+         ),
+         FAISCEAU_AXIAL  =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('GROUP_MA','TRI_GROUP_MA'),
+                   UN_PARMI('CARA_ELEM','RAYON_TUBE'),
+                   ENSEMBLE('RAYON_TUBE','COOR_TUBE'),
+                   PRESENT_ABSENT('RAYON_TUBE','TRI_GROUP_MA'),
+                   ENSEMBLE('CARA_PAROI','VALE_PAROI'),
+                   ENSEMBLE('LONG_TYPG','LARG_TYPG','EPAI_TYPG','RUGO_TYPG','COEF_TRAI_TYPG','COEF_DPOR_TYPG',
+                            'COOR_GRILLE','TYPE_GRILLE', ),),
+#  on doit pouvoir mettre des blocs conditionnels mais pas assez d infos pour le faire                            
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           TRI_GROUP_MA    =SIMP(statut='f',typ='TXM' ),
+           VECT_X          =SIMP(statut='f',typ='R',max=03),
+           PROF_RHO_FLUI   =SIMP(statut='f',typ=fonction ),
+           PROF_VISC_CINE  =SIMP(statut='f',typ=fonction ),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           RAYON_TUBE      =SIMP(statut='f',typ='R' ),
+           COOR_TUBE       =SIMP(statut='f',typ='R',max='**'),
+           PESANTEUR       =SIMP(statut='f',typ='R',min=04,max=04),
+           RUGO_TUBE       =SIMP(statut='f',typ='R' ),
+           CARA_PAROI      =SIMP(statut='f',typ='TXM',max=05,
+                                 into=("YC","ZC","R","HY","HZ") ),
+           VALE_PAROI      =SIMP(statut='f',typ='R',max=05),
+           ANGL_VRIL       =SIMP(statut='f',typ='R' ),
+           LONG_TYPG       =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           LARG_TYPG       =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           EPAI_TYPG       =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           RUGO_TYPG       =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           COEF_TRAI_TYPG  =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           COEF_DPOR_TYPG  =SIMP(statut='f',typ='R',max='**'),
+           COOR_GRILLE     =SIMP(statut='f',typ='R',max='**'),
+           TYPE_GRILLE     =SIMP(statut='f',typ='I',max='**'),
+         ),
+         COQUE_COAX      =FACT(statut='f',min=00,max=01,
+           MASS_AJOU       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           GROUP_MA_INT    =SIMP(statut='o',typ=grma),
+           GROUP_MA_EXT    =SIMP(statut='o',typ=grma),
+           VECT_X          =SIMP(statut='o',typ='R',max='**'),
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           MATER_INT       =SIMP(statut='o',typ=mater ),
+           MATER_EXT       =SIMP(statut='o',typ=mater ),
+           RHO_FLUI        =SIMP(statut='o',typ='R' ),
+           VISC_CINE       =SIMP(statut='o',typ='R' ),
+           RUGOSITE        =SIMP(statut='o',typ='R' ),
+           PDC_MOY_1       =SIMP(statut='o',typ='R' ),
+           PDC_DYN_1       =SIMP(statut='o',typ='R' ),
+           PDC_MOY_2       =SIMP(statut='o',typ='R' ),
+           PDC_DYN_2       =SIMP(statut='o',typ='R' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 23/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction,docu="U4.MK.10-e",reentrant='n',
+                    fr="Définition d une fonction du temps pour calculer des forces de LAPLACE",
+      regles=(UN_PARMI('COUR_PRIN','COUR'),
+              EXCLUS('COUR','COUR_SECO'), ),
+         FREQ            =SIMP(statut='f',typ='R',defaut= 50.),
+         SIGNAL          =SIMP(statut='f',typ='TXM',defaut="COMPLET",into=("COMPLET","CONTINU") ),
+         COUR            =FACT(statut='f',min=1,max='**',
+         fr="Définition du courant de court-circuit",
+           regles=(UN_PARMI('PHI_CC_1','INTC_CC_1'),
+                   UN_PARMI('PHI_CC_2','INTC_CC_2'),),
+           INTE_CC_1       =SIMP(statut='o',typ='R'),
+           TAU_CC_1        =SIMP(statut='o',typ='R'),
+           PHI_CC_1        =SIMP(statut='f',typ='R'),
+           INTC_CC_1       =SIMP(statut='f',typ='R'),
+           INTE_CC_2       =SIMP(statut='o',typ='R'),
+           TAU_CC_2        =SIMP(statut='o',typ='R'),
+           PHI_CC_2        =SIMP(statut='f',typ='R'),
+           INTC_CC_2       =SIMP(statut='f',typ='R'),
+           INST_CC_INIT    =SIMP(statut='o',typ='R'),
+           INST_CC_FIN     =SIMP(statut='o',typ='R'),
+         ),
+         COUR_PRIN       =FACT(statut='f',min=1,max=1,
+         fr="Définition du courant de court-circuit avec réenclenchement",
+           regles=(UN_PARMI('PHI_CC_1','INTC_CC_1'),),
+           INTE_CC_1       =SIMP(statut='o',typ='R'),
+           TAU_CC_1        =SIMP(statut='o',typ='R'),
+           PHI_CC_1        =SIMP(statut='f',typ='R'),
+           INTC_CC_1       =SIMP(statut='f',typ='R'),
+           INTE_RENC_1     =SIMP(statut='f',typ='R'),
+           TAU_RENC_1      =SIMP(statut='f',typ='R'),
+           PHI_RENC_1      =SIMP(statut='f',typ='R'),
+           INST_CC_INIT    =SIMP(statut='o',typ='R'),
+           INST_CC_FIN     =SIMP(statut='o',typ='R'),
+           INST_RENC_INIT  =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+           INST_RENC_FIN   =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+         ),
+         COUR_SECO       =FACT(statut='f',min=1,max='**',
+         fr="Définition du courant de court-circuit avec un intervalle de temps différent de celui de COUR_PRIN",
+           regles=(UN_PARMI('PHI_CC_2','INTC_CC_2'),),
+           INTE_CC_2       =SIMP(statut='o',typ='R'),
+           TAU_CC_2        =SIMP(statut='o',typ='R'),
+           PHI_CC_2        =SIMP(statut='f',typ='R'),
+           INTC_CC_2       =SIMP(statut='f',typ='R'),
+           INTE_RENC_2     =SIMP(statut='f',typ='R'),
+           TAU_RENC_2      =SIMP(statut='f',typ='R'),
+           PHI_RENC_2      =SIMP(statut='f',typ='R'),
+           DIST            =SIMP(statut='f',typ='R',defaut=1.0E+0),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction,
+                    docu="U4.35.01-c",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
+         NOEUD_INIT      =SIMP(statut='o',typ=no),
+         NOEUD_FIN       =SIMP(statut='o',typ=no),
+         VITE            =FACT(statut='o',min=1,max=1,
+           VALE            =SIMP(statut='f',typ='R',defaut= 1. ),
+           PROFIL          =SIMP(statut='o',typ='TXM',into=("UNIFORME","LEONARD") ),
+           NB_BAV          =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 2 , 3 ) ),
+         ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",
+                               into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",
+                               into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM' ,defaut="EXCLU",
+                               into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE MCOURTOI M.COURTOIS
+def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,**args):
+  if VALE != None  : return fonction
+  if VALE_C != None  : return fonction_c
+  if VALE_PARA != None  : return fonction
+  if NOEUD_PARA != None  : return fonction
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
+                    ,fr="Définition des valeurs réelles ou complexes d une fonction réelle",
+                     docu="U4.31.02-f1",reentrant='n',
+         regles=(UN_PARMI('VALE','VALE_C','VALE_PARA','NOEUD_PARA'),),
+         NOM_PARA        =SIMP(statut='o',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","META","FREQ","PULS",
+                                     "AMOR","ABSC","SIGM","HYDR","SECH","PORO","SAT",
+                                     "PGAZ","PCAP","VITE") ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE            =SIMP(statut='f',typ='R',min=2,max='**',
+                               fr ="Fonction réelle définie par une liste de couples (abscisse,ordonnée)"),
+         VALE_C          =SIMP(statut='f',typ='R',min=2,max='**',
+                               fr ="Fonction complexe définie par une liste de couples"),
+         VALE_PARA       =SIMP(statut='f',typ=listr8,
+                               fr ="Fonction réelle définie par deux concepts de type listr8" ),
+         b_vale_para     =BLOC(condition = "VALE_PARA != None",
+           VALE_FONC       =SIMP(statut='o',typ=listr8 ),
+         ),
+         NOEUD_PARA      =SIMP(statut='f',typ=no,max='**',
+                               fr ="Fonction réelle définie par une liste de noeuds et un maillage"),
+         b_noeud_para    =BLOC(condition = "NOEUD_PARA != None",
+           MAILLAGE        =SIMP(statut='o',typ=maillage ),
+           VALE_Y          =SIMP(statut='o',typ='R',max='**'),
+         ),
+
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         VERIF           =SIMP(statut='f',typ='TXM',defaut="CROISSANT",into=("CROISSANT","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,docu="U4.82.01-e",reentrant='n',
+                    fr="Définition de lèvres et d un fond de fissure en 3D",
+         regles=(UN_PARMI('FOND','FOND_FERME'),
+                 EXCLUS('FOND_FERME','DTAN_ORIG'),
+                 EXCLUS('FOND_FERME','DTAN_EXTR'),
+                      EXCLUS('FOND_FERME','VECT_GRNO_ORIG'),
+                      EXCLUS('FOND_FERME','VECT_GRNO_EXTR'),
+                 UN_PARMI('LEVRE_SUP','NORMALE'),
+                      EXCLUS('LEVRE_INF','NORMALE'),
+                 ENSEMBLE('DTAN_ORIG','DTAN_EXTR'),
+                      ENSEMBLE('VECT_GRNO_ORIG','VECT_GRNO_EXTR'),
+                      EXCLUS('DTAN_ORIG','VECT_GRNO_ORIG'),
+                      EXCLUS('DTAN_EXTR','VECT_GRNO_EXTR') ,),
+           MAILLAGE        =SIMP(statut='o',typ=maillage ),
+           FOND            =FACT(statut='f',min=01,max=01,
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+                     EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+                          EXCLUS('NOEUD_EXTR','GROUP_NO_EXTR'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+#  à mettre à jour le max vaut-il 1  
+             NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
+           ),
+           FOND_FERME      =FACT(statut='f',min=01,max=01,
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+                          EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+             MAILLE_ORIG     =SIMP(statut='f',typ=ma,max=1),
+             GROUP_MA_ORIG   =SIMP(statut='f',typ=ma,max=1),
+           ),
+           LEVRE_SUP       =FACT(statut='f',min=01,max=01,
+             regles=(UN_PARMI('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           ),
+           LEVRE_INF       =FACT(statut='f',min=01,max=01,
+             regles=(UN_PARMI('GROUP_MA','MAILLE', ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           ),
+           NORMALE         =SIMP(statut='f',typ='R',max='**'),
+           DTAN_ORIG       =SIMP(statut='f',typ='R',max='**'),
+           DTAN_EXTR       =SIMP(statut='f',typ='R',max='**'),
+           VECT_GRNO_ORIG  =SIMP(statut='f',typ=grno,max=2),
+           VECT_GRNO_EXTR  =SIMP(statut='f',typ=grno,max=2),
+           INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR VABHHTS J.TESELET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def defi_group_prod(MAILLAGE,**args):
+  if AsType(MAILLAGE) == maillage : return maillage
+  if AsType(MAILLAGE) == squelette : return squelette
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
+                fr="Définition de nouveaux groupes de noeuds et/ou de mailles dans un concept maillage",
+                docu="U4.22.01-e",reentrant='o',
+         regles=(AU_MOINS_UN('CREA_GROUP_MA','CREA_GROUP_NO'),),            
+         MAILLAGE        =SIMP(statut='o',typ=(maillage,squelette) ),
+         
+         CREA_GROUP_MA   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION'),),
+#  quel est le concept attendu deriere NOM
+           NOM             =SIMP(statut='o',typ=grma),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           INTERSEC        =SIMP(statut='f',typ=grma,max='**'),
+           UNION           =SIMP(statut='f',typ=grma,max='**'),
+           DIFFE           =SIMP(statut='f',typ=grma,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',into=("FACE_NORMALE","SPHERE","CYLINDRE","BANDE") ),
+           b_group_ma      =BLOC(condition = "GROUP_MA != None",
+             regles=(EXCLUS('POSITION','NUME_INIT'),),
+             NUME_INIT       =SIMP(statut='f',typ='I',defaut= 1 ),             
+             POSITION        =SIMP(statut='f',typ='TXM',into=("INIT","FIN","MILIEU") ), 
+             b_nume_init   =BLOC(condition = "NUME_INIT != None",
+               NUME_FIN        =SIMP(statut='f',typ='I' ),
+             ),      
+           ),
+           b_face_normale  =BLOC(condition = "OPTION == 'FACE_NORMALE'",
+             regles=(UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=02),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),
+             ANGL_PREC       =SIMP(statut='f',typ='R',defaut= 0.5 ),
+             VERI_SIGNE      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),     
+           ),
+           b_sphere        =BLOC(condition = "OPTION == 'SPHERE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+             RAYON           =SIMP(statut='o',typ='R' ),    
+           ),
+           b_cylindre      =BLOC(condition = "OPTION == 'CYLINDRE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+             RAYON           =SIMP(statut='o',typ='R' ), 
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=02),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),   
+           ),
+           b_bande         =BLOC(condition = "OPTION == 'BANDE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+             DIST            =SIMP(statut='o',typ='R' ),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=02),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),   
+           ),
+         ),
+         CREA_GROUP_NO   =FACT(statut='f',min=01,max='**',
+           regles = (
+         AU_MOINS_UN ('TOUT_GROUP_MA','GROUP_MA','NOEUD',
+                     'INTERSEC','UNION','DIFFE','GROUP_NO','OPTION'),
+                   EXCLUS ('TOUT_GROUP_MA','GROUP_MA','NOEUD','INTERSEC','UNION','DIFFE'),),
+           TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',into=("OUI",) ),               
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           INTERSEC        =SIMP(statut='f',typ=grno,max='**'),
+           UNION           =SIMP(statut='f',typ=grno,max='**'),
+           DIFFE           =SIMP(statut='f',typ=grno,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',into=("ENV_SPHERE","ENV_CYLINDRE","PLAN",
+                                                            "SEGM_DROI_ORDO","NOEUD_ORDO") ),  
+           b_nom_group_ma  =BLOC(condition = "GROUP_MA != None",
+             NOM             =SIMP(statut='f',typ=grma,max='**'),
+           ),
+           b_crit_noeud    = BLOC(condition = "GROUP_MA != None",
+             CRIT_NOEUD    = SIMP(statut='f',typ='TXM',defaut="TOUS",
+                            into=("TOUS","SOMMET","MILIEU","CENTRE"),),),
+           b_nom =BLOC(condition = "GROUP_MA == None and TOUT_GROUP_MA == None" ,
+             NOM             =SIMP(statut='o',typ=geom),
+           ),                                                 
+           b_group_no      =BLOC(condition = "GROUP_NO != None",
+             regles=(EXCLUS('POSITION','NUME_INIT'),),
+             NUME_INIT       =SIMP(statut='f',typ='I',defaut= 1 ),
+             POSITION        =SIMP(statut='f',typ='TXM',into=("INIT","FIN","MILIEU") ), 
+             b_nume_init     =BLOC(condition = "NUME_INIT != None",
+               NUME_FIN        =SIMP(statut='f',typ='I' ),
+             ),      
+           ),
+           b_env_sphere    =BLOC(condition = "OPTION == 'ENV_SPHERE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=01),
+             RAYON           =SIMP(statut='o',typ='R' ),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),
+           ),
+           b_env_cylindre  =BLOC(condition = "OPTION == 'ENV_CYLINDRE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=01),
+             RAYON           =SIMP(statut='o',typ='R' ),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),
+           ),
+           b_env_plan      =BLOC(condition = "OPTION == 'PLAN'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             POINT           =SIMP(statut='f',typ='R',max=03),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=01),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),
+           ),
+           b_segm_droi_ordo=BLOC(condition = "OPTION == 'SEGM_DROI_ORDO'",
+             regles=(UN_PARMI('NOEUD_ORIG','GROUP_NO_ORIG'),
+                     UN_PARMI('NOEUD_EXTR','GROUP_NO_EXTR'),), 
+             NOEUD_ORIG      =SIMP(statut='f',typ=no),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),
+           ),
+           b_noeud_ordo    =BLOC(condition = "OPTION == 'NOEUD_ORDO'",
+             regles=(UN_PARMI('NOEUD_ORIG','GROUP_NO_ORIG'),
+                     UN_PARMI('NOEUD_EXTR','GROUP_NO_EXTR'),),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno),
+             PRECISION       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),
+           ),      
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_INTE_SPEC=OPER(nom="DEFI_INTE_SPEC",op= 115,sd_prod=tabl_intsp,
+                    docu="U4.36.02-e1",reentrant='n',
+
+         DIMENSION       =SIMP(statut='f',typ='I',defaut= 1 ),
+
+         PAR_FONCTION    =FACT(statut='f',min=1,max='**',
+           NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           FONCTION        =SIMP(statut='o',typ=fonction_c ),
+         ),
+         KANAI_TAJIMI    =FACT(statut='f',min=1,max='**',
+           regles=(EXCLUS('VALE_R','VALE_C'),),
+           NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           FREQ_MIN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FREQ_MAX        =SIMP(statut='f',typ='R',defaut= 100. ),
+           PAS             =SIMP(statut='f',typ='R',defaut= 1. ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',defaut= 0.6 ),
+           FREQ_MOY        =SIMP(statut='f',typ='R',defaut= 5. ),
+           VALE_R          =SIMP(statut='f',typ='R' ),
+           VALE_C          =SIMP(statut='f',typ='C' ),
+           INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+           PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         ),
+         CONSTANT        =FACT(statut='f',min=1,max='**',
+           regles=(EXCLUS('VALE_R','VALE_C'),),
+           NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           FREQ_MIN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FREQ_MAX        =SIMP(statut='f',typ='R',defaut= 100. ),
+           PAS             =SIMP(statut='f',typ='R',defaut= 1. ),
+           VALE_R          =SIMP(statut='f',typ='R' ),
+           VALE_C          =SIMP(statut='f',typ='C' ),
+           INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+           PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),               
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op=  98,sd_prod=interf_dyna_clas,
+                      docu="U4.64.01-e",reentrant='n',
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl ),
+         INTERFACE       =FACT(statut='o',min=01,max='**',
+           regles=(ENSEMBLE('NOM','TYPE'),
+#  erreur doc U sur la condition qui suit
+                   UN_PARMI('NOEUD','GROUP_NO'),),
+           NOM             =SIMP(statut='f',typ='TXM' ),
+           TYPE            =SIMP(statut='f',typ='TXM',into=("MNEAL","CRAIGB","CB_HARMO","AUCUN") ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           DDL_ACTIF       =SIMP(statut='f',typ='TXM',max='**'),
+           MASQUE          =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         FREQ            =SIMP(statut='f',typ='R',defaut= 1.),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis,
+                    fr="Définition d une suite croissante d entiers",
+                    docu="U4.34.02-f",reentrant='n',
+         regles=(UN_PARMI('VALE','DEBUT'),
+                 EXCLUS('VALE','INTERVALLE'),),
+         VALE            =SIMP(statut='f',typ='I',max='**'),
+         DEBUT           =SIMP(statut='f',typ='I'),
+         INTERVALLE      =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOMBRE','PAS'),),
+           JUSQU_A         =SIMP(statut='o',typ='I'),
+           NOMBRE          =SIMP(statut='f',typ='I',val_min=1,),
+           PAS             =SIMP(statut='f',typ='I',val_min=1,),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 07/03/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8,
+                    fr="Définition d une suite croissante de réels",
+                    docu="U4.34.01-f",reentrant='n',
+         regles=(UN_PARMI('VALE','DEBUT',),
+                 EXCLUS('VALE','INTERVALLE'),
+                 ENSEMBLE('DEBUT','INTERVALLE')),
+         VALE            =SIMP(statut='f',typ='R',max='**'),
+         DEBUT           =SIMP(statut='f',typ='R'),
+         INTERVALLE      =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOMBRE','PAS'),),
+           JUSQU_A         =SIMP(statut='o',typ='R'),
+           NOMBRE          =SIMP(statut='f',typ='I'),
+           PAS             =SIMP(statut='f',typ='R'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage,
+                   fr="Définition d un nouveau maillage à partir de macro éléments",
+                   docu="U4.23.01-e",reentrant='n',
+         DEFI_MAILLE     =FACT(statut='o',min=01,max='**',
+           MACR_ELEM_STAT  =SIMP(statut='o',typ=macr_elem_stat,max='**' ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           TRAN            =SIMP(statut='f',typ='R',max=03),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+           b_angl_naut     =BLOC(condition = "ANGL_NAUT != None",
+             CENTRE          =SIMP(statut='f',typ='R',max=03),
+           ),
+         ),
+         RECO_GLOBAL     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+         ),
+         RECO_MAILLE     =FACT(statut='f',min=01,max='**',
+           MAILLE          =SIMP(statut='o',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='o',typ=grno,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="GEOMETRIQUE",into=("GEOMETRIQUE","NOEUD_A_NOEUD","INVERSE") ),
+           geometrique     =BLOC(condition = "OPTION == 'GEOMETRIQUE'",
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),
+         ),
+         DEFI_NOEUD      =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','NOEUD_INIT'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",),
+                                 fr="Renommage de tous les noeuds" ),
+           NOEUD_INIT      =SIMP(statut='f',typ=no,
+                                 fr="Renommage d un seul noeud"),                     
+           b_tout          =BLOC(condition = "TOUT != None",
+             PREFIXE         =SIMP(statut='f',typ='TXM' ),
+             INDEX           =SIMP(statut='o',typ='I',max='**'),
+           ),
+           b_noeud_init    =BLOC(condition = "NOEUD_INIT != None",
+             MAILLE          =SIMP(statut='o',typ=ma),
+             NOEUD_FIN       =SIMP(statut='o',typ=no),
+           ),        
+         ),
+         DEFI_GROUP_NO   =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','MAILLE'),
+                AU_MOINS_UN('INDEX','GROUP_NO_FIN'),
+                   ENSEMBLE('GROUP_NO_INIT','GROUP_NO_FIN'),),
+#  la regle ancien catalogue AU_MOINS_UN__: ( INDEX , GROUP_NO_FIN ) incoherente avec doc U           
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",),
+                                 fr="Création de plusieurs groupes de noeuds" ),
+           MAILLE          =SIMP(statut='f',typ=ma,
+                                 fr="Création de plusieurs groupes de noeuds"),
+           GROUP_NO_INIT   =SIMP(statut='f',typ=grno,
+                                 fr="Création d un seul groupe de noeuds"),
+           PREFIXE         =SIMP(statut='f',typ='TXM' ),
+           INDEX           =SIMP(statut='f',typ='I',max='**'),
+           GROUP_NO_FIN    =SIMP(statut='f',typ=grno),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR VABHHTS J.TESELET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
+                   fr="Définition des paramètres décrivant le comportement d un matériau",
+                   docu="U4.43.01-f1",reentrant='n',
+       regles=(EXCLUS('ELAS','ELAS_FO','ELAS_FLUI','ELAS_ISTR','ELAS_ISTR_FO','ELAS_ORTH',
+                      'ELAS_ORTH_FO','ELAS_COQUE','ELAS_COQUE_FO',
+                      'SURF_ETAT_SATU','CAM_CLAY_THM','SURF_ETAT_NSAT'),
+               EXCLUS('THER','THER_FO','THER_ORTH','THER_NL'),
+               EXCLUS('ECRO_LINE','ECRO_LINE_FO'),
+               EXCLUS('TAHERI','TAHERI_FO'),
+               EXCLUS('ROUSSELIER','ROUSSELIER_FO'),
+               PRESENT_PRESENT('ROUSSELIER','TRACTION'),
+               PRESENT_PRESENT('ROUSSELIER_FO','TRACTION'),
+               EXCLUS('CIN1_CHAB','CIN1_CHAB_FO'),
+               EXCLUS('CIN2_CHAB','CIN2_CHAB_FO'),
+               EXCLUS('VISCOCHAB','VISCOCHAB_FO'),
+               EXCLUS('POLY_CFC','POLY_CFC_FO'),
+               EXCLUS('LEMAITRE','LEMAITRE_FO','ZIRC_CYRA2','ZIRC_EPRI'),
+               EXCLUS('OHNO','OHNO_FO'),
+               EXCLUS('LMARC','LMARC_FO'),
+               EXCLUS('VMIS_POUTRE','VMIS_POUTRE_FO'),
+               EXCLUS('VENDOCHAB','VENDOCHAB_FO'),
+               PRESENT_PRESENT('BPEL_BETON','ELAS'),
+               PRESENT_PRESENT('BPEL_ACIER','ELAS'),
+               EXCLUS('RCCM','RCCM_FO'),
+               EXCLUS('WEIBULL','WEIBULL_FO'),),
+#
+# comportement élastique
+#
+           ELAS            =FACT(statut='f',min=0,max=1,
+             E               =SIMP(statut='o',typ='R',val_min=0.E+0),
+             NU              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=0.5E+0),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+             AMOR_ALPHA      =SIMP(statut='f',typ='R'),
+             AMOR_BETA       =SIMP(statut='f',typ='R'),
+             AMOR_HYST       =SIMP(statut='f',typ='R'),
+           ),
+           ELAS_FO         =FACT(statut='f',min=0,max=1,
+             E               =SIMP(statut='o',typ=fonction),
+             NU              =SIMP(statut='o',typ=fonction),
+             RHO             =SIMP(statut='f',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.),
+             ALPHA           =SIMP(statut='f',typ=fonction),
+             AMOR_ALPHA      =SIMP(statut='f',typ=fonction),
+             AMOR_BETA       =SIMP(statut='f',typ=fonction),
+             AMOR_HYST       =SIMP(statut='f',typ=fonction),
+             K_DESSIC        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             B_ENDOGE        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="INST",into=("TEMP","INST",) ),
+             VERI_P3         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
+             VERI_P4         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
+           ),
+           ELAS_FLUI       =FACT(statut='f',min=0,max=1,
+             E               =SIMP(statut='o',typ='R'),
+             NU              =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='o',typ='R'),
+             PROF_RHO_F_INT  =SIMP(statut='o',typ=fonction),
+             PROF_RHO_F_EXT  =SIMP(statut='o',typ=fonction),
+             COEF_MASS_AJOU  =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="ABSC",into=("ABSC",) ),
+           ),
+           ELAS_ISTR       =FACT(statut='f',min=0,max=1,
+             E_L             =SIMP(statut='o',typ='R'),
+             E_N             =SIMP(statut='o',typ='R'),
+             NU_LT           =SIMP(statut='o',typ='R'),
+             NU_LN           =SIMP(statut='o',typ='R'),
+             G_LN            =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA_L         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             ALPHA_N         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           ELAS_ISTR_FO    =FACT(statut='f',min=0,max=1,
+             E_L             =SIMP(statut='o',typ=fonction),
+             E_N             =SIMP(statut='o',typ=fonction),
+             NU_LT           =SIMP(statut='o',typ=fonction),
+             NU_LN           =SIMP(statut='o',typ=fonction),
+             G_LN            =SIMP(statut='o',typ=fonction),
+             RHO             =SIMP(statut='f',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.),
+             ALPHA_L         =SIMP(statut='f',typ=fonction),
+             ALPHA_N         =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST")),
+           ),
+           ELAS_ORTH       =FACT(statut='f',min=0,max=1,
+             E_L             =SIMP(statut='o',typ='R'),
+             E_T             =SIMP(statut='o',typ='R'),
+             E_N             =SIMP(statut='f',typ='R'),
+             NU_LT           =SIMP(statut='o',typ='R'),
+             NU_LN           =SIMP(statut='f',typ='R'),
+             NU_TN           =SIMP(statut='f',typ='R'),
+             G_LT            =SIMP(statut='o',typ='R'),
+             G_LN            =SIMP(statut='f',typ='R'),
+             G_TN            =SIMP(statut='f',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA_L         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             ALPHA_T         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             ALPHA_N         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             XT              =SIMP(statut='f',typ='R',defaut= 1. ),
+             XC              =SIMP(statut='f',typ='R',defaut= 1. ),
+             YT              =SIMP(statut='f',typ='R',defaut= 1. ),
+             YC              =SIMP(statut='f',typ='R',defaut= 1. ),
+             S_LT            =SIMP(statut='f',typ='R',defaut= 1. ),
+           ),
+           ELAS_ORTH_FO    =FACT(statut='f',min=0,max=1,
+             E_L             =SIMP(statut='o',typ=fonction),
+             E_T             =SIMP(statut='o',typ=fonction),
+             E_N             =SIMP(statut='o',typ=fonction),
+             NU_LT           =SIMP(statut='o',typ=fonction),
+             NU_LN           =SIMP(statut='o',typ=fonction),
+             NU_TN           =SIMP(statut='o',typ=fonction),
+             G_LT            =SIMP(statut='o',typ=fonction),
+             G_LN            =SIMP(statut='o',typ=fonction),
+             G_TN            =SIMP(statut='o',typ=fonction),
+             RHO             =SIMP(statut='f',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1. ),
+             ALPHA_L         =SIMP(statut='f',typ=fonction),
+             ALPHA_T         =SIMP(statut='f',typ=fonction),
+             ALPHA_N         =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST",) ),
+           ),
+           ELAS_THM        =FACT(statut='f',min=0,max=1,
+             RHO_S           =SIMP(statut='o',typ='R'),
+             UN_SUR_KS       =SIMP(statut='o',typ='R'),
+             E               =SIMP(statut='f',typ='R'),
+             KB              =SIMP(statut='f',typ='R'),
+             D_KB_T          =SIMP(statut='f',typ='R'),
+             ALPHA_S         =SIMP(statut='f',typ='R'),
+             ALPHA_D         =SIMP(statut='f',typ='R'),
+           ),
+           SURF_ETAT_SATU  =FACT(statut='f',min=0,max=1,
+             E_CHAR          =SIMP(statut='o',typ='R'),
+             E_DECHAR        =SIMP(statut='o',typ='R'),
+             XN              =SIMP(statut='f',typ='R'),
+             RF              =SIMP(statut='f',typ='R'),
+             EV_KB           =SIMP(statut='f',typ='R'),
+             EV_XM           =SIMP(statut='f',typ='R'),
+             D_E_T           =SIMP(statut='f',typ='R'),
+             ALPHA0          =SIMP(statut='f',typ='R'),
+             ALPHA1          =SIMP(statut='f',typ='R'),
+             ALPHA2          =SIMP(statut='f',typ='R'),
+             ALPHA3          =SIMP(statut='f',typ='R'),
+             ALPHA_S         =SIMP(statut='f',typ='R'),
+             ANG_FRT         =SIMP(statut='o',typ='R'),
+             COHE            =SIMP(statut='o',typ='R'),
+             RESI_TRAC       =SIMP(statut='o',typ='R'),
+           ),
+           CAM_CLAY_THM    =FACT(statut='f',min=0,max=1,
+             NU              =SIMP(statut='f',typ='R'),
+             LAMBDA          =SIMP(statut='o',typ='R'),
+             KAPA            =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='f',typ='R'),
+             PRES_CRIT       =SIMP(statut='f',typ='R'),
+             GAMA            =SIMP(statut='o',typ='R'),
+             A0_PC           =SIMP(statut='o',typ='R'),
+             A1_PC           =SIMP(statut='f',typ='R'),
+             A2_PC           =SIMP(statut='f',typ='R'),
+             ALPHA0_PC       =SIMP(statut='f',typ='R'),
+             ALPHA1_PC       =SIMP(statut='f',typ='R'),
+             ALPHA2_PC       =SIMP(statut='f',typ='R'),
+             ALPHA3_PC       =SIMP(statut='f',typ='R'),
+             ALPHA_S         =SIMP(statut='f',typ='R'),
+                         ),
+           SURF_ETAT_NSAT  =FACT(statut='f',min=0,max=1,
+             E_CHAR          =SIMP(statut='o',typ='R'),
+             E_DECHAR        =SIMP(statut='o',typ='R'),
+             XN              =SIMP(statut='f',typ='R'),
+             RF              =SIMP(statut='f',typ='R'),
+             EV_KB           =SIMP(statut='f',typ='R'),
+             EV_XM           =SIMP(statut='f',typ='R'),
+             EV_A            =SIMP(statut='f',typ='R'),
+             EV_B            =SIMP(statut='f',typ='R'),
+             EV_CT           =SIMP(statut='f',typ='R'),
+             EV_SIGB         =SIMP(statut='f',typ='R'),
+             D_E_T           =SIMP(statut='f',typ='R'),
+             D_E_SUCC        =SIMP(statut='f',typ='R'),
+             ANG_FRT         =SIMP(statut='o',typ='R'),
+             COHE            =SIMP(statut='o',typ='R'),
+             D_COEH_SUCC     =SIMP(statut='f',typ='R'),
+             ANG_FRT_ULT     =SIMP(statut='f',typ='R'),
+             SUCC_ULTM       =SIMP(statut='f',typ='R'),
+             RESI_TRAC       =SIMP(statut='f',typ='R'),
+             A_SURF_SATU     =SIMP(statut='f',typ='R'),
+             B_SURF_SATU     =SIMP(statut='f',typ='R'),
+             C_SURF_SATU     =SIMP(statut='f',typ='R'),
+             D_SURF_SATU     =SIMP(statut='f',typ='R'),
+           ),
+           ELAS_COQUE      =FACT(statut='f',min=0,max=1,
+             regles=(EXCLUS('MEMB_L','M_LLLL',),
+                     PRESENT_PRESENT('MEMB_L','MEMB_LT', 'MEMB_T','MEMB_G_LT','FLEX_L','FLEX_LT',
+                                     'FLEX_T','FLEX_G_LT','CISA_L','CISA_T',),
+                     PRESENT_PRESENT('M_LLLL','M_LLTT','M_LLLT','M_TTTT','M_TTLT','M_LTLT','F_LLLL',
+                                     'F_LLTT','F_LLLT','F_TTTT','F_TTLT','F_LTLT','MF_LLLL',
+                                     'MF_LLTT','MF_LLLT','MF_TTTT','MF_TTLT','MF_LTLT','MC_LLLZ',
+                                     'MC_LLTZ','MC_TTLZ','MC_TTTZ','MC_LTLZ','MC_LTTZ','FC_LLLZ',
+                                     'FC_LLTZ','FC_TTLZ','FC_TTTZ','FC_LTLZ','FC_LTTZ','C_LZLZ',
+                                     'C_LZTZ','C_TZTZ'),),
+             MEMB_L          =SIMP(statut='f',typ='R'),
+             MEMB_LT         =SIMP(statut='f',typ='R'),
+             MEMB_T          =SIMP(statut='f',typ='R'),
+             MEMB_G_LT       =SIMP(statut='f',typ='R'),
+             FLEX_L          =SIMP(statut='f',typ='R'),
+             FLEX_LT         =SIMP(statut='f',typ='R'),
+             FLEX_T          =SIMP(statut='f',typ='R'),
+             FLEX_G_LT       =SIMP(statut='f',typ='R'),
+             CISA_L          =SIMP(statut='f',typ='R'),
+             CISA_T          =SIMP(statut='f',typ='R'),
+             M_LLLL          =SIMP(statut='f',typ='R'),
+             M_LLTT          =SIMP(statut='f',typ='R'),
+             M_LLLT          =SIMP(statut='f',typ='R'),
+             M_TTTT          =SIMP(statut='f',typ='R'),
+             M_TTLT          =SIMP(statut='f',typ='R'),
+             M_LTLT          =SIMP(statut='f',typ='R'),
+             F_LLLL          =SIMP(statut='f',typ='R'),
+             F_LLTT          =SIMP(statut='f',typ='R'),
+             F_LLLT          =SIMP(statut='f',typ='R'),
+             F_TTTT          =SIMP(statut='f',typ='R'),
+             F_TTLT          =SIMP(statut='f',typ='R'),
+             F_LTLT          =SIMP(statut='f',typ='R'),
+             MF_LLLL         =SIMP(statut='f',typ='R'),
+             MF_LLTT         =SIMP(statut='f',typ='R'),
+             MF_LLLT         =SIMP(statut='f',typ='R'),
+             MF_TTTT         =SIMP(statut='f',typ='R'),
+             MF_TTLT         =SIMP(statut='f',typ='R'),
+             MF_LTLT         =SIMP(statut='f',typ='R'),
+             MC_LLLZ         =SIMP(statut='f',typ='R'),
+             MC_LLTZ         =SIMP(statut='f',typ='R'),
+             MC_TTLZ         =SIMP(statut='f',typ='R'),
+             MC_TTTZ         =SIMP(statut='f',typ='R'),
+             MC_LTLZ         =SIMP(statut='f',typ='R'),
+             MC_LTTZ         =SIMP(statut='f',typ='R'),
+             FC_LLLZ         =SIMP(statut='f',typ='R'),
+             FC_LLTZ         =SIMP(statut='f',typ='R'),
+             FC_TTLZ         =SIMP(statut='f',typ='R'),
+             FC_TTTZ         =SIMP(statut='f',typ='R'),
+             FC_LTLZ         =SIMP(statut='f',typ='R'),
+             FC_LTTZ         =SIMP(statut='f',typ='R'),
+             C_LZLZ          =SIMP(statut='f',typ='R'),
+             C_LZTZ          =SIMP(statut='f',typ='R'),
+             C_TZTZ          =SIMP(statut='f',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+           ),
+           ELAS_COQUE_FO   =FACT(statut='f',min=0,max=1,
+             regles=(EXCLUS('MEMB_L','M_LLLL',),
+                     PRESENT_PRESENT('MEMB_L','MEMB_LT','MEMB_T','MEMB_G_LT','FLEX_L','FLEX_LT',
+                                     'FLEX_T','FLEX_G_LT','CISA_L','CISA_T',),
+                     PRESENT_PRESENT('M_LLLL','M_LLTT','M_LLLT','M_TTTT','M_TTLT','M_LTLT','F_LLLL',
+                                     'F_LLTT','F_LLLT','F_TTTT','F_TTLT','F_LTLT','MF_LLLL','MF_LLTT',
+                                     'MF_LLLT','MF_TTTT','MF_TTLT','MF_LTLT','MC_LLLZ','MC_LLTZ',
+                                     'MC_TTLZ','MC_TTTZ','MC_LTLZ','MC_LTTZ','FC_LLLZ','FC_LLTZ',
+                                     'FC_TTLZ','FC_TTTZ','FC_LTLZ','FC_LTTZ','C_LZLZ','C_LZTZ','C_TZTZ'),),
+             MEMB_L          =SIMP(statut='f',typ=fonction),
+             MEMB_LT         =SIMP(statut='f',typ=fonction),
+             MEMB_T          =SIMP(statut='f',typ=fonction),
+             MEMB_G_LT       =SIMP(statut='f',typ=fonction),
+             FLEX_L          =SIMP(statut='f',typ=fonction),
+             FLEX_LT         =SIMP(statut='f',typ=fonction),
+             FLEX_T          =SIMP(statut='f',typ=fonction),
+             FLEX_G_LT       =SIMP(statut='f',typ=fonction),
+             CISA_L          =SIMP(statut='f',typ=fonction),
+             CISA_T          =SIMP(statut='f',typ=fonction),
+             M_LLLL          =SIMP(statut='f',typ=fonction),
+             M_LLTT          =SIMP(statut='f',typ=fonction),
+             M_LLLT          =SIMP(statut='f',typ=fonction),
+             M_TTTT          =SIMP(statut='f',typ=fonction),
+             M_TTLT          =SIMP(statut='f',typ=fonction),
+             M_LTLT          =SIMP(statut='f',typ=fonction),
+             F_LLLL          =SIMP(statut='f',typ=fonction),
+             F_LLTT          =SIMP(statut='f',typ=fonction),
+             F_LLLT          =SIMP(statut='f',typ=fonction),
+             F_TTTT          =SIMP(statut='f',typ=fonction),
+             F_TTLT          =SIMP(statut='f',typ=fonction),
+             F_LTLT          =SIMP(statut='f',typ=fonction),
+             MF_LLLL         =SIMP(statut='f',typ=fonction),
+             MF_LLTT         =SIMP(statut='f',typ=fonction),
+             MF_LLLT         =SIMP(statut='f',typ=fonction),
+             MF_TTTT         =SIMP(statut='f',typ=fonction),
+             MF_TTLT         =SIMP(statut='f',typ=fonction),
+             MF_LTLT         =SIMP(statut='f',typ=fonction),
+             MC_LLLZ         =SIMP(statut='f',typ=fonction),
+             MC_LLTZ         =SIMP(statut='f',typ=fonction),
+             MC_TTLZ         =SIMP(statut='f',typ=fonction),
+             MC_TTTZ         =SIMP(statut='f',typ=fonction),
+             MC_LTLZ         =SIMP(statut='f',typ=fonction),
+             MC_LTTZ         =SIMP(statut='f',typ=fonction),
+             FC_LLLZ         =SIMP(statut='f',typ=fonction),
+             FC_LLTZ         =SIMP(statut='f',typ=fonction),
+             FC_TTLZ         =SIMP(statut='f',typ=fonction),
+             FC_TTTZ         =SIMP(statut='f',typ=fonction),
+             FC_LTLZ         =SIMP(statut='f',typ=fonction),
+             FC_LTTZ         =SIMP(statut='f',typ=fonction),
+             C_LZLZ          =SIMP(statut='f',typ=fonction),
+             C_LZTZ          =SIMP(statut='f',typ=fonction),
+             C_TZTZ          =SIMP(statut='f',typ=fonction),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST") ),
+           ),
+           APPUI_ELAS      =FACT(statut='f',min=0,max=1,
+             E_N             =SIMP(statut='o',typ='R'),
+             E_TAN           =SIMP(statut='f',typ='R',defaut= 0.E+0),
+           ),
+           CABLE           =FACT(statut='f',min=0,max=1,
+             E               =SIMP(statut='o',typ='R'),
+             EC_SUR_E        =SIMP(statut='f',typ='R',defaut= 1.E-4 ),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+             AMOR_ALPHA      =SIMP(statut='f',typ='R'),
+             AMOR_BETA       =SIMP(statut='f',typ='R'),
+           ),
+#
+# comportement mécanique non linéaire
+#
+           TRACTION        =FACT(statut='f',min=0,max=1,
+             SIGM            =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P3         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
+             VERI_P4         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
+           ),
+           ECRO_LINE       =FACT(statut='f',min=0,max=1,
+             D_SIGM_EPSI     =SIMP(statut='o',typ='R'),
+             SY              =SIMP(statut='o',typ='R'),
+           ),
+           ECRO_LINE_FO    =FACT(statut='f',min=0,max=1,
+             D_SIGM_EPSI     =SIMP(statut='o',typ=fonction),
+             SY              =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           PRAGER          =FACT(statut='f',min=0,max=1,
+             C               =SIMP(statut='o',typ='R'),
+           ),
+           PRAGER_FO       =FACT(statut='f',min=0,max=1,
+             C               =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           ECRO_FLEJOU     =FACT(statut='f',min=0,max=1,
+             EP              =SIMP(statut='o',typ='R'),
+             SY              =SIMP(statut='o',typ='R'),
+             SU              =SIMP(statut='o',typ='R'),
+             PUISS           =SIMP(statut='o',typ='R'),
+           ),
+           TAHERI          =FACT(statut='f',min=0,max=1,
+             R_0             =SIMP(statut='o',typ='R'),
+             ALPHA           =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             A               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             C1              =SIMP(statut='o',typ='R'),
+             C_INF           =SIMP(statut='o',typ='R'),
+             S               =SIMP(statut='o',typ='R'),
+           ),
+           TAHERI_FO       =FACT(statut='f',min=0,max=1,
+             R_0             =SIMP(statut='o',typ=fonction),
+             ALPHA           =SIMP(statut='o',typ=fonction),
+             M               =SIMP(statut='o',typ=fonction),
+             A               =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             C1              =SIMP(statut='o',typ=fonction),
+             C_INF           =SIMP(statut='o',typ=fonction),
+             S               =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           ROUSSELIER      =FACT(statut='f',min=0,max=1,
+             D               =SIMP(statut='o',typ='R'),
+             SIGM_1          =SIMP(statut='o',typ='R'),
+             PORO_INIT       =SIMP(statut='o',typ='R'),
+             PORO_CRIT       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_ACCE       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_LIMI       =SIMP(statut='f',typ='R',defaut= 0.999 ),
+             D_SIGM_EPSI_NORM=SIMP(statut='f',typ='R',defaut= 1. ),
+             AN              =SIMP(statut='f',typ='R',defaut= 0. ),
+           ),
+           ROUSSELIER_FO   =FACT(statut='f',min=0,max=1,
+             D               =SIMP(statut='o',typ=fonction),
+             SIGM_1          =SIMP(statut='o',typ=fonction),
+             PORO_INIT       =SIMP(statut='o',typ=fonction),
+             PORO_CRIT       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_ACCE       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_LIMI       =SIMP(statut='f',typ='R',defaut= 0.999 ),
+             D_SIGM_EPSI_NORM=SIMP(statut='f',typ='R',defaut= 1. ),
+             AN              =SIMP(statut='f',typ='R',defaut= 0. ),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           ROUSS_VISC      =FACT(statut='f',min=0,max=1,
+             SIGM_0          =SIMP(statut='o',typ='R'),
+             EPSI_0          =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+           ),
+           CHABOCHE        =FACT(statut='f',min=0,max=1,
+             R_I             =SIMP(statut='o',typ='R'),
+             R_0             =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             W               =SIMP(statut='o',typ='R'),
+             A1              =SIMP(statut='o',typ='R'),
+             A2              =SIMP(statut='o',typ='R'),
+             C1              =SIMP(statut='o',typ='R'),
+             C2              =SIMP(statut='o',typ='R'),
+           ),
+           CIN1_CHAB  =FACT(statut='f',min=0,max=1,
+             R_0             =SIMP(statut='o',typ='R'),
+             R_I             =SIMP(statut='f',typ='R'),
+             B               =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+             C_I             =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+             W               =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+             G_0             =SIMP(statut='o',typ='R'),
+             A_I             =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           ),
+           CIN1_CHAB_FO  =FACT(statut='f',min=0,max=1,
+             R_0             =SIMP(statut='o',typ=fonction),
+             R_I             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             C_I             =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             W               =SIMP(statut='o',typ=fonction),
+             G_0             =SIMP(statut='o',typ=fonction),
+             A_I             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           CIN2_CHAB  =FACT(statut='f',min=0,max=1,
+             R_0             =SIMP(statut='o',typ='R'),
+             R_I             =SIMP(statut='f',typ='R'),
+             B               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             C1_I            =SIMP(statut='o',typ='R'),
+             C2_I            =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='f',typ='R',defaut= 1.),
+             W               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             G1_0            =SIMP(statut='o',typ='R'),
+             G2_0            =SIMP(statut='o',typ='R'),
+             A_I             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+           ),
+           CIN2_CHAB_FO  =FACT(statut='f',min=0,max=1,
+             R_0             =SIMP(statut='o',typ=fonction),
+             R_I             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             C1_I            =SIMP(statut='o',typ=fonction),
+             C2_I            =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             W               =SIMP(statut='o',typ=fonction),
+             G1_0            =SIMP(statut='o',typ=fonction),
+             G2_0            =SIMP(statut='o',typ=fonction),
+             A_I             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           VISCOCHAB       =FACT(statut='f',min=0,max=1,
+             K_0             =SIMP(statut='o',typ='R'),
+             A_K             =SIMP(statut='o',typ='R'),
+             A_R             =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             ALP             =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             M_R             =SIMP(statut='o',typ='R'),
+             G_R             =SIMP(statut='o',typ='R'),
+             MU              =SIMP(statut='o',typ='R'),
+             Q_M             =SIMP(statut='o',typ='R'),
+             Q_0             =SIMP(statut='o',typ='R'),
+             QR_0            =SIMP(statut='o',typ='R'),
+             ETA             =SIMP(statut='o',typ='R'),
+             C1              =SIMP(statut='o',typ='R'),
+             M_1             =SIMP(statut='o',typ='R'),
+             D1              =SIMP(statut='o',typ='R'),
+             G_X1            =SIMP(statut='o',typ='R'),
+             G1_0            =SIMP(statut='o',typ='R'),
+             C2              =SIMP(statut='o',typ='R'),
+             M_2             =SIMP(statut='o',typ='R'),
+             D2              =SIMP(statut='o',typ='R'),
+             G_X2            =SIMP(statut='o',typ='R'),
+             G2_0            =SIMP(statut='o',typ='R'),
+             A_I             =SIMP(statut='o',typ='R'),
+           ),
+           VISCOCHAB_FO    =FACT(statut='f',min=0,max=1,
+             K_0             =SIMP(statut='o',typ=fonction),
+             A_K             =SIMP(statut='o',typ=fonction),
+             A_R             =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             N               =SIMP(statut='o',typ=fonction),
+             ALP             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             M_R             =SIMP(statut='o',typ=fonction),
+             G_R             =SIMP(statut='o',typ=fonction),
+             MU              =SIMP(statut='o',typ=fonction),
+             Q_M             =SIMP(statut='o',typ=fonction),
+             Q_0             =SIMP(statut='o',typ=fonction),
+             QR_0            =SIMP(statut='o',typ=fonction),
+             ETA             =SIMP(statut='o',typ=fonction),
+             C1              =SIMP(statut='o',typ=fonction),
+             M_1             =SIMP(statut='o',typ=fonction),
+             D1              =SIMP(statut='o',typ=fonction),
+             G_X1            =SIMP(statut='o',typ=fonction),
+             G1_0            =SIMP(statut='o',typ=fonction),
+             C2              =SIMP(statut='o',typ=fonction),
+             M_2             =SIMP(statut='o',typ=fonction),
+             D2              =SIMP(statut='o',typ=fonction),
+             G_X2            =SIMP(statut='o',typ=fonction),
+             G2_0            =SIMP(statut='o',typ=fonction),
+             A_I             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           POLY_CFC        =FACT(statut='f',min=0,max=1,
+             TEXTURE         =SIMP(statut='o',typ=(tabl_texture) ),
+             DL              =SIMP(statut='f',typ='R'),
+             DA              =SIMP(statut='f',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             TAU_0           =SIMP(statut='o',typ='R'),
+             Q1              =SIMP(statut='o',typ='R'),
+             B1              =SIMP(statut='o',typ='R'),
+             HL              =SIMP(statut='o',typ='R'),
+             Q2              =SIMP(statut='o',typ='R'),
+             B2              =SIMP(statut='o',typ='R'),
+             C1              =SIMP(statut='o',typ='R'),
+             D1              =SIMP(statut='o',typ='R'),
+             C2              =SIMP(statut='o',typ='R'),
+           ),
+           POLY_CFC_FO     =FACT(statut='f',min=0,max=1,
+             TEXTURE         =SIMP(statut='o',typ=(tabl_texture) ),
+             DL              =SIMP(statut='o',typ=fonction),
+             DA              =SIMP(statut='o',typ=fonction),
+             N               =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             TAU_0           =SIMP(statut='o',typ=fonction),
+             Q1              =SIMP(statut='o',typ=fonction),
+             B1              =SIMP(statut='o',typ=fonction),
+             HL              =SIMP(statut='o',typ=fonction),
+             Q2              =SIMP(statut='o',typ=fonction),
+             B2              =SIMP(statut='o',typ=fonction),
+             C1              =SIMP(statut='o',typ=fonction),
+             D1              =SIMP(statut='o',typ=fonction),
+             C2              =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           NORTON_HOFF     =FACT(statut='f',min=0,max=1,
+             SY              =SIMP(statut='o',typ='R'),
+           ),
+           LEMAITRE        =FACT(statut='f',min=0,max=1,
+             N               =SIMP(statut='o',typ='R'),
+             UN_SUR_K        =SIMP(statut='o',typ='R'),
+             UN_SUR_M        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           ZIRC_CYRA2      =FACT(statut='f',min=0,max=1,
+             EPSI_FAB        =SIMP(statut='o',typ=fonction),
+             TEMP_RECUIT     =SIMP(statut='o',typ=fonction),
+             FLUX_PHI        =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
+           ),
+           ZIRC_EPRI       =FACT(statut='f',min=0,max=1,
+             FLUX_PHI        =SIMP(statut='o',typ='R'),
+             R_P             =SIMP(statut='o',typ='R'),
+             THETA_MAX       =SIMP(statut='o',typ='R'),
+           ),
+           LEMAITRE_FO     =FACT(statut='f',min=0,max=1,
+             N               =SIMP(statut='o',typ=fonction),
+             UN_SUR_K        =SIMP(statut='o',typ=fonction),
+             UN_SUR_M        =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           GRAN_IRRA       =FACT(statut='f',min=0,max=1,
+             A               =SIMP(statut='f',typ='R',defaut= 0.E+0),
+             B               =SIMP(statut='f',typ='R',defaut= 0.E+0),
+             S               =SIMP(statut='f',typ='R',defaut= 0.E+0),
+           ),
+           FLU_IRRA       =FACT(statut='f',min=0,max=1,
+             QSR_K           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             BETA            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PHI_ZERO        =SIMP(statut='f',typ='R',defaut= 1.E+20),
+             L               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           OHNO            =FACT(statut='f',min=0,max=1,
+             R_I             =SIMP(statut='o',typ='R'),
+             R_0             =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             PHI             =SIMP(statut='o',typ='R'),
+             A1              =SIMP(statut='o',typ='R'),
+             A2              =SIMP(statut='o',typ='R'),
+             A3              =SIMP(statut='o',typ='R'),
+             A4              =SIMP(statut='o',typ='R'),
+             A5              =SIMP(statut='o',typ='R'),
+             GAMMA1          =SIMP(statut='o',typ='R'),
+             GAMMA2          =SIMP(statut='o',typ='R'),
+             GAMMA3          =SIMP(statut='o',typ='R'),
+             GAMMA4          =SIMP(statut='o',typ='R'),
+             GAMMA5          =SIMP(statut='o',typ='R'),
+             M1              =SIMP(statut='o',typ='R'),
+             M2              =SIMP(statut='o',typ='R'),
+             M3              =SIMP(statut='o',typ='R'),
+             M4              =SIMP(statut='o',typ='R'),
+             M5              =SIMP(statut='o',typ='R'),
+                           ),
+           OHNO_FO         =FACT(statut='f',min=0,max=1,
+             R_I             =SIMP(statut='o',typ=fonction),
+             R_0             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             PHI             =SIMP(statut='o',typ=fonction),
+             A1              =SIMP(statut='o',typ=fonction),
+             A2              =SIMP(statut='o',typ=fonction),
+             A3              =SIMP(statut='o',typ=fonction),
+             A4              =SIMP(statut='o',typ=fonction),
+             A5              =SIMP(statut='o',typ=fonction),
+             GAMMA1          =SIMP(statut='o',typ=fonction),
+             GAMMA2          =SIMP(statut='o',typ=fonction),
+             GAMMA3          =SIMP(statut='o',typ=fonction),
+             GAMMA4          =SIMP(statut='o',typ=fonction),
+             GAMMA5          =SIMP(statut='o',typ=fonction),
+             M1              =SIMP(statut='o',typ=fonction),
+             M2              =SIMP(statut='o',typ=fonction),
+             M3              =SIMP(statut='o',typ=fonction),
+             M4              =SIMP(statut='o',typ=fonction),
+             M5              =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           LMARC           =FACT(statut='f',min=0,max=1,
+             DE_0            =SIMP(statut='o',typ='R'),
+             R_0             =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             Y_I             =SIMP(statut='o',typ='R'),
+             Y_0             =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             A_0             =SIMP(statut='o',typ='R'),
+             RM              =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             P               =SIMP(statut='o',typ='R'),
+             P1              =SIMP(statut='o',typ='R'),
+             P2              =SIMP(statut='o',typ='R'),
+             M11             =SIMP(statut='o',typ='R'),
+             M22             =SIMP(statut='o',typ='R'),
+             M33             =SIMP(statut='o',typ='R'),
+             M66             =SIMP(statut='o',typ='R'),
+             N11             =SIMP(statut='o',typ='R'),
+             N22             =SIMP(statut='o',typ='R'),
+             N33             =SIMP(statut='o',typ='R'),
+             N66             =SIMP(statut='o',typ='R'),
+             Q11             =SIMP(statut='o',typ='R'),
+             Q22             =SIMP(statut='o',typ='R'),
+             Q33             =SIMP(statut='o',typ='R'),
+             Q66             =SIMP(statut='o',typ='R'),
+             R11             =SIMP(statut='o',typ='R'),
+             R22             =SIMP(statut='o',typ='R'),
+             R33             =SIMP(statut='o',typ='R'),
+             R66             =SIMP(statut='o',typ='R'),
+           ),
+           LMARC_FO        =FACT(statut='f',min=0,max=1,
+             DE_0            =SIMP(statut='o',typ=fonction),
+             R_0             =SIMP(statut='o',typ=fonction),
+             N               =SIMP(statut='o',typ=fonction),
+             K               =SIMP(statut='o',typ=fonction),
+             Y_I             =SIMP(statut='o',typ=fonction),
+             Y_0             =SIMP(statut='o',typ=fonction),
+             B               =SIMP(statut='o',typ=fonction),
+             A_0             =SIMP(statut='o',typ=fonction),
+             RM              =SIMP(statut='o',typ=fonction),
+             M               =SIMP(statut='o',typ=fonction),
+             P               =SIMP(statut='o',typ=fonction),
+             P1              =SIMP(statut='o',typ=fonction),
+             P2              =SIMP(statut='o',typ=fonction),
+             M11             =SIMP(statut='o',typ=fonction),
+             M22             =SIMP(statut='o',typ=fonction),
+             M33             =SIMP(statut='o',typ=fonction),
+             M66             =SIMP(statut='o',typ=fonction),
+             N11             =SIMP(statut='o',typ=fonction),
+             N22             =SIMP(statut='o',typ=fonction),
+             N33             =SIMP(statut='o',typ=fonction),
+             N66             =SIMP(statut='o',typ=fonction),
+             Q11             =SIMP(statut='o',typ=fonction),
+             Q22             =SIMP(statut='o',typ=fonction),
+             Q33             =SIMP(statut='o',typ=fonction),
+             Q66             =SIMP(statut='o',typ=fonction),
+             R11             =SIMP(statut='o',typ=fonction),
+             R22             =SIMP(statut='o',typ=fonction),
+             R33             =SIMP(statut='o',typ=fonction),
+             R66             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           VMIS_POUTRE     =FACT(statut='f',min=0,max=1,
+             NP              =SIMP(statut='o',typ='R'),
+             MEY             =SIMP(statut='o',typ='R'),
+             MPY             =SIMP(statut='o',typ='R'),
+             CAY             =SIMP(statut='o',typ='R'),
+             CBY             =SIMP(statut='o',typ='R'),
+             MEZ             =SIMP(statut='o',typ='R'),
+             MPZ             =SIMP(statut='o',typ='R'),
+             CAZ             =SIMP(statut='o',typ='R'),
+             CBZ             =SIMP(statut='o',typ='R'),
+             MPX             =SIMP(statut='o',typ='R'),
+           ),
+           VMIS_POUTRE_FO  =FACT(statut='f',min=0,max=1,
+             NP              =SIMP(statut='o',typ=fonction),
+             MEY             =SIMP(statut='o',typ=fonction),
+             MPY             =SIMP(statut='o',typ=fonction),
+             CAY             =SIMP(statut='o',typ=fonction),
+             CBY             =SIMP(statut='o',typ=fonction),
+             MEZ             =SIMP(statut='o',typ=fonction),
+             MPZ             =SIMP(statut='o',typ=fonction),
+             CAZ             =SIMP(statut='o',typ=fonction),
+             CBZ             =SIMP(statut='o',typ=fonction),
+             MPX             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           ARME            =FACT(statut='f',min=0,max=1,
+             KYE             =SIMP(statut='o',typ='R'),
+             DLE             =SIMP(statut='o',typ='R'),
+             KYP             =SIMP(statut='o',typ='R'),
+             DLP             =SIMP(statut='o',typ='R'),
+             KYG             =SIMP(statut='o',typ='R'),
+           ),
+           ASSE_CORN       =FACT(statut='f',min=0,max=1,
+             NU_1            =SIMP(statut='o',typ='R'),
+             MU_1            =SIMP(statut='o',typ='R'),
+             DXU_1           =SIMP(statut='o',typ='R'),
+             DRYU_1          =SIMP(statut='o',typ='R'),
+             C_1             =SIMP(statut='o',typ='R'),
+             NU_2            =SIMP(statut='o',typ='R'),
+             MU_2            =SIMP(statut='o',typ='R'),
+             DXU_2           =SIMP(statut='o',typ='R'),
+             DRYU_2          =SIMP(statut='o',typ='R'),
+             C_2             =SIMP(statut='o',typ='R'),
+             KY              =SIMP(statut='o',typ='R'),
+             KZ              =SIMP(statut='o',typ='R'),
+             KRX             =SIMP(statut='o',typ='R'),
+             KRZ             =SIMP(statut='o',typ='R'),
+           ),
+           DIS_CONTACT     =FACT(statut='f',min=0,max=1,
+             RIGI_NOR        =SIMP(statut='f',typ='R' ),
+             DIST_1          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             DIST_2          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             RIGI_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             AMOR_NOR        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             AMOR_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             JEU             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             KT_ULTM         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             EFFO_N_INIT     =SIMP(statut='f',typ='R'),
+             regles=(EXCLUS('RIGI_N_FO','RIGI_N_IRRA',),),
+             RIGI_N_IRRA     =SIMP(statut='f',typ=fonction),
+             RIGI_N_FO       =SIMP(statut='f',typ=fonction),
+             RELA_MZ         =SIMP(statut='f',typ=fonction),
+             C_PRAGER_MZ     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="DRZ",into=("DRZ",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
+           ),
+           NADAI_B         =FACT(statut='f',min=0,max=1,
+             F_C             =SIMP(statut='o',typ='R'),
+             F_T             =SIMP(statut='o',typ='R'),
+             CRIT_E_C        =SIMP(statut='o',typ='R'),
+             EPSP_P_C        =SIMP(statut='o',typ='R'),
+             EPSP_R_C        =SIMP(statut='o',typ='R'),
+             EPSI_R_T        =SIMP(statut='o',typ='R'),
+             FAC_T_C         =SIMP(statut='o',typ='R'),
+           ),
+           BETON_DOUBLE_DP =FACT(statut='f',min=0,max=1,
+             F_C             =SIMP(statut='o',typ=fonction),
+             F_T             =SIMP(statut='o',typ=fonction),
+             COEF_BIAX       =SIMP(statut='o',typ=fonction),
+             ENER_COMP_RUPT  =SIMP(statut='o',typ=fonction),
+             ENER_TRAC_RUPT  =SIMP(statut='o',typ=fonction),
+             COEF_ELAS_COMP  =SIMP(statut='o',typ='R'),
+             LONG_CARA       =SIMP(statut='f',typ='R'),
+             ECRO_COMP_P_PIC =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","PARABOLE") ),
+             ECRO_TRAC_P_PIC =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","EXPONENT") ),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="INST",into=("TEMP","INST",) ),
+             VERI_P3         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
+             VERI_P4         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
+           ),
+           LABORD_1D=FACT(statut='f',min=0 ,max=1,
+             Y01             =SIMP(statut='o',typ='R'),
+             Y02             =SIMP(statut='o',typ='R'),
+             A1              =SIMP(statut='o',typ='R'),
+             A2              =SIMP(statut='o',typ='R'),
+             B1              =SIMP(statut='o',typ='R'),
+             B2              =SIMP(statut='o',typ='R'),
+             BETA1           =SIMP(statut='o',typ='R'),
+             BETA2           =SIMP(statut='o',typ='R'),
+             SIGF            =SIMP(statut='o',typ='R'),
+           ),
+
+           VENDOCHAB       =FACT(statut='f',min=0,max=1,
+             S_VP            =SIMP(statut='o',typ='R'),
+             SEDVP1          =SIMP(statut='o',typ='R'),
+             SEDVP2          =SIMP(statut='o',typ='R'),
+             N_VP            =SIMP(statut='o',typ='R'),
+             M_VP            =SIMP(statut='o',typ='R'),
+             K_VP            =SIMP(statut='o',typ='R'),
+             R_D             =SIMP(statut='o',typ='R'),
+             A_D             =SIMP(statut='o',typ='R'),
+             K_D             =SIMP(statut='o',typ='R'),
+           ),
+           VENDOCHAB_FO    =FACT(statut='f',min=0,max=1,
+             S_VP            =SIMP(statut='o',typ=fonction),
+             SEDVP1          =SIMP(statut='o',typ=fonction),
+             SEDVP2          =SIMP(statut='o',typ=fonction),
+             N_VP            =SIMP(statut='o',typ=fonction),
+             M_VP            =SIMP(statut='o',typ=fonction),
+             K_VP            =SIMP(statut='o',typ=fonction),
+             R_D             =SIMP(statut='o',typ=fonction),
+             A_D             =SIMP(statut='o',typ=fonction),
+             K_D             =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="X",into=("X",) ),
+           ),
+           PINTO_MENEGOTTO =FACT(statut='f',min=0,max=1,
+             SY              =SIMP(statut='o',typ='R'),
+             EPSI_ULTM       =SIMP(statut='o',typ='R'),
+             SIGM_ULTM       =SIMP(statut='o',typ='R'),
+             ELAN            =SIMP(statut='f',typ='R',defaut= 4. ),
+             EPSP_HARD       =SIMP(statut='o',typ='R'),
+             R_PM            =SIMP(statut='f',typ='R',defaut= 20. ),
+             EP_SUR_E        =SIMP(statut='f',typ='R'),
+             A1_PM           =SIMP(statut='f',typ='R',defaut= 18.5 ),
+             A2_PM           =SIMP(statut='f',typ='R',defaut= 0.15 ),
+             A6_PM           =SIMP(statut='f',typ='R',defaut= 620. ),
+             C_PM            =SIMP(statut='f',typ='R',defaut= 0.5 ),
+             A_PM            =SIMP(statut='f',typ='R',defaut= 6.0E-3 ),
+           ),
+           BPEL_BETON      =FACT(statut='f',min=0,max=1,
+             PERT_FLUA       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PERT_RETR       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           BPEL_ACIER      =FACT(statut='f',min=0,max=1,
+             RELAX_1000      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             MU0_RELAX       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             SY              =SIMP(statut='o',typ='R'),
+             FROT_COURB      =SIMP(statut='o',typ='R'),
+             FROT_LINE       =SIMP(statut='o',typ='R'),
+           ),
+           CJS             =FACT(statut='f',min=0,max=1,
+             regles=(ENSEMBLE('B_CJS','C_CJS','MU_CJS','PCO',),
+                     ENSEMBLE('N_CJS','KP','RC',),
+                     PRESENT_ABSENT('A_CJS','B_CJS',),
+                     PRESENT_PRESENT('A_CJS','N_CJS',),
+                     PRESENT_PRESENT('B_CJS','N_CJS', ),),
+             BETA_CJS        =SIMP(statut='o',typ='R'),
+             RM              =SIMP(statut='o',typ='R'),
+             N_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             KP              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             RC              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             A_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             B_CJS           =SIMP(statut='f',typ='R',defaut= 1.0E+25 ),
+             C_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             GAMMA_CJS       =SIMP(statut='o',typ='R'),
+             MU_CJS          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PCO             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PA              =SIMP(statut='o',typ='R'),
+             Q_INIT          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             R_INIT          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           ECRO_ASYM_LINE  =FACT(statut='f',min=0,max=1,
+             DC_SIGM_EPSI    =SIMP(statut='o',typ='R'),
+             SY_C            =SIMP(statut='o',typ='R'),
+             DT_SIGM_EPSI    =SIMP(statut='o',typ='R'),
+             SY_T            =SIMP(statut='o',typ='R'),
+           ),
+           GRANGER_FP      =FACT(statut='f',min=0,max=1,
+             J1              =SIMP(statut='f',typ='R'),
+             J2              =SIMP(statut='f',typ='R'),
+             J3              =SIMP(statut='f',typ='R'),
+             J4              =SIMP(statut='f',typ='R'),
+             J5              =SIMP(statut='f',typ='R'),
+             J6              =SIMP(statut='f',typ='R'),
+             J7              =SIMP(statut='f',typ='R'),
+             J8              =SIMP(statut='f',typ='R'),
+             TAUX_1          =SIMP(statut='f',typ='R'),
+             TAUX_2          =SIMP(statut='f',typ='R'),
+             TAUX_3          =SIMP(statut='f',typ='R'),
+             TAUX_4          =SIMP(statut='f',typ='R'),
+             TAUX_5          =SIMP(statut='f',typ='R'),
+             TAUX_6          =SIMP(statut='f',typ='R'),
+             TAUX_7          =SIMP(statut='f',typ='R'),
+             TAUX_8          =SIMP(statut='f',typ='R'),
+             FONC_DESORP     =SIMP(statut='f',typ=fonction),
+             QSR_K           =SIMP(statut='f',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
+           ),
+           V_GRANGER_FP    =FACT(statut='f',min=0,max=1,
+             QSR_VEIL        =SIMP(statut='f',typ='R'),
+             FONC_V          =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
+           ),
+#
+# comportement thermique
+#
+           THER_NL         =FACT(statut='f',min=0,max=1,
+             regles=(UN_PARMI('BETA','RHO_CP', ),),
+             LAMBDA          =SIMP(statut='o',typ=fonction),
+             BETA            =SIMP(statut='f',typ=fonction),
+             RHO_CP          =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           THER_HYDR       =FACT(statut='f',min=0,max=1,
+             LAMBDA          =SIMP(statut='o',typ=fonction),
+             BETA            =SIMP(statut='f',typ=fonction),
+             AFFINITE        =SIMP(statut='o',typ=fonction),
+             CHALHYDR        =SIMP(statut='o',typ='R'),
+             QSR_K           =SIMP(statut='o',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("HYDR",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
+           ),
+           THER            =FACT(statut='f',min=0,max=1,
+             LAMBDA          =SIMP(statut='o',typ='R'),
+             RHO_CP          =SIMP(statut='f',typ='R'),
+           ),
+           THER_FO         =FACT(statut='f',min=0,max=1,
+             LAMBDA          =SIMP(statut='o',typ=fonction),
+             RHO_CP          =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
+           ),
+           THER_ORTH       =FACT(statut='f',min=0,max=1,
+             LAMBDA_L        =SIMP(statut='o',typ='R'),
+             LAMBDA_T        =SIMP(statut='o',typ='R'),
+             LAMBDA_N        =SIMP(statut='f',typ='R'),
+             RHO_CP          =SIMP(statut='f',typ='R'),
+           ),
+           THER_COQUE      =FACT(statut='f',min=0,max=1,
+             COND_LMM        =SIMP(statut='o',typ='R'),
+             COND_TMM        =SIMP(statut='o',typ='R'),
+             COND_LMP        =SIMP(statut='o',typ='R'),
+             COND_TMP        =SIMP(statut='o',typ='R'),
+             COND_LPP        =SIMP(statut='o',typ='R'),
+             COND_TPP        =SIMP(statut='o',typ='R'),
+             COND_LSI        =SIMP(statut='o',typ='R'),
+             COND_TSI        =SIMP(statut='o',typ='R'),
+             COND_NMM        =SIMP(statut='o',typ='R'),
+             COND_NMP        =SIMP(statut='o',typ='R'),
+             COND_NPP        =SIMP(statut='o',typ='R'),
+             COND_NSI        =SIMP(statut='o',typ='R'),
+             CMAS_MM         =SIMP(statut='f',typ='R'),
+             CMAS_MP         =SIMP(statut='f',typ='R'),
+             CMAS_PP         =SIMP(statut='f',typ='R'),
+             CMAS_SI         =SIMP(statut='f',typ='R'),
+           ),
+           THER_COQUE_FO   =FACT(statut='f',min=0,max=1,
+             COND_LMM        =SIMP(statut='o',typ=fonction),
+             COND_TMM        =SIMP(statut='o',typ=fonction),
+             COND_LMP        =SIMP(statut='o',typ=fonction),
+             COND_TMP        =SIMP(statut='o',typ=fonction),
+             COND_LPP        =SIMP(statut='o',typ=fonction),
+             COND_TPP        =SIMP(statut='o',typ=fonction),
+             COND_LSI        =SIMP(statut='o',typ=fonction),
+             COND_TSI        =SIMP(statut='o',typ=fonction),
+             COND_NMM        =SIMP(statut='o',typ=fonction),
+             COND_NMP        =SIMP(statut='o',typ=fonction),
+             COND_NPP        =SIMP(statut='o',typ=fonction),
+             COND_NSI        =SIMP(statut='o',typ=fonction),
+             CMAS_MM         =SIMP(statut='f',typ=fonction),
+             CMAS_MP         =SIMP(statut='f',typ=fonction),
+             CMAS_PP         =SIMP(statut='f',typ=fonction),
+             CMAS_SI         =SIMP(statut='f',typ=fonction),
+           ),
+           SECH_GRANGER    =FACT(statut='f',min=0,max=1,
+             A               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             QSR_K           =SIMP(statut='o',typ='R'),
+             TEMP_0_C        =SIMP(statut='o',typ='R'),
+           ),
+           SECH_MENSI      =FACT(statut='f',min=0,max=1,
+             A               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+           ),
+           SECH_BAZANT     =FACT(statut='f',min=0,max=1,
+             D1              =SIMP(statut='o',typ='R'),
+             ALPHA_BAZANT    =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             FONC_DESORP     =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           SECH_NAPPE      =FACT(statut='f',min=0,max=1,
+             FONCTION        =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TSEC",into=("TSEC",) ),
+           ),
+#
+# comportement métallurgique
+#
+           META_ACIER      =FACT(statut='f',min=0,max=1,
+             TRC             =SIMP(statut='o',typ=(tabl_trc) ),
+             AR3             =SIMP(statut='o',typ='R'),
+             ALPHA           =SIMP(statut='o',typ='R'),
+             MS0             =SIMP(statut='o',typ='R'),
+             AC1             =SIMP(statut='o',typ='R'),
+             AC3             =SIMP(statut='o',typ='R'),
+             TAUX_1          =SIMP(statut='o',typ='R'),
+             TAUX_3          =SIMP(statut='o',typ='R'),
+             LAMBDA0         =SIMP(statut='f',typ='R'),
+             QSR_K           =SIMP(statut='f',typ='R'),
+             D10             =SIMP(statut='f',typ='R'),
+             WSR_K           =SIMP(statut='f',typ='R'),
+           ),
+           META_ZIRC       =FACT(statut='f',min=0,max=1,
+             TDEQ            =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             TDC             =SIMP(statut='o',typ='R'),
+             AC              =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             QSR_K           =SIMP(statut='f',typ='R'),
+             TDR             =SIMP(statut='o',typ='R'),
+             AR              =SIMP(statut='o',typ='R'),
+             BR              =SIMP(statut='o',typ='R'),
+           ),
+           DURT_META       =FACT(statut='f',min=0,max=1,
+             F1_DURT         =SIMP(statut='o',typ='R'),
+             F2_DURT         =SIMP(statut='o',typ='R'),
+             F3_DURT         =SIMP(statut='o',typ='R'),
+             F4_DURT         =SIMP(statut='o',typ='R'),
+             C_DURT          =SIMP(statut='o',typ='R'),
+           ),
+           ELAS_META       =FACT(statut='f',min=0,max=1,
+             E               =SIMP(statut='o',typ='R'),
+             NU              =SIMP(statut='o',typ='R'),
+             F_ALPHA         =SIMP(statut='o',typ='R'),
+             C_ALPHA         =SIMP(statut='o',typ='R'),
+             PHASE_REFE      =SIMP(statut='o',typ='TXM',into=("CHAUD","FROID")),
+             EPSF_EPSC_TREF  =SIMP(statut='o',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+             F1_SY           =SIMP(statut='f',typ='R'),
+             F2_SY           =SIMP(statut='f',typ='R'),
+             F3_SY           =SIMP(statut='f',typ='R'),
+             F4_SY           =SIMP(statut='f',typ='R'),
+             C_SY            =SIMP(statut='f',typ='R'),
+             SY_MELANGE      =SIMP(statut='f',typ=fonction),
+             F1_S_VP         =SIMP(statut='f',typ='R'),
+             F2_S_VP         =SIMP(statut='f',typ='R'),
+             F3_S_VP         =SIMP(statut='f',typ='R'),
+             F4_S_VP         =SIMP(statut='f',typ='R'),
+             C_S_VP          =SIMP(statut='f',typ='R' ),
+             S_VP_MELANGE    =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",)),
+           ),
+           ELAS_META_FO    =FACT(statut='f',min=0,max=1,
+             E               =SIMP(statut='o',typ=fonction),
+             NU              =SIMP(statut='o',typ=fonction),
+             F_ALPHA         =SIMP(statut='o',typ=fonction),
+             C_ALPHA         =SIMP(statut='o',typ=fonction),
+             PHASE_REFE      =SIMP(statut='o',typ='TXM',into=("CHAUD","FROID")),
+             EPSF_EPSC_TREF  =SIMP(statut='o',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+             F1_SY           =SIMP(statut='f',typ=fonction),
+             F2_SY           =SIMP(statut='f',typ=fonction),
+             F3_SY           =SIMP(statut='f',typ=fonction),
+             F4_SY           =SIMP(statut='f',typ=fonction),
+             C_SY            =SIMP(statut='f',typ=fonction),
+             SY_MELANGE      =SIMP(statut='f',typ=fonction),
+             F1_S_VP         =SIMP(statut='f',typ=fonction),
+             F2_S_VP         =SIMP(statut='f',typ=fonction),
+             F3_S_VP         =SIMP(statut='f',typ=fonction),
+             F4_S_VP         =SIMP(statut='f',typ=fonction),
+             C_S_VP          =SIMP(statut='f',typ=fonction),
+             S_VP_MELANGE    =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",)),
+           ),
+           META_ECRO_LINE  =FACT(statut='f',min=0,max=1,
+             F1_D_SIGM_EPSI  =SIMP(statut='f',typ=fonction),
+             F2_D_SIGM_EPSI  =SIMP(statut='f',typ=fonction),
+             F3_D_SIGM_EPSI  =SIMP(statut='f',typ=fonction),
+             F4_D_SIGM_EPSI  =SIMP(statut='f',typ=fonction),
+             C_D_SIGM_EPSI   =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           META_TRACTION   =FACT(statut='f',min=0,max=1,
+             SIGM_F1         =SIMP(statut='f',typ=fonction),
+             SIGM_F2         =SIMP(statut='f',typ=fonction),
+             SIGM_F3         =SIMP(statut='f',typ=fonction),
+             SIGM_F4         =SIMP(statut='f',typ=fonction),
+             SIGM_C          =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",)),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           META_VISC_FO    =FACT(statut='f',min=0,max=1,
+             F1_ETA          =SIMP(statut='f',typ=fonction),
+             F1_N            =SIMP(statut='f',typ=fonction),
+             F1_C            =SIMP(statut='f',typ=fonction),
+             F1_M            =SIMP(statut='f',typ=fonction),
+             F2_ETA          =SIMP(statut='f',typ=fonction),
+             F2_N            =SIMP(statut='f',typ=fonction),
+             F2_C            =SIMP(statut='f',typ=fonction),
+             F2_M            =SIMP(statut='f',typ=fonction),
+             F3_ETA          =SIMP(statut='f',typ=fonction),
+             F3_N            =SIMP(statut='f',typ=fonction),
+             F3_C            =SIMP(statut='f',typ=fonction),
+             F3_M            =SIMP(statut='f',typ=fonction),
+             F4_ETA          =SIMP(statut='f',typ=fonction),
+             F4_N            =SIMP(statut='f',typ=fonction),
+             F4_C            =SIMP(statut='f',typ=fonction),
+             F4_M            =SIMP(statut='f',typ=fonction),
+             C_ETA           =SIMP(statut='f',typ=fonction),
+             C_N             =SIMP(statut='f',typ=fonction),
+             C_C             =SIMP(statut='f',typ=fonction),
+             C_M             =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           META_PT         =FACT(statut='f',min=0,max=1,
+             F1_K            =SIMP(statut='f',typ='R'),
+             F2_K            =SIMP(statut='f',typ='R'),
+             F3_K            =SIMP(statut='f',typ='R'),
+             F4_K            =SIMP(statut='f',typ='R'),
+             F1_D_F_META     =SIMP(statut='f',typ=fonction),
+             F2_D_F_META     =SIMP(statut='f',typ=fonction),
+             F3_D_F_META     =SIMP(statut='f',typ=fonction),
+             F4_D_F_META     =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",) ),
+           ),
+           META_RE         =FACT(statut='f',min=0,max=1,
+             C_F1_THETA      =SIMP(statut='f',typ='R'),
+             C_F2_THETA      =SIMP(statut='f',typ='R'),
+             C_F3_THETA      =SIMP(statut='f',typ='R'),
+             C_F4_THETA      =SIMP(statut='f',typ='R'),
+             F1_C_THETA      =SIMP(statut='f',typ='R'),
+             F2_C_THETA      =SIMP(statut='f',typ='R'),
+             F3_C_THETA      =SIMP(statut='f',typ='R'),
+             F4_C_THETA      =SIMP(statut='f',typ='R'),
+           ),
+#
+# comportement fluide
+#
+           FLUIDE          =FACT(statut='f',min=0,max=1,
+             regles=(EXCLUS('CELE_C','CELE_R'),),
+             RHO             =SIMP(statut='o',typ='R'),
+             CELE_C          =SIMP(statut='f',typ='C'),
+             CELE_R          =SIMP(statut='f',typ='R'),
+           ),
+           PORO_JOINT      =FACT(statut='f',min=0,max=1,
+             RHO_FLUI        =SIMP(statut='o',typ='R'),
+             ENTRO_FLUI      =SIMP(statut='o',typ='R'),
+             BIOT_M          =SIMP(statut='o',typ='R'),
+             C_0             =SIMP(statut='o',typ='R'),
+             T_R             =SIMP(statut='o',typ='R'),
+             ALPHA_M         =SIMP(statut='o',typ='R'),
+             LAMBDA_T        =SIMP(statut='o',typ='R'),
+             LAMBDA_H        =SIMP(statut='o',typ='R'),
+             SOURCE_INIT     =SIMP(statut='o',typ='R'),
+             OMEGA_0         =SIMP(statut='o',typ='R'),
+           ),
+           THM_LIQU        =FACT(statut='f',min=0,max=1,
+             RHO             =SIMP(statut='o',typ='R'),
+             UN_SUR_K        =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=fonction),
+             D_VISC_TEMP     =SIMP(statut='f',typ=fonction),
+             LAMBDA          =SIMP(statut='f',typ=fonction),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=fonction),
+             COEF_HENRY      =SIMP(statut='f',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           THM_GAZ         =FACT(statut='f',min=0,max=1,
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=fonction),
+             D_VISC_TEMP     =SIMP(statut='f',typ=fonction),
+             LAMBDA          =SIMP(statut='f',typ=fonction),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           THM_VAPE_GAZ    =FACT(statut='f',min=0,max=1,
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=fonction),
+             D_VISC_TEMP     =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           THM_INIT        =FACT(statut='f',min=0,max=1,
+             TEMP            =SIMP(statut='o',typ='R'),
+             PRE1            =SIMP(statut='o',typ='R'),
+             PRE2            =SIMP(statut='o',typ='R'),
+             PORO            =SIMP(statut='o',typ='R'),
+             PRES_VAPE       =SIMP(statut='o',typ='R'),
+             DEGR_SATU       =SIMP(statut='f',typ='R'),
+             PRES_ATMO       =SIMP(statut='f',typ='R'),
+           ),
+           THM_DIFFU       =FACT(statut='f',min=0,max=1,
+             R_GAZ           =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             BIOT_COEF       =SIMP(statut='f',typ='R'),
+             SATU_PRES       =SIMP(statut='f',typ=fonction),
+             D_SATU_PRES     =SIMP(statut='f',typ=fonction),
+             PESA_X          =SIMP(statut='f',typ='R'),
+             PESA_Y          =SIMP(statut='f',typ='R'),
+             PESA_Z          =SIMP(statut='f',typ='R'),
+             PERM_IN         =SIMP(statut='f',typ=fonction),
+             PERM_LIQU       =SIMP(statut='f',typ=fonction),
+             D_PERM_LIQU_SATU=SIMP(statut='f',typ=fonction),
+             PERM_GAZ        =SIMP(statut='f',typ=fonction),
+             D_PERM_SATU_GAZ =SIMP(statut='f',typ=fonction),
+             D_PERM_PRES_GAZ =SIMP(statut='f',typ=fonction),
+             FICK            =SIMP(statut='f',typ=fonction),
+             D_FICK_TEMP     =SIMP(statut='f',typ=fonction),
+             D_FICK_GAZ_PRES =SIMP(statut='f',typ=fonction),
+             LAMBDA          =SIMP(statut='f',typ=fonction),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=fonction),
+             SIGMA_T         =SIMP(statut='f',typ=fonction),
+             D_SIGMA_T       =SIMP(statut='f',typ=fonction),
+             PERM_G_INTR     =SIMP(statut='f',typ=fonction),
+             CHAL_VAPO       =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="SAT",into=("SAT",) ),
+             VERI_P3         =SIMP(statut='c',typ='TXM',defaut="PORO",into=("PORO",) ),
+             VERI_P4         =SIMP(statut='c',typ='TXM',defaut="PGAZ",into=("PGAZ",) ),
+             VERI_P5         =SIMP(statut='c',typ='TXM',defaut="PGAP",into=("PGAP",) ),
+           ),
+#
+# courbes et coefficients associés à la fatigue et au dommage
+#
+           FATIGUE         =FACT(statut='f',min=0,max=1,
+             regles=(PRESENT_ABSENT('WOHLER','A_BASQUIN','BETA_BASQUIN'),
+                     PRESENT_ABSENT('WOHLER','A0','A1','A2','A3','SL'),
+                     PRESENT_ABSENT('A_BASQUIN','A0','A1','A2','A3','SL'),
+                     ENSEMBLE('A_BASQUIN','BETA_BASQUIN'),
+                     ENSEMBLE('A0','A1','A2','A3','SL'),
+                     PRESENT_PRESENT('A0','E_REFE'),
+                     ENSEMBLE('D0','TAU0'),),
+             WOHLER          =SIMP(statut='f',typ=fonction),
+             A_BASQUIN       =SIMP(statut='f',typ='R'),
+             BETA_BASQUIN    =SIMP(statut='f',typ='R'),
+             A0              =SIMP(statut='f',typ='R'),
+             A1              =SIMP(statut='f',typ='R'),
+             A2              =SIMP(statut='f',typ='R'),
+             A3              =SIMP(statut='f',typ='R'),
+             SL              =SIMP(statut='f',typ='R'),
+             MANSON_COFFIN   =SIMP(statut='f',typ=fonction),
+             E_REFE          =SIMP(statut='f',typ='R'),
+             D0              =SIMP(statut='f',typ='R'),
+             TAU0            =SIMP(statut='f',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="SIGM",into=("SIGM",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",) ),
+           ),
+           DOMMA_LEMAITRE  =FACT(statut='f',min=0,max=1,
+             S               =SIMP(statut='o',typ=fonction),
+             EPSP_SEUIL      =SIMP(statut='o',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+#
+# autres comportements ...
+#
+           WEIBULL         =FACT(statut='f',min=0,max=1,
+             M               =SIMP(statut='o',typ='R'),
+             VOLU_REFE       =SIMP(statut='o',typ='R'),
+             SIGM_REFE       =SIMP(statut='o',typ='R'),
+             SEUIL_EPSP_CUMU =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ),
+           WEIBULL_FO      =FACT(statut='f',min=0,max=1,
+             M               =SIMP(statut='o',typ='R'),
+             VOLU_REFE       =SIMP(statut='o',typ='R'),
+             SIGM_CNV        =SIMP(statut='o',typ='R'),
+             SIGM_REFE       =SIMP(statut='o',typ=fonction),
+             SEUIL_EPSP_CUMU =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           CONTACT         =FACT(statut='f',min=0,max=1,
+             E_N             =SIMP(statut='o',typ='R'),
+             E_T             =SIMP(statut='f',typ='R',defaut= 0.E+0),
+             COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0),
+           ),
+           NON_LOCAL       =FACT(statut='f',min=0,max=1,
+             LONG_CARA       =SIMP(statut='o',typ='R'),
+             COEF_RIGI_MINI  =SIMP(statut='f',typ='R'),
+           ),
+           RUPT_FRAG       =FACT(statut='f',min=0,max=1,
+             GC              =SIMP(statut='o',typ='R'),
+           ),
+           RCCM            =FACT(statut='f',min=0,max=1,
+             SY_02           =SIMP(statut='f',typ='R'),
+             SM              =SIMP(statut='f',typ='R'),
+             SU              =SIMP(statut='f',typ='R'),
+             SC              =SIMP(statut='f',typ='R'),
+             SH              =SIMP(statut='f',typ='R'),
+             N_KE            =SIMP(statut='f',typ='R'),
+             M_KE            =SIMP(statut='f',typ='R'),
+           ),
+           RCCM_FO         =FACT(statut='f',min=0,max=1,
+             SY_02           =SIMP(statut='f',typ=fonction),
+             SM              =SIMP(statut='f',typ=fonction),
+             SU              =SIMP(statut='f',typ=fonction),
+             S               =SIMP(statut='f',typ=fonction),
+             N_KE            =SIMP(statut='f',typ=fonction),
+             M_KE            =SIMP(statut='f',typ=fonction),
+           ),
+           INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene,
+                      docu="U4.65.02-d",reentrant='n',
+         SOUS_STRUC      =FACT(statut='o',min=01,max='**',
+           NOM             =SIMP(statut='o',typ='TXM' ),
+           MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+           TRANS           =SIMP(statut='f',typ='R',max=03),
+         ),
+         LIAISON         =FACT(statut='o',min=01,max='**',
+           SOUS_STRUC_1    =SIMP(statut='o',typ='TXM' ),
+           INTERFACE_1     =SIMP(statut='o',typ='TXM' ),
+           SOUS_STRUC_2    =SIMP(statut='o',typ='TXM' ),
+           INTERFACE_2     =SIMP(statut='o',typ='TXM' ),
+         ),
+         VERIF           =FACT(statut='f',min=01,max='**',
+#  dans la doc U stop_erreur est obligatoire         
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=   4,sd_prod=fonction,
+                fr="Définition des valeurs d une fonction de deux variables réelles",
+                docu="U4.31.03-f1",reentrant='n',
+         regles=(UN_PARMI('FONCTION','DEFI_FONCTION'),
+                 EXCLUS('FONCTION','NOM_PARA_FONC',),
+                 ENSEMBLE('NOM_PARA_FONC','DEFI_FONCTION'),),
+         NOM_PARA        =SIMP(statut='o',typ='TXM',into=("TEMP","INST","X","Y","Z","FREQ","PULS",
+                                                          "AMOR","EPAIS","TSEC","HYDR","SECH") ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),       
+         PARA            =SIMP(statut='o',typ='R',max='**'),
+         FONCTION        =SIMP(statut='f',typ=fonction,max='**' ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',into=("TEMP","INST","X","Y","Z","EPSI","FREQ",
+                                                          "PULS","AMOR","EPAIS") ),
+         DEFI_FONCTION   =FACT(statut='f',max='**',
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+           PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',into=("CROISSANT",) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op=  73,sd_prod=obstacle
+                    ,fr="Définition d un obstacle plan perpendiculaire à une structure filaire",
+                     docu="U4.44.21-e",reentrant='n',
+         TYPE            =SIMP(statut='o',typ='TXM',defaut="CERCLE",
+                             into=("CERCLE","PLAN_Y","PLAN_Z","DISCRET",
+                             "BI_CERCLE","BI_PLAN_Y","BI_PLAN_Z","BI_CERC_INT",
+                             "CRAYON_900","CRAYON_1300","GUID_A_CARTE_900",
+                             "GUID_B_CARTE_900","GUID_C_CARTE_900",
+                             "GUID_D_CARTE_900","GUID_E_CARTE_900",
+                             "GUID_F_CARTE_900","GUID_A_CARTE_1300",
+                             "GUID_B_CARTE_1300","GUID_C_CARTE_1300",
+                             "GUID_D_CARTE_1300","GUID_E_CARTE_1300",
+                             "GUID_F_CARTE_1300","GUID_A_CARSP_900",
+                             "GUID_B_CARSP_900","GUID_C_CARSP_900",
+                             "GUID_D_CARSP_900","GUID_E_CARSP_900",
+                             "GUID_F_CARSP_900","GUID_A_CARSP_1300",
+                             "GUID_B_CARSP_1300","GUID_C_CARSP_1300",
+                             "GUID_D_CARSP_1300","GUID_E_CARSP_1300",
+                             "GUID_F_CARSP_1300","GUID_A_GCONT_900",
+                             "GUID_B_GCONT_900","GUID_C_GCONT_900",
+                             "GUID_D_GCONT_900","GUID_E_GCONT_900",
+                             "GUID_F_GCONT_900","GUID_A_GCONT_1300",
+                             "GUID_B_GCONT_1300","GUID_C_GCONT_1300",
+                             "GUID_D_GCONT_1300","GUID_E_GCONT_1300",
+                             "GUID_F_GCONT_1300","GUID_A_GCOMB_900",
+                             "GUID_B_GCOMB_900","GUID_C_GCOMB_900",
+                             "GUID_D_GCOMB_900","GUID_E_GCOMB_900",
+                             "GUID_F_GCOMB_900","GUID_A_GCOMB_1300",
+                             "GUID_B_GCOMB_1300","GUID_C_GCOMB_1300",
+                             "GUID_D_GCOMB_1300","GUID_E_GCOMB_1300",
+                             "GUID_F_GCOMB_1300",) ),
+         VALE            =SIMP(statut='f',typ='R',max='**'),
+         VERIF           =SIMP(statut='f',typ='TXM',defaut="FERME"),
+)  ;
+#& MODIF COMMANDE  DATE 10/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+DEFI_PARA_SENSI=OPER(nom="DEFI_PARA_SENSI",op=   2,sd_prod=para_sensi,
+                    fr="Définition d'un paramètre de sensibilité",
+                    ang="Definition of a sensitive parameter",
+                    docu="U4.31.xx-a",reentrant='n',
+         NOM_RESU        =SIMP(statut='c',typ='TXM',into=("TOUTRESU",),defaut="TOUTRESU",
+                               fr="Nom du concept créé",
+                               ang="Name of the concept"),
+         VALE            =SIMP(statut='o',typ='R',max=01,
+                               fr="Valeur du parametre",
+                               ang="Value of the parameter"),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 07/03/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre,
+                    fr="Définition d'un spectre d'excitation turbulente",
+                    docu="U4.44.31-c",reentrant='n',
+         regles=(UN_PARMI('SPEC_LONG_COR_1','SPEC_LONG_COR_2','SPEC_LONG_COR_3',
+                          'SPEC_LONG_COR_4','SPEC_CORR_CONV_1','SPEC_CORR_CONV_2',
+                          'SPEC_FONC_FORME','SPEC_EXCI_POINT'),),
+         SPEC_LONG_COR_1 =FACT(statut='f',min=00,max=01,
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           VISC_CINE       =SIMP(statut='o',typ='R' ),
+         ),
+         SPEC_LONG_COR_2 =FACT(statut='f',min=00,max=01,
+           regles=(ENSEMBLE('FREQ_COUP','PHI0','BETA' ),),
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           FREQ_COUP       =SIMP(statut='f',typ='R',defaut= 0.1 ),
+           PHI0            =SIMP(statut='f',typ='R',defaut= 1.5E-3 ),
+           BETA            =SIMP(statut='f',typ='R',defaut= 2.7 ),
+         ),
+         SPEC_LONG_COR_3 =FACT(statut='f',min=00,max=01,
+           regles=(ENSEMBLE('PHI0_1','BETA_1','PHI0_2','BETA_2','FREQ_COUP'),),
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           FREQ_COUP       =SIMP(statut='f',typ='R',defaut= 0.2 ),
+           PHI0_1          =SIMP(statut='f',typ='R',defaut= 5.E-3 ),
+           BETA_1          =SIMP(statut='f',typ='R',defaut= 0.5 ),
+           PHI0_2          =SIMP(statut='f',typ='R',defaut= 4.E-5 ),
+           BETA_2          =SIMP(statut='f',typ='R',defaut= 3.5 ),
+         ),
+         SPEC_LONG_COR_4 =FACT(statut='f',min=00,max=01,
+           regles=(ENSEMBLE('BETA','GAMMA'),),
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
+           TAUX_VIDE       =SIMP(statut='o',typ='R' ),
+           BETA            =SIMP(statut='f',typ='R',defaut= 2. ),
+           GAMMA           =SIMP(statut='f',typ='R',defaut= 4. ),
+         ),
+         SPEC_CORR_CONV_1=FACT(statut='f',min=00,max=01,
+           LONG_COR_1      =SIMP(statut='o',typ='R' ),
+           LONG_COR_2      =SIMP(statut='f',typ='R' ),
+           VITE_FLUI       =SIMP(statut='o',typ='R' ),
+           RHO_FLUI        =SIMP(statut='o',typ='R' ),
+           FREQ_COUP       =SIMP(statut='f',typ='R' ),
+           K               =SIMP(statut='f',typ='R',defaut= 5.8E-3 ),
+           D_FLUI          =SIMP(statut='o',typ='R' ),
+           COEF_VITE_FLUI_A=SIMP(statut='f',typ='R' ),
+           COEF_VITE_FLUI_O=SIMP(statut='f',typ='R' ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="GENERALE",
+                                 into=("AU_YANG","GENERALE","CORCOS") ),
+         ),
+         SPEC_CORR_CONV_2=FACT(statut='f',min=00,max=01,
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           VITE_FLUI       =SIMP(statut='o',typ='R' ),
+           FREQ_COUP       =SIMP(statut='f',typ='R' ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="GENERALE",
+                                 into=("AU_YANG","GENERALE","CORCOS",) ),
+           COEF_VITE_FLUI_A=SIMP(statut='f',typ='R' ),
+           COEF_VITE_FLUI_O=SIMP(statut='f',typ='R' ),
+         ),
+         SPEC_FONC_FORME =FACT(statut='f',min=00,max=01,
+           regles=(UN_PARMI('INTE_SPEC','GRAPPE_1'),
+                   ENSEMBLE('INTE_SPEC','FONCTION'),),
+           INTE_SPEC       =SIMP(statut='f',typ=tabl_intsp ),
+           FONCTION        =SIMP(statut='f',typ=fonction,max='**'),
+           GRAPPE_1        =SIMP(statut='f',typ='TXM',into=("DEBIT_180","DEBIT_300",) ),
+           NOEUD           =SIMP(statut='o',typ=no),
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           MODELE          =SIMP(statut='o',typ=modele ),
+         ),
+         SPEC_EXCI_POINT =FACT(statut='f',min=00,max=01,
+           regles=(UN_PARMI('INTE_SPEC','GRAPPE_2'),),
+           INTE_SPEC       =SIMP(statut='f',typ=tabl_intsp ),
+           GRAPPE_2        =SIMP(statut='f',typ='TXM',
+                                 into=("ASC_CEN","ASC_EXC","DES_CEN","DES_EXC",) ),
+#  Quels sont les statuts des mots cles à l interieur des deux blocs qui suivent
+           b_inte_spec =BLOC(condition = "INTE_SPEC != None",
+             NATURE          =SIMP(statut='o',typ='TXM',max='**',into=("FORCE","MOMENT",) ),
+             ANGL            =SIMP(statut='o',typ='R',max='**'),
+             NOEUD           =SIMP(statut='o',typ=no,max='**'),
+           ),
+           b_grappe_2      =BLOC(condition = "GRAPPE_2 != None",
+             RHO_FLUI        =SIMP(statut='o',typ='R' ),
+             NOEUD           =SIMP(statut='o',typ=no),
+           ),
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           MODELE          =SIMP(statut='o',typ=modele ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
+                    fr="Définition d un maillage de visualisation",
+                    docu="U4.24.01-e",reentrant='n',
+         regles=(UN_PARMI('MODE_CYCL','MODELE_GENE','MAILLAGE'),
+                 PRESENT_PRESENT('MODE_CYCL','SECTEUR'),
+                 EXCLUS('SOUS_STRUC','SECTEUR'),
+                 PRESENT_PRESENT('NOM_GROUP_MA','MODELE_GENE'),
+                 PRESENT_PRESENT('NOM_GROUP_MA','SOUS_STRUC'),),
+         MODE_CYCL       =SIMP(statut='f',typ=mode_cycl ),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         SQUELETTE       =SIMP(statut='f',typ=squelette ),
+         RECO_GLOBAL     =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('TOUT','GROUP_NO_1'),
+                   PRESENT_PRESENT('GROUP_NO_1','GROUP_NO_2'),
+                   PRESENT_PRESENT('GROUP_NO_1','SOUS_STRUC_1'),
+                   PRESENT_PRESENT('GROUP_NO_2','SOUS_STRUC_2'),
+                   PRESENT_PRESENT('SOUS_STRUC_1','SOUS_STRUC_2'),),
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           SOUS_STRUC_1    =SIMP(statut='f',typ='TXM' ),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           SOUS_STRUC_2    =SIMP(statut='f',typ='TXM' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           DIST_REFE       =SIMP(statut='f',typ='R' ),
+         ),
+         NOM_GROUP_MA    =FACT(statut='f',min=01,max='**',
+           NOM             =SIMP(statut='o',typ='TXM' ),
+           SOUS_STRUC      =SIMP(statut='o',typ='TXM' ),
+           GROUP_MA        =SIMP(statut='o',typ=grma),
+         ),
+         EXCLUSIF        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         MAILLAGE        =SIMP(statut='f',typ=maillage ),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         TRANS           =SIMP(statut='f',typ='R',min=3,max=3),
+         ANGL_NAUT       =SIMP(statut='f',typ='R',min=3,max=3),
+         SOUS_STRUC      =FACT(statut='f',min=01,max='**',
+           NOM             =SIMP(statut='f',typ='TXM' ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         ),
+         SECTEUR         =FACT(statut='f',min=01,max='**',
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_TEXTURE=OPER(nom="DEFI_TEXTURE",op= 181,sd_prod=tabl_texture,
+                  fr=" ",docu="U4.43.05-a",reentrant='n',
+         SYST_GLISSEMENT =FACT(statut='o',min=3,max=3,
+           N               =SIMP(statut='o',typ='R',min=12,max=12 ),  
+           L               =SIMP(statut='o',typ='R',max='**' ),  
+         ),
+         PLAN            =FACT(statut='o',min=40,max=40,
+           ANGL_NAUT       =SIMP(statut='o',typ='R',max='**' ),  
+           PROPORTION      =SIMP(statut='o',typ='R' ),  
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_THER_JOULE=OPER(nom="DEFI_THER_JOULE",op= 121,sd_prod=fonction,docu="U4.MK.20-d",reentrant='n',
+                    fr="Calculer la fonction d évolution temporelle de température due à l effet JOULE dans un cable",
+         LIST_INST       =SIMP(statut='o',typ=listr8),
+         INST_CC_INIT    =SIMP(statut='f',typ='R',defaut= 0.0E+0 ),
+         INST_CC_FIN     =SIMP(statut='f',typ='R',defaut= 1.0E+10),
+         INST_RENC_INIT  =SIMP(statut='f',typ='R',defaut= 1.0E+10),
+         INST_RENC_FIN   =SIMP(statut='f',typ='R',defaut= 1.0E+10),
+         TEMP_EXT_POSE   =SIMP(statut='f',typ='R',defaut= 15.0E+0),
+         TEMP_EXT        =SIMP(statut='f',typ='R',defaut= 15.0E+0),
+         TEMP_RESI_REF   =SIMP(statut='f',typ='R',defaut= 20.0E+0),
+         PARA_COND_1D    =FACT(statut='f',min=01,max='**',
+           INTE_CC         =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+           INTE_RENC       =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+           A               =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           SECTION         =SIMP(statut='f',typ='TXM',defaut="CERCLE",into=("CERCLE",) ),
+           RESI_R0         =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+           RESI_R1         =SIMP(statut='f',typ='R',defaut= 0.E+0),
+           RHO_CP          =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           COEF_H          =SIMP(statut='f',typ='R',defaut= 40.0E+0),
+           TEMP_INIT       =SIMP(statut='f',typ='R',defaut= 15.0E+0),
+         ),
+)  ;
+
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=tabl_trc,docu="U4.43.04-e",reentrant='n',
+              fr="Définition d un diagramme de transformations en refroidissement continu d un acier",
+         HIST_EXP        =FACT(statut='o',min=01,max='**',
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+         ),
+         TEMP_MS         =FACT(statut='o',min=01,max='**',
+           SEUIL           =SIMP(statut='o',typ='R'),
+           AKM             =SIMP(statut='o',typ='R'),
+           BKM             =SIMP(statut='o',typ='R'),
+           TPLM            =SIMP(statut='o',typ='R'),
+         ),
+         GRAIN_AUST      =FACT(statut='f',min=01,max='**',
+           DREF           =SIMP(statut='f',typ='R'),
+           A              =SIMP(statut='f',typ='R'),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 12/09/2001   AUTEUR MCOURTOI M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def defi_valeur_prod(self,IS=None,R8=None,TX=None,C8=None,LS=None):
+  if IS != None  : return entier
+  if R8 != None  : return reel
+  if TX != None  : return chaine
+  if C8 != None  : return complexe
+  if LS != None  : return liste
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_VALEUR=MACRO(nom="DEFI_VALEUR",op=-4,sd_prod=defi_valeur_prod,
+                 fr="Affectation d une valeur à une variable Superviseur",
+                 docu="U4.31.04-e1",reentrant='f',
+         regles=(UN_PARMI('IS','R8','TX','C8','LS'),),
+         IS              =SIMP(statut='f',typ='I',max='**'),
+         R8              =SIMP(statut='f',typ='R',max='**'),
+         TX              =SIMP(statut='f',typ='TXM',max='**'),
+         C8              =SIMP(statut='f',typ='C',max='**'),
+         LS              =SIMP(statut='f',typ='L',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEFUFI=PROC(nom="DEFUFI",op=21,docu="U4.12.01-d",
+            fr="Modification / ajout d une unité logique en sortie en complément de celles définies dans DEBUT",
+         IMPRESSION      =FACT(statut='o',min=01,max='**',
+           NOM             =SIMP(statut='o',typ='TXM',max='**'),
+           UNITE           =SIMP(statut='o',typ='I' ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DEPL_INTERNE=OPER(nom="DEPL_INTERNE",op=89,sd_prod=cham_no_depl_r,docu="U4.62.02-e",reentrant='n',
+                  fr="Récupération du champ de déplacement interne à une sous-structure",
+         DEPL_GLOBAL     =SIMP(statut='o',typ=cham_no_depl_r),
+         MAILLE          =SIMP(statut='o',typ=ma,max=1),
+         NOM_CAS         =SIMP(statut='f',typ='TXM',defaut=" "),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DETRUIRE=PROC(nom="DETRUIRE",op=-7,docu="U4.14.01-d",
+              fr="Destruction d un concept utilisateur dans la base GLOBALE",
+             op_init=ops.detruire,
+            CONCEPT     =FACT(statut='o',min=01,
+            NOM         =SIMP(statut='o',typ=assd,max='**'),
+        ),
+);
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DIST_LIGN_3D=OPER(nom="DIST_LIGN_3D",op= 133,sd_prod=fonction,docu="U4.MK.30-d",reentrant='n', 
+                  fr="Calcul sous forme d une fonction du temps de la distance minimale entre deux structures filaires",
+      regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),
+              UN_PARMI('GROUP_MA_2','POIN_FIXE'),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,evol_noli) ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         GROUP_MA_1      =SIMP(statut='o',typ=grma,max='**'),
+         GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+         POIN_FIXE       =SIMP(statut='f',typ='R',min=3,max=3),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/03/2001   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=tabl_intsp
+                    ,fr="Calcule la réponse spectrale d une structure linéaire sous une excitation connue par sa DSP",
+                     docu="U4.53.22-d",reentrant='n',
+         BASE_MODALE     =FACT(statut='o',min=01,max=01,
+           regles=(UN_PARMI('NUME_ORDRE','BANDE'),),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+           BANDE           =SIMP(statut='f',typ='R',max=02),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           b_bande =BLOC(condition = "BANDE != None",
+             AMOR_UNIF       =SIMP(statut='o',typ='R' ),
+           ),
+           b_nume_ordre =BLOC(condition = "NUME_ORDRE != None",
+             AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           ),
+         ),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,)),
+         EXCIT           =FACT(statut='o',min=01,max=01,
+           regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I'), 
+                   EXCLUS('CHAM_NO','NOEUD'),),
+           DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
+           MODAL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+#  dans la doc U il y a plus de choix pour GRANDEUR
+           GRANDEUR        =SIMP(statut='f',typ='TXM',defaut="DEPL_R",
+                                 into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
+           INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
+           NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG",) ),
+#  Toutes les regles ne semblent pas avoir été ecrites dans la doc U
+           NUME_ORDRE_I    =SIMP(statut='f',typ='I',max='**'),
+           NOEUD_I         =SIMP(statut='f',typ=no,max='**'),
+           b_nume_ordre_i  =BLOC(condition = "NUME_ORDRE_I != None",
+             NUME_ORDRE_J    =SIMP(statut='o',typ='I',max='**'),
+           ),
+           b_noeud_i       =BLOC(condition = "NOEUD_I != None",
+             NOEUD_J         =SIMP(statut='o',typ=no,max='**'),
+             NOM_CMP_I       =SIMP(statut='o',typ='TXM',max='**'),
+             NOM_CMP_J       =SIMP(statut='o',typ='TXM',max='**'),
+           ),
+           CHAM_NO         =SIMP(statut='f',typ=cham_no),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           b_noeud         =BLOC(condition = "NOEUD != None",
+             NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+           ),           
+         ),
+         REPONSE         =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('FREQ_MIN','NB_POIN_MODE'),
+                   EXCLUS('FREQ_MIN','FREQ_EXCIT'),
+                   ENSEMBLE('FREQ_MIN','FREQ_MAX'),),
+#  Toutes les regles ne semblent pas avoir été ecrites dans la doc U
+           DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ,) ),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
+           FREQ_MIN        =SIMP(statut='f',typ='R' ),
+           FREQ_MAX        =SIMP(statut='f',typ='R' ),
+           PAS             =SIMP(statut='f',typ='R' ),
+           FREQ_EXCIT      =SIMP(statut='f',typ='TXM',defaut="AVEC",into=("AVEC","SANS") ),
+           NB_POIN_MODE    =SIMP(statut='f',typ='I',defaut= 50 ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 10/07/2001   AUTEUR ACBHHCD G.DEVESA 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def dyna_line_harm_prod(MATR_MASS,**args):
+  if AsType(MATR_MASS) == matr_asse_depl_r : return dyna_harmo
+  if AsType(MATR_MASS) == matr_asse_depl_c : return dyna_harmo
+  if AsType(MATR_MASS) == matr_asse_pres_c : return acou_harmo
+  if AsType(MATR_MASS) == matr_asse_gene_r : return harm_gene
+  raise AsException("type de concept resultat non prevu")
+
+DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
+                    fr="Réponse dynamique complexe d un système à une excitation harmonique",
+                    docu="U4.53.11-e",reentrant='n',
+         regles=(PRESENT_ABSENT('AMOR_REDUIT','MATR_AMOR'),
+                 PRESENT_ABSENT('AMOR_REDUIT','LIST_AMOR'),
+                 PRESENT_ABSENT('MATR_AMOR','LIST_AMOR'),
+                 UN_PARMI('FREQ','LIST_FREQ'),),
+         MODELE          =SIMP(statut='f',typ=modele ),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+         MATR_MASS       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_pres_c,matr_asse_gene_r ) ),
+         MATR_RIGI       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_pres_c
+                                              ,matr_asse_gene_r,matr_asse_gene_c ) ),
+         MATR_AMOR       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_pres_c,matr_asse_gene_r ) ),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         LIST_AMOR       =SIMP(statut='f',typ=listr8 ),
+         MATR_IMPE_PHI   =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',max=03,into=("DEPL","VITE","ACCE") ),
+         EXCIT           =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('VECT_ASSE','CHARGE'),
+                   UN_PARMI('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+           VECT_ASSE       =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_pres_c,vect_asse_gene ) ),
+           CHARGE          =SIMP(statut='f',typ=char_meca ),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+           FONC_MULT_C     =SIMP(statut='f',typ=fonction_c ),
+           COEF_MULT_C     =SIMP(statut='f',typ='C' ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           PHAS_DEG        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           PUIS_PULS       =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 28/03/2001   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
+                    fr="Réponse temporelle d un système à une excitation transitoire",
+                    docu="U4.53.02-f",reentrant='f',
+         regles=(UN_PARMI('NEWMARK','WILSON','DIFF_CENTRE','ADAPT'),),
+         MODELE          =SIMP(statut='f',typ=modele ),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+         MATR_MASS       =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_RIGI       =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,) ),
+         NEWMARK         =FACT(statut='f',min=01,max=01,
+           ALPHA           =SIMP(statut='f',typ='R',defaut= 0.25 ),
+           DELTA           =SIMP(statut='f',typ='R',defaut= 0.5 ),
+         ),
+         WILSON          =FACT(statut='f',min=01,max=01,
+           THETA           =SIMP(statut='f',typ='R',defaut= 1.4 ),
+         ),
+         DIFF_CENTRE     =FACT(statut='f',min=01,max=01,
+         ),
+         ADAPT           =FACT(statut='f',min=01,max=01,
+         ),
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('DYNA_TRANS','DEPL_INIT'),
+                   EXCLUS('DYNA_TRANS','VITE_INIT'),),
+           DYNA_TRANS      =SIMP(statut='f',typ=dyna_trans ),
+#  j ai interprete la doc U : est-ce bon           
+           b_dyna_trans    =BLOC(condition = "DYNA_TRANS != None",
+             regles=(EXCLUS('NUME_INIT','INST_INIT' ),),
+             NUME_INIT       =SIMP(statut='f',typ='I' ),
+             INST_INIT       =SIMP(statut='f',typ='R' ),
+             b_inst_init     =BLOC(condition = "INST_INIT != None",
+               PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+           ),
+           DEPL_INIT       =SIMP(statut='f',typ=(cham_no_depl_r) ),
+           VITE_INIT       =SIMP(statut='f',typ=(cham_no_depl_r) ),
+         ),
+         EXCIT           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('CHARGE','VECT_ASSE'),
+                   EXCLUS('CHARGE','COEF_MULT'),
+                   EXCLUS('FONC_MULT','COEF_MULT'),
+                   EXCLUS('ACCE','COEF_MULT'),
+                   PRESENT_ABSENT('ACCE','FONC_MULT'),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
+                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+           CHARGE          =SIMP(statut='f',typ=char_meca ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+           ACCE            =SIMP(statut='f',typ=fonction ),
+           VITE            =SIMP(statut='f',typ=fonction ),
+           DEPL            =SIMP(statut='f',typ=fonction ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         ),
+         AMOR_MODAL      =FACT(statut='f',min=01,max=01,
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+           REAC_VITE       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+#  ce n est pas le mot clesolveur standard
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+           STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+           NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         INCREMENT       =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('LIST_INST','FONC_INST','PAS'),),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ), 
+           FONC_INST       =SIMP(statut='f',typ=fonction ),       
+           PAS             =SIMP(statut='f',typ='R' ),
+           b_pas           =BLOC(condition = "PAS != None",
+               INST_INIT       =SIMP(statut='f',typ='R' ),
+               INST_FIN        =SIMP(statut='f',typ='R' ),    
+           ),
+           b_list_fonc     =BLOC(condition = "LIST_INST != None or FONC_INST != None",
+               regles=(EXCLUS('INST_FIN','NUME_FIN'),),
+               NUME_FIN        =SIMP(statut='f',typ='I' ), 
+               INST_FIN        =SIMP(statut='f',typ='R' ),   
+           ),
+           VITE_MIN        =SIMP(statut='f',typ='TXM',defaut="NORM",into=("MAXI","NORM") ),
+           COEF_MULT_PAS   =SIMP(statut='f',typ='R',defaut= 1.1 ),
+           COEF_DIVI_PAS   =SIMP(statut='f',typ='R',defaut= 1.33334 ),
+           PAS_LIMI_RELA   =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+           NB_POIN_PERIODE =SIMP(statut='f',typ='I',defaut= 50 ),
+           NMAX_ITER_PAS   =SIMP(statut='f',typ='I',defaut= 16 ),
+           PAS_CALCUL      =SIMP(statut='f',typ='I',defaut= 1 ),
+         ),
+         ARCHIVAGE       =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH', ),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',into=("DEPL","VITE","ACCE") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR VABHHTS J.TESELET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
+                   fr="Analyse mécanique dynamique non linéaire",docu="U4.53.01-e1",
+         regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS',),
+                 UN_PARMI('NEWMARK','HHT', ),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,)),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='o',min=1,max='**',
+           regles=(PRESENT_ABSENT('FONC_MULT','ACCE'),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
+                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
+           CHARGE          =SIMP(statut='o',typ=char_meca),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           DEPL            =SIMP(statut='f',typ=fonction),
+           ACCE            =SIMP(statut='f',typ=fonction),
+           VITE            =SIMP(statut='f',typ=fonction),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         ),
+         AMOR_MODAL      =FACT(statut='f',min=1,max=1,
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**' ),
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+           REAC_VITE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         COMP_INCR       =FACT(statut='f',min=1,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="VMIS_ISOT_TRAC",
+                                 into=( "ELAS",
+                                        "VMIS_ISOT_TRAC",
+                                        "VMIS_ISOT_LINE",
+                                        "VMIS_ECMI_TRAC",
+                                        "VMIS_ECMI_LINE",
+                                        "LABORD_1D",
+                                        "ENDO_LOCAL",
+                                        "ENDO_FRAGILE",
+                                        "BETON_ENDO_LOCAL",
+                                        "RUPT_FRAG",
+                                        "PLAS_GRAD_LINE",
+                                        "PLAS_GRAD_TRAC",
+                                        "DURC_GRAD",
+                                        "META_P_IL",
+                                        "META_P_IL_PT",
+                                        "META_P_IL_RE",
+                                        "META_P_IL_PT_RE",
+                                        "META_V_IL",
+                                        "META_V_IL_PT",
+                                        "META_V_IL_RE",
+                                        "META_V_IL_PT_RE",
+                                        "META_P_INL",
+                                        "META_P_INL_PT",
+                                        "META_P_INL_RE",
+                                        "META_P_INL_PT_RE",
+                                        "META_V_INL",
+                                        "META_V_INL_PT",
+                                        "META_V_INL_RE",
+                                        "META_V_INL_PT_RE",
+                                        "META_P_CL",
+                                        "META_P_CL_PT",
+                                        "META_P_CL_RE",
+                                        "META_P_CL_PT_RE",
+                                        "META_V_CL",
+                                        "META_V_CL_PT",
+                                        "META_V_CL_RE",
+                                        "META_V_CL_PT_RE",
+                                        "VMIS_CINE_LINE",
+                                        "VISC_TAHERI",
+                                        "CHABOCHE",
+                                        "VISCOCHAB",
+                                        "VMIS_CIN1_CHAB",
+                                        "VMIS_CIN2_CHAB",
+                                        "POLY_CFC",
+                                        "LMARC",
+                                        "ROUSSELIER",
+                                        "ROUSS_PR",
+                                        "ROUSS_VISC",
+                                        "VMIS_POU_LINE",
+                                        "VMIS_POU_FLEJOU",
+                                        "COULOMB",
+                                        "ARME",
+                                        "ASSE_CORN",
+                                        "NORTON_HOFF",
+                                        "LEMAITRE",
+                                        "ZIRC_CYRA2",
+                                        "ZIRC_EPRI",
+                                        "ASSE_COMBU",
+                                        "VENDOCHAB",
+                                        "NADAI_B",
+                                        "DIS_CONTACT",
+                                        "DIS_CHOC",
+                                        "DIS_GOUJ2E_PLAS",
+                                        "DIS_GOUJ2E_ELAS",
+                                        "GRILLE_ISOT_LINE",
+                                        "GRILLE_CINE_LINE",
+                                        "GRILLE_PINTO_MEN",
+                                        "PINTO_MENEGOTTO",
+                                        "CJS",
+                                        "OHNO",
+                                        "GRANGER_FP",
+                                        "GRANGER_FP_V",
+                                        "BETON_DOUBLE_DP",
+                                        "KIT_HM",
+                                        "KIT_HHM",
+                                        "KIT_THH",
+                                        "KIT_THM",
+                                        "KIT_THHM",
+                                        "VMIS_ASYM_LINE",
+                                        "ELAS_THM",
+                                        "SURF_ETAT_NSAT",
+                                        "SURF_ETAT_SATU",
+                                        "CAM_CLAY_THM",
+                                        "KIT_DDI",
+                                     ) ),
+           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           VMIS_ISOT_LINE  =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           VMIS_ECMI_TRAC  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           VMIS_ECMI_LINE  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           LABORD_1D   =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           ENDO_LOCAL      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ENDO_FRAGILE    =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           BETON_ENDO_LOCAL=SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           RUPT_FRAG       =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           PLAS_GRAD_LINE  =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           PLAS_GRAD_TRAC  =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           DURC_GRAD       =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           META_P_IL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_PT       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_RE       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_PT_RE    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL          =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_PT       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_RE       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_PT_RE    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_PT      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_RE      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_PT_RE   =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_PT      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_RE      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_PT_RE   =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_CL          =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_PT       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_RE       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_PT_RE    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL          =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_PT       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_RE       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_PT_RE    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+           VMIS_CINE_LINE  =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+           CHABOCHE        =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
+           VISCOCHAB       =SIMP(statut='c',typ='I',defaut=28,into=(28,)),
+           VMIS_CIN1_CHAB  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           VMIS_CIN2_CHAB  =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
+           POLY_CFC        =SIMP(statut='c',typ='I',defaut=1688,into=(1688,)),
+           LMARC           =SIMP(statut='c',typ='I',defaut=20,into=(20,)),
+           VISC_TAHERI     =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+           ROUSSELIER      =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+           ROUSS_PR        =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           ROUSS_VISC      =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           VMIS_POU_LINE   =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+           VMIS_POU_FLEJOU =SIMP(statut='c',typ='I',defaut=9 ,into=(9,)),
+           COULOMB         =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           ASSE_CORN       =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           ARME            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           NORTON_HOFF     =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           LEMAITRE        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ZIRC_CYRA2      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ZIRC_EPRI       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ASSE_COMBU      =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           NADAI_B         =SIMP(statut='c',typ='I',defaut=34,into=(34,)),
+           VENDOCHAB       =SIMP(statut='c',typ='I',defaut=10,into=(10,)),
+           GRILLE_ISOT_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           GRILLE_CINE_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           GRILLE_PINTO_MEN=SIMP(statut='c',typ='I',defaut=16,into=(16,)),
+           DIS_CONTACT     =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+           DIS_CHOC        =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+           DIS_GOUJ2E_PLAS =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           DIS_GOUJ2E_ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           PINTO_MENEGOTTO =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           CJS             =SIMP(statut='c',typ='I',defaut=16,into=(16,)),
+           OHNO            =SIMP(statut='c',typ='I',defaut=32,into=(32,)),
+           GRANGER_FP      =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
+           GRANGER_FP_V    =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
+           BETON_DOUBLE_DP =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           KIT_HM          =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_HHM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THH         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THHM        =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           VMIS_ASYM_LINE  =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+
+           RELATION_KIT    =SIMP(statut='f',typ='TXM',max='**',
+                                 into=(
+# MECA
+                                       "ELAS",
+                                       "CJS",
+                                       "ELAS_THM",
+                                       "SURF_ETAT_NSAT",
+                                       "SURF_ETAT_SATU",
+                                       "CAM_CLAY_THM",
+# THMC
+                                       "GAZ",
+                                       "LIQU_SATU",
+                                       "LIQU_SATU_GAT",
+                                       "LIQU_GAZ_ATM",
+                                       "LIQU_VAPE_GAZ",
+                                       "LIQU_NSAT_GAT",
+                                       "LIQU_GAZ",
+# THER
+                                       "THER_HOMO",
+                                       "THER_POLY",
+# HYDR
+                                       "HYDR_UTIL",
+                                       "HYDR",
+# MECA_META
+                                       "ACIER",
+                                       "ZIRC",
+# MECA KIT_DDI
+                                       "VMIS_ISOT_TRAC",
+                                       "VMIS_ISOT_LINE",
+                                       "VMIS_ISOT_CINE",
+                                       "GRANGER_FP",
+                                       "GRANGER_FP_V",
+                                       "ROUSSELIER",
+                                       "CHABOCHE",
+                                       "OHNO",
+                                       "NADAI_B",
+                                       "BETON_DOUBLE_DP",
+                                       ) ),
+           ELAS_THM        =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           SURF_ETAT_NSAT  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           SURF_ETAT_SATU  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           CAM_CLAY_THM    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+           GAZ             =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           LIQU_SATU       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_SATU_GAT   =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_GAZ_ATM    =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_VAPE_GAZ   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_NSAT_GAT   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_GAZ        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           THER_HOMO       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           THER_POLY       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           HYDR_UTIL       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           HYDR            =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           ACIER           =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           ZIRC            =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC","SIMO_MIEHE","GREEN_GR","GREEN",)),
+           ALGO_C_PLAN     =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         COMP_ELAS       =FACT(statut='f',min=1,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
+                                       "ELAS_POUTRE_GR","CABLE")),
+           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_VMIS_LINE  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_POUTRE_GR  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           CABLE           =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GREEN","GREEN_GR",) ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+#-------------------------------------------------------------------
+         ETAT_INIT       =FACT(statut='f',min=1,max=1,
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','SIGM','VARI','VARI_NON_LOCAL',),
+                   EXCLUS('EVOL_NOLI','DEPL',),
+                   EXCLUS('EVOL_NOLI','VITE'),
+                   EXCLUS('EVOL_NOLI','SIGM',),
+                   EXCLUS('EVOL_NOLI','VARI',),
+                   EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',),
+                   EXCLUS('NUME_ORDRE','INST'), ),
+           DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+           VITE            =SIMP(statut='f',typ=cham_no_depl_r),
+           SIGM            =SIMP(statut='f',typ=(cham_elem_sief_r,carte_sief_r)),
+           VARI            =SIMP(statut='f',typ=cham_elem_vari_r),
+           VARI_NON_LOCAL  =SIMP(statut='f',typ=cham_no_vanl_r),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           NUME_DIDI       =SIMP(statut='f',typ='I'),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),
+#-------------------------------------------------------------------
+         INCREMENT       =FACT(statut='o',min=1,max=1,
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=listr8),
+           EVOLUTION       =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE",
+                                 into=("CHRONOLOGIQUE","RETROGRADE","SANS",) ),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+           SUBD_PAS        =SIMP(statut='f',typ='I',defaut=1),
+           SUBD_PAS_MINI   =SIMP(statut='f',typ='R'),
+           COEF_SUBD_PAS_1 =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+         ),
+#-------------------------------------------------------------------
+         NEWMARK         =FACT(statut='f',min=1,max=1,
+           ALPHA           =SIMP(statut='f',typ='R',defaut= 0.25),
+           DELTA           =SIMP(statut='f',typ='R',defaut= 0.5),
+         ),
+         HHT             =FACT(statut='f',min=1,max=1,
+           ALPHA           =SIMP(statut='f',typ='R'
+                                ,defaut= -0.29999999999999999 ),
+         ),
+         NEWTON          =FACT(statut='d',min=1,max=1,
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),
+           PREDICTION      =SIMP(statut='f',typ='TXM',into=("TANGENTE","ELASTIQUE") ),
+           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0),
+           PAS_MINI_ELAS   =SIMP(statut='f',typ='R',defaut=0.0E+0),
+         ),
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition= "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition= "METHODE == 'LDLT'",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult     =BLOC(condition="METHODE == 'LDLT' or METHODE == 'MULT_FRONT'",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","DECOUPE") ),
+           ),
+           b_gcpc          =BLOC(condition="METHODE == 'GCPC'",fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut=0),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+#-------------------------------------------------------------------
+         RECH_LINEAIRE   =FACT(statut='f',min=1,max=1,
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),
+         ),
+         PILOTAGE        =FACT(statut='f',min=1,max=1,
+           regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","PRED_ELAS_INCR","DEFORMATION") ),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           ETA_PILO_MAX    =SIMP(statut='f',typ='R'),
+           ETA_PILO_MIN    =SIMP(statut='f',typ='R'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),
+                         ),
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
+           ITER_GLOB_ELAS  =SIMP(statut='f',typ='I',defaut=25),
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R'
+                                ,defaut= 1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+           TYPE_MATR_COMP  =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+#-------------------------------------------------------------------
+         OPTION          =SIMP(statut='f',typ='TXM',max='**',defaut="ELNO",
+                               into=("SIEF_ELNO_ELGA","VARI_ELNO_ELGA","EFGE_ELNO_CART","ELNO","SANS") ),
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
+           regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
+                   EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+           ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',
+           into=("DEPL","SIEF_ELGA","VARI_ELGA","ACCE","VITE","VARI_NON_LOCAL","LANL_ELGA")),
+         ),
+         OBSERVATION     =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO','MAILLE'),
+                   PRESENT_PRESENT('MAILLE','POINT'),),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+
+into=("DEPL","VITE","ACCE","SIEF_ELGA","VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU") ),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),
+           LIST_ARCH       =SIMP(statut='f',typ=listis),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PAS_OBSE        =SIMP(statut='f',typ='I'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           POINT           =SIMP(statut='f',typ='I',max='**'),
+         ),
+#-------------------------------------------------------------------
+         MODELE_NON_LOCAL=SIMP(statut='f',typ=(modele) ),
+         b_non_local = BLOC ( condition = "MODELE_NON_LOCAL != None",
+                              fr="Données spécifiques au modèle non local",
+           SOLV_NON_LOCAL  =FACT(statut='f',min=1,max=1,
+             METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+             b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+               RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+             ),
+             b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+               RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             ),
+             b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                    fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+               NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+               STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+             ),
+             b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+               PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+               NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+               RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+               NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+             ),
+             EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           LAGR_NON_LOCAL  =FACT(statut='f',max=1,
+             ITER_DUAL_MAXI  =SIMP(statut='f',typ='I',defaut= 50),
+             RESI_DUAL_ABSO  =SIMP(statut='o',typ='R'),
+             RESI_PRIM_ABSO  =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='f',typ='R',defaut= 1000.),
+             ITER_PRIM_MAXI  =SIMP(statut='f',typ='I',defaut= 10),
+           ),
+         ),
+#-------------------------------------------------------------------
+         PARM_THETA      =SIMP(statut='f',typ='R'
+                              ,defaut= 1. ),
+#-------------------------------------------------------------------
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=tabl_intsp,
+                     fr="Calcul de la réponse par recombinaison modale d'une structure linéaire pour une excitation aléatoire",
+                     docu="U4.53.23-c",reentrant='n',
+         BASE_ELAS_FLUI  =SIMP(statut='o',typ=melasflu ),
+         EXCIT           =FACT(statut='o',min=00,max=01,
+           INTE_SPEC_GENE  =SIMP(statut='o',typ=tabl_intsp ),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
+                     fr="Réponse dynamique transitoire en coordonnées généralisées par recombinaison modale",
+                     docu="U4.53.21-e",reentrant='f',
+      regles=(EXCLUS('AMOR_REDUIT','AMOR_GENE','LIST_AMOR'), 
+              PRESENT_ABSENT('MODE_STAT','MODE_CORR'),),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="EULER",
+                               into=("EULER","NEWMARK","DEVOGE","ADAPT","ITMI") ),
+         MASS_GENE       =SIMP(statut='o',typ=matr_asse_gene_r ),
+         RIGI_GENE       =SIMP(statut='o',typ=matr_asse_gene_r ),
+         AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r ),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         LIST_AMOR       =SIMP(statut='f',typ=listr8 ),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc) ),
+         MODE_CORR       =SIMP(statut='f',typ=(mult_elas,mode_stat_acce) ,),
+         
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('RESU_GENE','DEPL_INIT_GENE'),
+                   EXCLUS('RESU_GENE','VITE_INIT_GENE'),),
+           RESU_GENE       =SIMP(statut='f',typ=tran_gene ),
+           b_resu_gene     =BLOC(condition = "RESU_GENE != None",
+             INST_INIT       =SIMP(statut='f',typ='R' ),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           ),
+           DEPL_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+           VITE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+         ),
+         INCREMENT       =FACT(statut='o',min=01,max='**',
+           INST_INIT       =SIMP(statut='f',typ='R' ),
+           INST_FIN        =SIMP(statut='o',typ='R' ),
+           PAS             =SIMP(statut='f',typ='R' ),
+           VERI_PAS        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           VITE_MIN        =SIMP(statut='f',typ='TXM',defaut="NORM",into=("MAXI","NORM") ),
+           COEF_MULT_PAS   =SIMP(statut='f',typ='R',defaut= 1.1 ),
+           COEF_DIVI_PAS   =SIMP(statut='f',typ='R',defaut= 1.3333334 ),
+           PAS_LIMI_RELA   =SIMP(statut='f',typ='R',defaut= 1.0E-6 ),
+           NB_POIN_PERIODE =SIMP(statut='f',typ='I',defaut= 50 ),
+           NMAX_ITER_PAS   =SIMP(statut='f',typ='I',defaut= 16 ),
+         ),
+         ARCHIVAGE       =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH'),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+         ),
+         
+         NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 20 ),
+         RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         LAMBDA          =SIMP(statut='f',typ='R',defaut= 10. ),
+         
+         EXCIT           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('FONC_MULT','COEF_MULT','ACCE'),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
+                   PRESENT_PRESENT('D_FONC_DT','D_FONC_DT2'),
+                   PRESENT_ABSENT('NUME_MODE','VECT_GENE','COEF_MULT'),
+                   PRESENT_ABSENT('MULT_APPUI','CORR_STAT'),
+                   PRESENT_ABSENT('MULT_APPUI','COEF_MULT'),
+                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+           VECT_GENE       =SIMP(statut='f',typ=vect_asse_gene ),
+           NUME_MODE       =SIMP(statut='f',typ='I' ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           ACCE            =SIMP(statut='f',typ=fonction ),
+           VITE            =SIMP(statut='f',typ=fonction ),
+           DEPL            =SIMP(statut='f',typ=fonction ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           b_loca          =BLOC(condition= "DIRECTION != None",
+             regles=(EXCLUS('NOEUD','GROUP_NO'),),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           ),
+           CORR_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           D_FONC_DT       =SIMP(statut='f',typ=fonction ),
+           D_FONC_DT2      =SIMP(statut='f',typ=fonction ),
+         ),
+         CHOC            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1' ),
+                   PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
+           INTITULE        =SIMP(statut='f',typ='TXM' ),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           OBSTACLE        =SIMP(statut='o',typ=obstacle ),
+           ORIG_OBST       =SIMP(statut='f',typ='R',min=3,max=3),
+           NORM_OBST       =SIMP(statut='o',typ='R',min=3,max=3),
+           ANGL_VRIL       =SIMP(statut='f',typ='R' ),
+           JEU             =SIMP(statut='f',typ='R',defaut= 1. ),
+           DIST_1          =SIMP(statut='f',typ='R',val_min=0.E+0 ),
+           DIST_2          =SIMP(statut='f',typ='R',val_min=0.E+0 ),
+           SOUS_STRUC_1    =SIMP(statut='f',typ='TXM' ),
+           SOUS_STRUC_2    =SIMP(statut='f',typ='TXM' ),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL"),
+           RIGI_NOR        =SIMP(statut='f',typ='R' ),
+           AMOR_NOR        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           RIGI_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           AMOR_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+
+           LAME_FLUIDE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           b_lame          =BLOC(condition="LAME_FLUIDE=='OUI'",
+               ALPHA           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               BETA            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               CHI             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               DELTA           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+         ),
+         VERI_CHOC       =FACT(statut='f',min=01,max='**',
+           STOP_CRITERE    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 0.5 ),
+         ),
+         FLAMBAGE        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           OBSTACLE        =SIMP(statut='o',typ=obstacle ),
+           ORIG_OBST       =SIMP(statut='f',typ='R',max='**'),
+           NORM_OBST       =SIMP(statut='o',typ='R',max='**'),
+           ANGL_VRIL       =SIMP(statut='f',typ='R' ),
+           JEU             =SIMP(statut='f',typ='R',defaut= 1. ),
+           DIST_1          =SIMP(statut='f',typ='R' ),
+           DIST_2          =SIMP(statut='f',typ='R' ),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL"),
+           RIGI_NOR        =SIMP(statut='f',typ='R' ),
+           FNOR_CRIT       =SIMP(statut='f',typ='R' ),
+           FNOR_POST_FL    =SIMP(statut='f',typ='R' ),
+           RIGI_NOR_POST_FL=SIMP(statut='f',typ='R' ),
+         ),
+         ANTI_SISM       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+                   UN_PARMI('NOEUD_2','GROUP_NO_2'),
+                   PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           RIGI_K1         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           RIGI_K2         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SEUIL_FX        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           C               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           PUIS_ALPHA      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           DX_MAX          =SIMP(statut='f',typ='R',defaut= 1. ),
+         ),
+         RELA_EFFO_DEPL  =FACT(statut='f',min=01,max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=fonction ),
+         ),
+         RELA_TRANSIS    =FACT(statut='f',min=01,max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=fonction ),
+         ),
+         RELA_EFFO_VITE  =FACT(statut='f',min=01,max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=fonction ),
+         ),
+         b_itmi          =BLOC(condition = "METHODE=='ITMI'",
+                regles=(ENSEMBLE('BASE_ELAS_FLUI','NUME_VITE_FLUI'),),
+                BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu ),
+                NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+                ETAT_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                PREC_DUREE      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+                CHOC_FLUI       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                NB_MODE         =SIMP(statut='f',typ='I' ),
+                NB_MODE_FLUI    =SIMP(statut='f',typ='I' ),
+                NB_MODE_DIAG    =SIMP(statut='f',typ='I' ),
+                TS_REG_ETAB     =SIMP(statut='f',typ='R' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         IMPRESSION      =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('TOUT','NIVEAU'),),
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           NIVEAU          =SIMP(statut='f',typ='TXM',into=("DEPL_LOC","VITE_LOC","FORC_LOC","TAUX_CHOC") ),
+           INST_INIT       =SIMP(statut='f',typ='R' ),
+           INST_FIN        =SIMP(statut='f',typ='R' ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+ )  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,docu="U4.92.11-b",
+      regles=(UN_PARMI('TOUT','CO'),),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         CO              =SIMP(statut='f',typ=assd,max='**'),
+         TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut="SOMME",into=("SOMME","RESUME") ),
+         FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5"),
+         PREC_R          =SIMP(statut='f',typ='TXM',defaut="1.E-5"),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+EXEC_LOGICIEL=PROC(nom="EXEC_LOGICIEL",op= 183,fr="",docu="U7.00.01-a",
+         LOGICIEL        =SIMP(statut='f',typ='TXM' ),  
+         ARGUMENT        =FACT(statut='f',min=01,max='**',
+           NOM_PARA        =SIMP(statut='f',typ='TXM' ),  
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+#def extr_mode_prod(FILTRE_MODE,TITRE,IMPRESSION ):
+#  Sait-on faire  
+def extr_mode_prod(FILTRE_MODE,**args):
+  vale=FILTRE_MODE[0]['MODE']
+  if AsType(vale) == mode_meca   : return mode_meca
+  if AsType(vale) == mode_meca_c : return mode_meca_c
+  if AsType(vale) == mode_gene   : return mode_gene
+  raise AsException("type de concept resultat non prevu")
+
+EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod,
+               docu="U4.52.12-c",reentrant='n',
+         FILTRE_MODE     =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','NUME_MODE','NUME_MODE_EXCLU','FREQ_MIN','CRIT_EXTR',),),
+           MODE            =SIMP(statut='o',typ=(mode_meca,mode_meca_c,mode_gene ) ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+           NUME_MODE_EXCLU =SIMP(statut='f',typ='I',max='**'),
+           FREQ_MIN        =SIMP(statut='f',typ='R' ),
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN"
+                                  ,into=("MASS_EFFE_UN","MASS_GENE") ),
+           b_freq_min      =BLOC(condition = "FREQ_MIN != None",  
+             FREQ_MAX        =SIMP(statut='o',typ='R' ),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),
+           b_crit_extr     =BLOC(condition = "CRIT_EXTR != None",
+             SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),    
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           CUMUL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",into=("MASS_EFFE_UN","MASS_GENE") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 23/01/2002   AUTEUR CIBHHAB N.RAHNI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def extr_resu_prod(RESULTAT,**args):
+  if AsType(RESULTAT) == evol_elas    : return evol_elas
+  if AsType(RESULTAT) == evol_noli    : return evol_noli
+  if AsType(RESULTAT) == evol_ther    : return evol_ther
+  if AsType(RESULTAT) == dyna_trans   : return dyna_trans
+  if AsType(RESULTAT) == dyna_harmo   : return dyna_harmo
+  if AsType(RESULTAT) == acou_harmo   : return acou_harmo
+  if AsType(RESULTAT) == mode_meca    : return mode_meca
+  if AsType(RESULTAT) == mode_acou    : return mode_acou
+  if AsType(RESULTAT) == mode_stat :    return mode_stat
+  if AsType(mode_stat) == mode_stat_depl :    return mode_stat_depl
+  if AsType(mode_stat) == mode_stat_acce :    return mode_stat_acce
+  if AsType(mode_stat) == mode_stat_forc :    return mode_stat_forc
+  if AsType(RESULTAT) == mult_elas    : return mult_elas
+  if AsType(RESULTAT) == fourier_elas : return fourier_elas
+  raise AsException("type de concept resultat non prevu")
+
+EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,docu="U4.71.04-b1",reentrant='f',
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,acou_harmo,mode_meca,          
+                                               mode_acou,mode_stat_depl,mode_stat_acce,mode_stat_forc,evol_ther,evol_noli,   
+                                               mult_elas,fourier_elas ) ),
+
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
+           regles=(  UN_PARMI('NUME_ORDRE', 'INST', 'FREQ', 'NUME_MODE',
+                        'NOEUD_CMP', 'LIST_INST', 'LIST_FREQ', 'LIST_ORDRE',
+                        'NOM_CAS', 'LIST_ARCH', 'PAS_ARCH' ),
+                     EXCLUS( 'CHAM_EXCLU','NOM_CHAM' ),   ),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**'),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',max='**'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',into=("RELATIF","ABSOLU"),defaut="RELATIF"),
+           LIST_ARCH       =SIMP(statut='f',typ=listis),
+           PAS_ARCH        =SIMP(statut='f',typ='I'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8),
+           NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+           NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+           NOM_CAS         =SIMP(statut='f',typ='TXM'),
+                               ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def fact_grad_prod(MATR_ASSE,**args):
+  if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_depl_r
+  if AsType(MATR_ASSE) == matr_asse_temp_r : return matr_asse_temp_r
+  if AsType(MATR_ASSE) == matr_asse_pres_r : return matr_asse_pres_r
+  raise AsException("type de concept resultat non prevu")
+
+FACT_GRAD=OPER(nom="FACT_GRAD",op=85,sd_prod=fact_grad_prod,docu="U4.55.03-e",
+               fr="Préconditionnement pour résolution par gradient conjugué",
+               reentrant='n',
+         MATR_ASSE       =SIMP(statut='o',
+                               typ=(matr_asse_depl_r,matr_asse_temp_r,
+                                    matr_asse_pres_r) ),
+         PRE_COND        =SIMP(statut='f',typ='TXM',defaut="LDLT_INC",into=("LDLT_INC",) ),
+         NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),  
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+FACT_INTE_SPEC=OPER(nom="FACT_INTE_SPEC",op= 117,sd_prod=interspfact,
+                    fr="Factorisation d une matrice interspectrale hermitienne",
+                    docu="U4.36.04-e",reentrant='n',
+         regles=(ENSEMBLE('FREQ_FIN','NB_POIN'),),
+#  regle non indiquée dans la doc U         
+         INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
+         NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+         FREQ_INIT       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         FREQ_FIN        =SIMP(statut='f',typ='R' ),
+         NB_POIN         =SIMP(statut='f',typ='I',defaut= 0 ),
+         SUR_ECHAN       =SIMP(statut='f',typ='R',defaut= 1. ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def fact_ldlt_prod(MATR_ASSE,**args):
+  if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_depl_r
+  if AsType(MATR_ASSE) == matr_asse_depl_c : return matr_asse_depl_c
+  if AsType(MATR_ASSE) == matr_asse_temp_r : return matr_asse_temp_r
+  if AsType(MATR_ASSE) == matr_asse_temp_c : return matr_asse_temp_c
+  if AsType(MATR_ASSE) == matr_asse_pres_r : return matr_asse_pres_r
+  if AsType(MATR_ASSE) == matr_asse_pres_c : return matr_asse_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+FACT_LDLT=OPER(nom="FACT_LDLT",op=14,sd_prod=fact_ldlt_prod,fr="Factorisation en place ou hors place",
+               docu="U4.55.01-f",reentrant='f',
+         regles=(EXCLUS('BLOC_DEBUT','DDL_DEBUT'),
+                 EXCLUS('BLOC_FIN','DDL_FIN'),),
+         MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,
+                                               matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ),
+         STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         NPREC           =SIMP(statut='f',typ='I',defaut=8,val_min=0,),
+         PRE_COND        =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","DIAG") ),
+         BLOC_DEBUT      =SIMP(statut='f',typ='I',val_min=1,),
+         DDL_DEBUT       =SIMP(statut='f',typ='I',val_min=1,),
+         BLOC_FIN        =SIMP(statut='f',typ='I',val_min=1,),
+         DDL_FIN         =SIMP(statut='f',typ='I',val_min=1,),
+#
+         EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+#
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# NEW 5.3.23
+FERMER=PROC(nom="FERMER",op=  10,fr=" ",
+            docu="U4.12.02-a",
+         UNITE           =SIMP(statut='o',typ='I',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude",
+         docu="U4.11.02-f",
+         RETASSAGE       =SIMP(fr="provoque le retassage de la base GLOBALE",
+                               statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         PERFORMANCE     =SIMP(fr="provoque l'impression d'un résumé des mesures de temps ",
+                               statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+         INFO_RESU       =SIMP(fr="provoque l'impression des informations sur les structures de données",
+                               statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="MESSAGE"),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+FONC_FLUI_STRU=OPER(nom="FONC_FLUI_STRU",op= 169,sd_prod=fonction,
+                    docu="U4.35.02-c",reentrant='n',
+         TYPE_FLUI_STRU  =SIMP(statut='o',typ=(type_flui_stru) ),
+)  ;
+#& MODIF COMMANDE  DATE 17/09/2001   AUTEUR MCOURTOI M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+FORMULE = FORM( nom='FORMULE',op=-5,sd_prod=fonction,
+                fr="Définition d une fonction",reentrant = 'n',
+                regles=(UN_PARMI('REEL','ENTIER','COMPLEXE'),),
+                REEL = SIMP(typ = 'shell',max=1),
+                ENTIER = SIMP(typ = 'shell',max=1),
+                COMPLEXE = SIMP(typ = 'shell',max=1),
+) ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=tabl_fonc,
+                    fr="Génération de la fonction temporelle à partir d une matrice interspectrale factorisée",
+                    docu="U4.36.05-e",reentrant='n',
+         INTE_SPEC_FACT  =SIMP(statut='o',typ=interspfact ),
+         INIT_ALEA       =SIMP(statut='f',typ='I',defaut= 12312745 ),
+         NB_TIRAGE       =SIMP(statut='f',typ='I',defaut= 1 ),
+         NB_POIN         =SIMP(statut='f',typ='I' ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_CHARGE=PROC(nom="IMPR_CHARGE",op= 158,
+                 fr="Impression des charges mécaniques de type ddl imposés et relations linéaires entre les ddl",
+                 docu="U7.04.31-c",
+         FICHIER         =SIMP(statut='f',typ='TXM' ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",) ),
+         VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+         CHARGE          =SIMP(statut='o',typ=char_meca,max='**', ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_CLASSI=PROC(nom="IMPR_CLASSI",op= 114,docu="U7.04.21-a",
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','FREQ','NUME_MODE','LIST_FREQ',
+                        'LIST_ORDRE' ),),
+         UNITE_CLASSI    =SIMP(statut='o',typ='I' ),
+         MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+         b_prec_crit     =BLOC(condition = "LIST_FREQ != None or FREQ != None",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
+                                   into=("RELATIF","ABSOLU") ),
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO', ),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         AMOR            =SIMP(statut='o',typ='R',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+IMPR_CO=PROC(nom="IMPR_CO",op=17,docu="U4.91.11-f",
+             fr="Impression du contenu d un concept utilisateur (pour développeur)",
+         regles=(UN_PARMI('CO','CHAINE', ),),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         NIVEAU          =SIMP(statut='f',typ='I',defaut=2,into=(0,1,2) ),
+         ATTRIBUT        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","OUI") ),
+         CONTENU         =SIMP(statut='f',typ='TXM',defaut="OUI",into=("NON","OUI") ),
+         BASE            =SIMP(statut='f',typ='TXM',defaut="G",into=("","G","V","L") ),
+         CO              =SIMP(statut='f',typ=assd,max='**'),
+         CHAINE          =SIMP(statut='f',typ='TXM'),
+         POSITION        =SIMP(statut='f',typ='I',defaut=1),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE MCOURTOI M.COURTOIS
+IMPR_COURBE=PROC(nom="IMPR_COURBE",op= 141,fr="Impression, sur fichiers",
+                 docu="U4.33.01-d1",
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         FORMAT          =SIMP(statut='f',typ='TXM',position='global'
+                              ,into=("AGRAF","EXCEL","POSTSCRIPT","RESULTAT","COMMANDE","SEISME") ),
+         b_agraf_post =BLOC(condition = "(FORMAT=='AGRAF') or (FORMAT=='POSTSCRIPT')",fr="Mots-clés communs AGRAF et POSTCRIPT",
+           BORNE_X         =SIMP(statut='f',typ='R',min=2,max=2,fr="Intervalles de variation des abcisses"),
+           ECHELLE_X       =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),fr="Type d'échelle pour les abcisses" ),
+           BORNE_Y         =SIMP(statut='f',typ='R',min=2,max=2,fr="Intervalles de variation des ordonnées"),
+           ECHELLE_Y       =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),fr="Type d'échelle pour les ordonnées" ),
+         ),
+         b_agraf =BLOC(condition = "(FORMAT=='AGRAF')",fr="Mots-clés propres à AGRAF",
+           TITRE_GRAPHIQUE =SIMP(statut='f',typ='TXM',fr="Titre associé au graphique" ),
+           COMMENTAIRE     =SIMP(statut='f',typ='TXM',max='**',fr="Commentaires associés au graphique"),
+           LEGENDE_X       =SIMP(statut='f',typ='TXM',fr="Légende associée à l axe des abcisses" ),
+           LEGENDE_Y       =SIMP(statut='f',typ='TXM',fr="Légende associée à l axe des ordonnées" ),
+           FREQ_GRILLE_X   =SIMP(statut='f',typ='I',defaut= 0,fr="Fréquence de tracage du quadrillage vertical" ),
+           FREQ_GRILLE_Y   =SIMP(statut='f',typ='I',defaut= 0,fr="Fréquence de tracage du quadrillage horizontal" ),
+         ), 
+         b_excel = BLOC(condition = "(FORMAT=='EXCEL')",fr="Mots-clés propres au format Excel",
+           BORNE_X         =SIMP(statut='f',typ='R',min=2,max=2,fr="Intervalles de variation des abcisses"),
+           BORNE_Y         =SIMP(statut='f',typ='R',min=2,max=2,fr="Intervalles de variation des ordonnées"),
+         ),
+         b_post = BLOC (  condition = "(FORMAT=='POSTSCRIPT')",fr="Mots-clés propres à POSTCRIPT",
+           TITRE           =SIMP(statut='f',typ='TXM',fr="Titre associé au graphique" ),
+           LABEL_X         =SIMP(statut='f',typ='TXM',fr="Légende associée à l axe des abcisses" ),
+           LABEL_Y         =SIMP(statut='f',typ='TXM',fr="Légende associée à l axe des ordonnées" ),
+           SORTIE          =SIMP(statut='f',typ='TXM',defaut="COULEUR",into=("MONOCHROME","COULEUR"),fr="Type d impression" ),
+           DATE            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),fr="Impression de la date" ),
+           GRILLE          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),fr="Impression du quadrillage" ),
+           AXE_ZERO_X      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),fr="Impression de l axe x égal zéro" ),
+           AXE_ZERO_Y      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),fr="Impression de l axe y égal zéro" ),
+           PRESENTATION    =SIMP(statut='f',typ='TXM',defaut="PAYSAGE",into=("PAYSAGE","PORTRAIT"),
+                                 fr="Disposition du graphique sur la feuille" ),
+           FENETRE         =SIMP(statut='f',typ='TXM',defaut="RECTANGLE",into=("CARREE","RECTANGLE"),
+                                 fr="Forme de la fenetre contenant le graphique" ),
+         ),  
+         COURBE          =FACT(statut='o',min=01,max='**',fr="Définition de la courbe à tracer",
+           regles=(UN_PARMI('FONCTION','LIST_RESU','TABLE','FONC_X','RESU_GENE'),),
+           FONCTION        =SIMP(statut='f',typ=(fonction, fonction_c),
+                                 fr="Fonction réelle ou complexe", ),
+           LIST_RESU       =SIMP(statut='f',typ=listr8,
+                                 fr="Liste des ordonnees d une fonction réelle définie par deux listes", ),
+#  creer le type table            
+           TABLE           =SIMP(statut='f',typ=table,
+                                 fr="Nom de la table dont 2 colonnes définissent la fonction",),
+           FONC_X          =SIMP(statut='f',typ=fonction,
+                                 fr="Fonction abscisses d une fonction paramétrique",),
+           RESU_GENE       =SIMP(statut='f',typ=tran_gene, ), 
+           b_fonction      =BLOC(condition = "FONCTION != None",                          
+             LIST_PARA       =SIMP(statut='f',typ=listr8 ),
+           ),   
+           b_fonction_c  =BLOC(condition = "AsType(FONCTION) == fonction_c",
+                                 fr="Fonction complexe définie par le mot-clé fonction",
+             PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),           
+           ),
+           b_list_resu     =BLOC(condition = "LIST_RESU != None",                                
+             LIST_PARA       =SIMP(statut='o',typ=listr8 ),
+           ),  
+           b_table         =BLOC(condition = "TABLE != None",                                         
+             PARA_X          =SIMP(statut='o',typ='TXM',
+                                   fr="Paramètre de la table associé aux abcisses de la fonction à tracer" ),
+             PARA_Y          =SIMP(statut='o',typ='TXM',
+                                   fr="Paramètre de la table associé aux ordonnées de la fonction à tracer" ),        
+           ), 
+           b_fonc_x        =BLOC(condition = "FONC_X != None",                                          
+             FONC_Y          =SIMP(statut='o',typ=fonction,fr="Fonction ordonnées d une fonction paramétrique" ),
+             PARA            =SIMP(statut='f',typ='TXM',defaut="FONC_X",into=("FONC_X","FONC_Y"),
+                                   fr="Permutation des roles des deux fonctions" ),
+             LIST_PARA       =SIMP(statut='f',typ=listr8 ),                
+           ),
+           b_resu_gene     =BLOC(condition = "RESU_GENE != None",                                
+             regles=(UN_PARMI('NOEUD_CHOC','GROUP_NO_CHOC'),),                      
+             NOEUD_CHOC      =SIMP(statut='f',typ=no),
+             GROUP_NO_CHOC   =SIMP(statut='f',typ=grno),
+             PARA_X          =SIMP(statut='o',typ='TXM'),
+             PARA_Y          =SIMP(statut='o',typ='TXM'),
+             LIST_PARA       =SIMP(statut='f',typ=listr8 ),   
+             SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+             INTITULE        =SIMP(statut='f',typ='TXM' ),               
+           ), 
+                 
+               
+           LEGENDE         =SIMP(statut='f',typ='TXM',fr="Légende associée à la courbe" ),
+           STYLE           =SIMP(statut='f',typ='TXM',defaut="LIGNE",fr="Style de la ligne représentant la courbe",
+                                 into=("LIGNE","POINTILLE","POINT","POINT_RELIE") ),
+           COULEUR         =SIMP(statut='f',typ='TXM',fr="Couleur associée à la courbe",
+                                 into=("NOIR","ROUGE","VERT_FONCE","BLEU",
+                                       "MAGENTA","CYAN","VERT","SIENNE","ORANGE",
+                                       "POURPRE","JAUNE","DAIM","TURQUOISE","VIOLET",
+                                       "BRUN","CORAIL","MARRON","MAUVE","MARRON_CLAIR") ),
+           MARQUEUR        =SIMP(statut='f',typ='TXM',fr="Type du marqueur associé à la courbe",
+                                 into=("POINT_F","CARRE_F","TRIANGLE_F",
+                                       "LOSANGE_F","ETOILE_F","FUSEE_F","POINT",
+                                       "CARRE","TRIANGLE","LOSANGE","ETOILE","FUSEE",
+                                       "PLUS","X","CERCLE","CERCLE_P","CARRE_P",
+                                       "LOSANGE_P","CERCLE_P_X","LOSANGE_P_X",
+                                       "CERCLE_X","CARRE_X","LOSANGE_X") ),
+            b_agraf =BLOC(condition = "(FORMAT=='AGRAF')",fr="Mots-clés propres à AGRAF",
+              TRI             =SIMP(statut='f',typ='TXM',defaut="N",
+                                    fr="Choix du tri effectué sur les abcisses ou sur les ordonnées",
+                                    into=("N","X","Y","XY","YX") ),
+              FREQ_MARQUEUR   =SIMP(statut='f',typ='I',defaut= 0,
+                                    fr="Fréquence d impression du marqueur associé à la courbe", ),          
+            ), 
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 25/01/2002   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-a",
+                    fr="Imprime le fichier de configuration de HOMARD.",
+                    ang="Writes the configuration file for HOMARD.",
+#
+# 1. Le niveau d'information
+#
+         INFO           = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+#
+# 2. LE REPERTOIRE OU AURA LIEU LE CALCUL HOMARD
+#
+         REP             =SIMP(statut='f',typ='TXM'),  
+#
+# 3. Langue des messages issus de HOMARD
+#
+         LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
+                               into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
+                           fr="Langue des messages issus de HOMARD.",
+                           ang="Language for HOMARD messages." ),
+#
+# 4. L'UNITE LOGIQUE D'ECRITURE DU FICHIER DE CONFIGURATION HOMARD
+#
+         UNITE           =SIMP(statut='f',typ='I',defaut= 71 ),  
+#
+# 5. LE TYPE DE TRAITEMENT :
+#
+         TRAITEMENT      =FACT(statut='o',min=01,max=01,
+#
+# 5.1. QUATRE CHOIX EXCLUSIFS :
+#
+# 5.1.1.
+#      A. ADAPTATION PAR UN INDICATEUR D'ERREUR, AVEC TROIS VARIANTES :
+#         . RAFFINEMENT ET DERAFFINEMENT
+#         . RAFFINEMENT SEUL
+#         . DERAFFINEMENT SEUL
+#      B. ADAPTATION UNIFORME, AVEC DEUX VARIANTES :
+#         . RAFFINEMENT SEUL
+#         . DERAFFINEMENT SEUL
+#         . RIEN : LE MAILLAGE EST LE MEME A LA SORTIE ET A L'ENTREE
+#      C. INFORMATION SUR UN MAILLAGE
+#      D. MISE A JOUR DE SOLUTIONS
+#
+           regles=( UN_PARMI('ADAPTATION','UNIFORME','INFORMATION','MAJSOLUTION'),),
+           ADAPTATION      =SIMP(statut='f',typ='TXM',     
+                                 fr="Adaptation libre",
+                                 ang="Free adaptation",
+                                 into=("RAFFINEMENT","DERAFFINEMENT","RAFF_DERA") ),
+           UNIFORME        =SIMP(statut='f',typ='TXM',     
+                                 fr="Adaptation uniforme",
+                                 ang="Uniforme adaptation",
+                                 into=("RAFFINEMENT","DERAFFINEMENT","RIEN") ),
+           INFORMATION     =SIMP(statut='f',typ='TXM',
+                                 fr="Adaptation libre",
+                                 ang="Free adaptation",
+                                 into=("OUI",) ),
+           MAJSOLUTION     =SIMP(statut='f',typ='TXM',
+                                 fr="Mise à jour de solutions",
+                                 ang="Solution updating",
+                                 into=("OUI",) ),
+#
+# 5.1.2. LES CONTRAINTES :
+#
+# 5.1.2.1. POUR DE L'ADAPTATION LIBRE, IL FAUT :
+#      A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
+#      B. LE NOM MED DU MAILLAGE D'ENTREE
+#      C. LE NOM MED DE L'INDICATEUR D'ERREUR
+#      D. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
+#      E. LA MISE A JOUR DE SOLUTION
+#      F. LE NOM MED DU MAILLAGE DE SORTIE
+#      REMARQUE : IL FAUT DES CRITERES, MAIS ON NE SAIT PAS LESQUELS
+#
+# 5.1.2.2. POUR DE L'ADAPTATION UNIFORME
+#          IL FAUT :
+#      A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
+#      B. LE NOM MED DU MAILLAGE DE SORTIE
+#          IL NE FAUT PAS :
+#      A. LE NOM MED DE L'INDICATEUR D'ERREUR
+#      B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR
+#      C. LES CRITERES
+#      REMARQUE : A L'ITERATION 0, OU AUX ITERATIONS SUIVANTES SI MAJ DE SOLUTION,
+#                 IL FAUT LE NOM MED DU MAILLAGE D'ENTREE
+#
+# 5.1.2.3. POUR DE LA MISE A JOUR DE SOLUTION :
+#          IL FAUT :
+#      A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
+#      B. LE NOM MED DU MAILLAGE D'ENTREE
+#          IL NE FAUT PAS :
+#      A. LE NOM MED DE L'INDICATEUR D'ERREUR
+#      B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR
+#      C. LES CRITERES
+#
+#
+# 5.1.2.4. POUR DE L'INFORMATION :
+#          IL FAUT :
+#      A. LE NOM MED DU MAILLAGE D'ENTREE
+#          IL NE FAUT PAS :
+#      A. LE NOM MED DE L'INDICATEUR D'ERREUR
+#      B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR
+#      C. LES CRITERES
+#      D. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
+#      E. LA MISE A JOUR DE SOLUTION
+#
+           b_maillage_initial =BLOC(condition = "( INFORMATION != None ) or ( ADAPTATION != None ) or "+
+                                                   "( MAJSOLUTION != None ) ",
+                           fr="Nom MED du maillage en entrée",
+                           ang="MED name of the in-mesh",
+                           NOM_MED_MAILLAGE_N   =SIMP(statut='o',typ='TXM',),
+                           ) ,
+#
+           b_maillage_initial_uniforme =BLOC(condition = "( UNIFORME != None ) ",
+                           fr="Nom MED du maillage en entrée",
+                           ang="MED name of the in-mesh",
+                           NOM_MED_MAILLAGE_N   =SIMP(statut='f',typ='TXM',),
+                           ) ,
+#
+           b_iteration_maj_champ =BLOC(condition = "( UNIFORME != None ) or ( ADAPTATION != None ) or "+
+                                                   "( MAJSOLUTION != None ) ",
+                           fr="Nom MED du maillage en sortie, numero d'iteration et mise à jour de champs",
+                           ang="MED name of the out-mesh, iteration rank and field updating",
+                           NITER                =SIMP(statut='o',typ='I',
+                           fr="Numéro d'itération.",
+                           ang="Iteration #." ),
+                           NOM_MED_MAILLAGE_NP1 =SIMP(statut='o',typ='TXM'),
+                           MAJ_CHAM             =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                           ) ,
+#
+           b_indicateur_d_erreur  =BLOC(condition = "ADAPTATION != None",
+                           fr="Indicateur d'erreur",
+                           ang="Error indicator",
+                           NOM_MED_INDICA  =SIMP(statut='o',typ='TXM',
+                           fr="Nom MED de l'indicateur d'erreur.",
+                           ang="MED name of error indicator.",),
+                           NOM_CMP_INDICA  =SIMP(statut='o',typ='TXM',
+                           fr="Nom de la composante de l'indicateur d'erreur retenue.",
+                           ang="Name of the selected component of the error indicator.",),
+                           NUMDT_INDICA  =SIMP(statut='o',typ='I',
+                           fr="Numero du pas de temps de l'indicateur.",
+                           ang="Time step # of the error indicator.",),
+                           NUMORD_INDICA  =SIMP(statut='o',typ='I',
+                           fr="Numero d'ordre de l'indicateur.",
+                           ang="Rank # of the error indicator.",),
+                           ) ,
+#
+           b_critere_de_raffinement =BLOC( condition = "( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'RAFFINEMENT' )" ,
+                           fr="Critère de raffinement.",
+                           ang="Refinement threshold.",
+                           regles=(UN_PARMI ( 'CRIT_RAFF_ABS', 'CRIT_RAFF_REL', 'CRIT_RAFF_PE' ),),
+                           CRIT_RAFF_ABS   =SIMP(statut='f',typ='R',
+                                                 fr="Critère absolu",
+                                                 ang="Absolute threshold"  ),
+                           CRIT_RAFF_REL   =SIMP(statut='f',typ='R',
+                                                 fr="Critère relatif",
+                                                 ang="Relative threshold" ),
+                           CRIT_RAFF_PE    =SIMP(statut='f',typ='R',
+                                                 fr="Pourcentage d'éléments",
+                                                 ang="Percentage of elements" ),
+                           ) ,
+#
+           b_critere_de_deraffinement =BLOC ( condition = "( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'DERAFFINEMENT' )" ,
+                           fr="Critère de déraffinement.",
+                           ang="Unrefinement threshold.",
+                           regles=(UN_PARMI ( 'CRIT_DERA_ABS', 'CRIT_DERA_REL', 'CRIT_DERA_PE' ),),
+                           CRIT_DERA_ABS   =SIMP(statut='f',typ='R' ,
+                                                 fr="Critère absolu",
+                                                 ang="Absolute threshold" ),
+                           CRIT_DERA_REL   =SIMP(statut='f',typ='R',
+                                                 fr="Critère relatif",
+                                                 ang="Relative threshold" ),
+                           CRIT_DERA_PE    =SIMP(statut='f',typ='R',
+                                                 fr="Pourcentage d'éléments",
+                                                 ang="Percentage of elements" ),
+                           ) ,
+#
+           b_niveau_maximum =BLOC ( condition = " ( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'RAFFINEMENT' ) or "+
+                                                " ( UNIFORME == 'RAFFINEMENT' )" ,
+                             fr="Niveau maximum de profondeur de raffinement",
+                             ang="Maximum level for refinement",
+                             NIVE_MAX        =SIMP(statut='f',typ='I' ),
+                           ) ,
+#
+           b_niveau_minimum =BLOC ( condition = " ( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'DERAFFINEMENT' ) or"+
+                                                " ( UNIFORME == 'DERAFFINEMENT' )" ,
+                             fr="Niveau minimum de déraffinement",
+                             ang="Minimum level for unrefinement",
+                             NIVE_MIN        =SIMP(statut='f',typ='I' ),
+                           ) ,
+#
+         ),
+#
+# 6. L'ANALYSE DU MAILLAGE
+#
+         ANALYSE         =FACT(statut='f',min=01,max=01,
+                               fr="Analyse du maillage.",
+                               ang="Mesh analysis.",
+#
+# 6.1. CHOIX NON EXCLUSIFS, AVEC DEUX VARIANTES (OUI/NON) :
+#    A. NOMBRE DES ELEMENTS
+#    B. QUALITE DES ELEMENTS
+#    C. INTERPENETRATION DES ELEMENTS
+#    D. CONNEXITE DU MAILLAGE
+#    E. TAILLE DES DIFFERENTS SOUS-DOMAINES
+#
+           regles=(AU_MOINS_UN('NOMBRE','QUALITE','INTERPENETRATION','CONNEXITE','TAILLE'),),
+#
+         NOMBRE          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                          fr="Nombre de noeuds et éléments du maillage",
+                          ang="Number of nodes and elements in the mesh" ),
+#
+         QUALITE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Qualité du maillage",
+                          ang="Mesh quality" ),
+#
+         INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Controle de la non interpénétration des éléments.",
+                          ang="Overlapping checking." ),
+#
+         CONNEXITE       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Connexité du maillage.",
+                          ang="Mesh connexity." ),
+#
+         TAILLE          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Tailles des sous-domaines du maillage.",
+                          ang="Sizes of mesh sub-domains." ),
+#
+         ),
+#
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
+               fr="Calcul du dommage subi par une structure soumise à une sollicitation de type aléatoire",
+               docu="U4.91.02-c",
+         GENE            =FACT(statut='o',min=01,max='**',
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                          'LIST_INST','LIST_FREQ','TOUT_MODE','TOUT_INST','LIST_ORDRE'),
+                   EXCLUS('TOUT_MODE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                          'LIST_INST','LIST_FREQ','TOUT_ORDRE','TOUT_INST','LIST_ORDRE'),
+                   EXCLUS('TOUT_INST','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                          'LIST_INST','LIST_FREQ','TOUT_ORDRE','LIST_ORDRE'),
+                   EXCLUS('TOUT_CMP_GENE','NUME_CMP_GENE'),
+                   EXCLUS('TOUT_CHAM','NOM_CHAM'),
+                   EXCLUS('TOUT_PARA','NOM_PARA'),),
+#  faut-il faire des blocs selon le type de RESU_GENE                   
+           RESU_GENE       =SIMP(statut='o',typ=(vect_asse_gene, tran_gene, mode_gene, harm_gene)),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",into=("RESULTAT",) ),
+           FICHIER         =SIMP(statut='f',typ='TXM' ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+           TOUT_MODE       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ),
+           TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+           b_prec_crit     =BLOC(condition = "LIST_FREQ != None or FREQ != None",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
+                                   into=("RELATIF","ABSOLU") ),
+           ),
+           TOUT_CMP_GENE   =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NUME_CMP_GENE   =SIMP(statut='f',typ='I',max='**'),
+           TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',max='**'),
+           TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           INFO_CMP_GENE   =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           INFO_GENE       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,docu="U4.91.21-f",
+                 fr="Impression de caractéristiques d'objets JEVEUX (pour développeur)",
+         ENTITE          =SIMP(fr="choix de l'observation",statut='o',typ='TXM',
+                               into=("DISQUE","MEMOIRE","REPERTOIRE",    
+                                     "OBJET","ATTRIBUT","SYSTEME") ),
+         b_objet      =BLOC(condition = "(ENTITE=='OBJET')",
+            NOMOBJ          =SIMP(fr="nom d'objet",statut='f',typ='TXM' ),  
+            NUMOC           =SIMP(fr="numéro d objet de collection",statut='f',typ='I' ),  
+            NOMOC           =SIMP(fr="nom d'objet de collection",statut='f',typ='TXM' ),  
+         ),
+         b_attribut   =BLOC(condition = "(ENTITE=='ATTRIBUT')",
+            NOMOBJ          =SIMP(fr="nom de collection",statut='f',typ='TXM' ),  
+            NOMATR          =SIMP(fr="nom d attribut de collection",statut='f',typ='TXM',
+                                  into=('$$DESO','$$IADD','$$IADM','$$NOM','$$LONG',
+                                      '$$LONO','$$LUTI','$$NUM') ),
+         ),
+         b_systeme    =BLOC(condition = "(ENTITE=='SYSTEME')",
+            CLASSE          =SIMP(statut='o',typ='TXM',into=('G','V','L') ),  
+            NOMATR          =SIMP(fr="nom d attribut systeme",statut='f',typ='TXM',   
+                                  into=('$$CARA','$$IADD','$$GENR','$$TYPE','$$ETAT',
+                                      '$$DOCU','$$ORIG','$$RNOM','$$LTYP','$$LONG',
+                                      '$$LONO','$$DATE','$$LUTI','$$HCOD','$$INDX',
+                                      '$$TLEC','$$TECR','$$IADM','$$ACCE') ),
+         ),
+         b_repertoire =BLOC(condition = "(ENTITE=='REPERTOIRE')",
+            CLASSE          =SIMP(statut='f',typ='TXM',into=('G','V','L',' '),defaut=' '),  
+         ),
+         b_disque     =BLOC(condition = "(ENTITE=='DISQUE')",
+            CLASSE          =SIMP(statut='f',typ='TXM' ,into=('G','V','L',' '),defaut=' '),  
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           NOM             =SIMP(statut='f',typ='TXM' ),  
+           UNITE           =SIMP(statut='f',typ='I'),  
+         ),
+         COMMENTAIRE     =SIMP(statut='f',typ='TXM' ),  
+)  ;
+#& MODIF COMMANDE  DATE 19/12/2001   AUTEUR CIBHHPD D.NUNEZ 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
+                    docu="U7.04.33-c",
+         MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+         FICHIER         =SIMP(statut='f',typ='TXM' ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
+                               into=("MISS_3D","IDEAS","CADYRO","PLEXUS") ),
+         b_ideas         =BLOC(condition = "FORMAT == 'PLEXUS'",
+           VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+         ),                      
+         b_plexus         =BLOC(condition = "FORMAT == 'IDEAS'",
+           VERSION          =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+         ),             
+         b_miss_3d       =BLOC(condition = "FORMAT == 'MISS_3D'",
+           UNITE           =SIMP(statut='f',typ='I',defaut= 26 ),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           GROUP_MA_INTERF =SIMP(statut='o',typ=grma,max='**'),
+#  Ces trois mots cles sont-ils dans le bon bloc et avec le bon statut        
+           GROUP_MA_FLU_STR=SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA_FLU_SOL=SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA_SOL_SOL=SIMP(statut='f',typ=grma,max='**'),
+           IMPR_MODE_MECA  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           IMPR_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         b_cadyro        =BLOC(condition = "FORMAT == 'CADYRO'",
+           SQUELETTE       =SIMP(statut='f',typ=squelette ),
+           UNITE_MODE_MECA =SIMP(statut='f',typ='I',defaut= 26 ),
+           UNITE_MODE_STAT =SIMP(statut='f',typ='I',defaut= 27 ),
+           UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut= 28 ),
+           IMPR_MODE_MECA  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           IMPR_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
+                  fr="Impression des matrices élémentaires et des matrices assemblées",
+                  docu="U7.04.32-c",
+         regles=(AU_MOINS_UN('MATR_ELEM','MATR_ASSE'),),
+         
+         MATR_ELEM       =FACT(statut='f',min=01,max='**',
+           FICHIER         =SIMP(statut='f',typ='TXM' ),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
+                                 into=("IDEAS","RESULTAT") ),
+           b_format      =BLOC(condition = "FORMAT == 'IDEAS'",
+             VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+           ),
+#  créer les types matr_elem  et vect_elem        
+           MATRICE         =SIMP(statut='o',typ=(matr_elem, vect_elem)),
+#  Quelle regle pour TOUT, NOEUD, GROUP_NO, MAILLE, GROUP_MA           
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           GRAIN           =SIMP(statut='f',typ='TXM',defaut="VALEUR",
+                                 into=("VALEUR","NOEUD","MAILLE") ),
+           NB_CHIFFRE      =SIMP(statut='f',typ='I',defaut= 4 ),
+         ),
+         MATR_ASSE       =FACT(statut='f',min=01,max='**',
+           FICHIER         =SIMP(statut='f',typ='TXM' ),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
+                                 into=("IDEAS","RESULTAT") ),
+           VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+#  créer le type matr_elem           
+           MATRICE         =SIMP(statut='o',typ=matr_asse),
+#  Quelle regle pour TOUT, NOEUD, GROUP_NO, MAILLE, GROUP_MA                      
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="SOUS_MATRICE",
+                                 into=("SOUS_MATRICE","LIGNE","COLONNE") ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           GRAIN           =SIMP(statut='f',typ='TXM',defaut="VALEUR",
+                                 into=("VALEUR","NOEUD") ),
+           NB_CHIFFRE      =SIMP(statut='f',typ='I',defaut= 4 ),
+           VALE_ZERO       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
+                  docu="U7.04.11-c",
+         regles=(UN_PARMI('INST_INIT','FREQ_INIT'),
+                 PRESENT_PRESENT('INST_INIT','INST_FIN'),
+                 PRESENT_PRESENT('FREQ_INIT','FREQ_FIN'),),
+         MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+         EXCIT           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('FONC_MULT','COEF_MULT' ),),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+         ),
+         EXCIT_SOL       =FACT(statut='f',min=01,max='**',
+           DIRECTION       =SIMP(statut='o',typ='R',max='**'),
+           FONC_SIGNAL     =SIMP(statut='f',typ=fonction ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",
+                                 into=("DEPL","VITE","ACCE","FORC",) ),
+         ),
+         INST_INIT       =SIMP(statut='f',typ='R' ),
+         INST_FIN        =SIMP(statut='f',typ='R' ),
+         FREQ_INIT       =SIMP(statut='f',typ='R' ),
+         FREQ_FIN        =SIMP(statut='f',typ='R' ),
+         PAS             =SIMP(statut='o',typ='R' ),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 26 ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_RESU=PROC(nom="IMPR_RESU",op=39,docu="U4.91.01-f1",
+               fr="Impression du résultat d un calcul (différents formats)",
+         MODELE          =SIMP(statut='f',typ=modele),
+         RESU            =FACT(statut='o',min=01,max='**',
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
+                                 into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED","GMSH") ),
+
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),
+
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+
+           regles=(AU_MOINS_UN('CHAM_GD','RESULTAT','MAILLAGE'),
+                   EXCLUS('CHAM_GD','RESULTAT'),),
+           MAILLAGE        =SIMP(statut='f',typ=(maillage,squelette)),
+           INFO_MAILLAGE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CHAM_GD         =SIMP(statut='f',typ=cham_gd),
+           RESULTAT        =SIMP(statut='f',typ=resultat),# CO() sd a creer !!!
+
+           b_sensibilite   =BLOC(condition="RESULTAT != None",
+                                 fr="Définition des paramètres de sensibilité",
+                                 ang="Definition of sensitivity parameters",
+             SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
+                                   fr="Liste des paramètres de sensibilité.",
+                                   ang="List of sensitivity parameters"),),
+
+           b_extrac        =BLOC(condition="RESULTAT != None",
+                                 fr="extraction d un champ de grandeur",
+             regles=(EXCLUS('TOUT_CHAM','NOM_CHAM'),
+                     EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP',
+                            'LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS','ANGL'),),
+             TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',max='**'),
+
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+             NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis),
+             NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+             NOM_CAS         =SIMP(statut='f',typ='TXM',max='**'),
+             ANGL            =SIMP(statut='f',typ='R',max='**'),
+             FREQ            =SIMP(statut='f',typ='R',max='**'),
+             LIST_FREQ       =SIMP(statut='f',typ=listr8),
+             INST            =SIMP(statut='f',typ='R',max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8),
+
+             b_acce_reel     =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
+               PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+           ),
+
+           b_parametres    =BLOC(condition="""(RESULTAT != None)and(FORMAT == 'RESULTAT')""",
+             regles=(EXCLUS('TOUT_PARA','NOM_PARA'),),
+             INFO_RESU       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+             TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI","NON",) ),
+             NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),
+             FORM_TABL       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON","EXCEL") ),
+           ),
+
+           b_cmp=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and((FORMAT == 'RESULTAT')or(FORMAT == 'ENSIGHT'))""",
+                                 fr="sélection des composantes",
+             regles=(EXCLUS('TOUT_CMP','NOM_CMP'),),
+             TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           ),
+
+           b_gmsh=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and((FORMAT == 'GMSH'))""",
+                                 fr="sélection des composantes et des entités toplogiques",
+             NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ),
+
+           b_topologie=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and((FORMAT == 'RESULTAT')or(FORMAT == 'IDEAS'))""",
+                                   fr="sélection des entités toplogiques",
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ),
+
+           b_valeurs         =BLOC(condition="(FORMAT == 'RESULTAT')",
+                                   fr="sélection sur les valeurs",
+             VALE_MAX        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             VALE_MIN        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             BORNE_SUP       =SIMP(statut='f',typ='R'),
+             BORNE_INF       =SIMP(statut='f',typ='R'),
+             IMPR_COOR       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+             FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5"),
+           ),
+
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           FICHIER         =SIMP(statut='f',typ='TXM'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de valeurs propres dans un intervalle donné",
+                docu="U4.52.01-f",
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="DYNAMIQUE",into=("MODE_FLAMB","DYNAMIQUE"),
+                               fr="Type d analyse" ),
+         b_dynamique  =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+                            fr="Recheche du nombre de fréquences propres",
+             FREQ_MIN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ,fr="Borne inférieure de l intervalle" ),
+             FREQ_MAX        =SIMP(statut='o',typ='R',fr="Borne supérieure de l intervalle" ),
+         ),
+         b_mode_flamb =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+                            fr="Recherche du nombre de charges critiques",
+             CHAR_CRIT_MIN   =SIMP(statut='o',typ='R',fr="Borne inférieure de l intervalle" ),
+             CHAR_CRIT_MAX   =SIMP(statut='o',typ='R',fr="Borne supérieure de l intervalle" ),
+         ),
+         NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8 ),
+         NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+         SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+IMPR_TABLE=PROC(nom="IMPR_TABLE",op=155,docu="U4.91.03-c1",
+                fr="Impression d un concept de type table",
+         TABLE           =SIMP(statut='o',typ=table),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT", ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="EXCEL",
+                               into=("EXCEL","AGRAF","MOT_CLE","TABLEAU") ),
+         FILTRE          =FACT(statut='f',min=1,max='**',
+           NOM_PARA        =SIMP(statut='o',typ='TXM'),
+           CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",
+                                 into=("EQ","LT","GT","NE","LE","GE","VIDE",
+                                       "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI") ),
+           b_vale          =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+              regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+              VALE            =SIMP(statut='f',typ='R'),
+              VALE_I          =SIMP(statut='f',typ='I'),
+              VALE_C          =SIMP(statut='f',typ='C'),
+              VALE_K          =SIMP(statut='f',typ='TXM'),),
+
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         ),
+         TRI             =FACT(statut='f',min=1,max=1,
+           NOM_PARA        =SIMP(statut='o',typ='TXM',max='**'),
+           ORDRE           =SIMP(statut='f',typ='TXM',max='**',defaut="CROISSANT",
+                                 into=("CROISSANT","DECROISSANT") ),
+         ),
+         PAGINATION      =SIMP(statut='f',typ='TXM',max='**'),
+         FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5"),
+         FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",
+                                    into=("MODULE_PHASE","REEL_IMAG") ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),
+         TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         IMPR_FONCTION   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+INCLUDE=MACRO(nom="INCLUDE",op=-1,docu="U4.13.01-e",
+             fr="Débranchement vers un fichier de commandes secondaires",
+             sd_prod=ops.INCLUDE,op_init=ops.INCLUDE_context,fichier_ini=1,
+         UNITE = SIMP(statut='o',typ='I'),
+         INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+);
+#& MODIF COMMANDE  DATE 14/02/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,docu="U4.43.02-a",
+                       fr=" ",
+         sd_prod=ops.INCLUDE_MATERIAU,op_init=ops.INCLUDE_context,fichier_ini=0,
+         NOM_AFNOR       =SIMP(statut='o',typ='TXM' ),  
+         TYPE_MODELE     =SIMP(statut='o',typ='TXM',into=("REF","PAR") ),
+         VARIANTE        =SIMP(statut='o',typ='TXM',     
+                               into=("A","B","C","D","E","F","G","H","I","J",    
+                                     "K","L","M","N","O","P","Q","R","S","T","U","V",   
+                                     "W","X","Y","Z",) ),
+         TYPE_VALE       =SIMP(statut='o',typ='TXM',into=("NOMI","MINI","MAXI") ),
+         NOM_MATER       =SIMP(statut='o',typ='TXM' ),  
+         UNITE           =SIMP(statut='f',typ='I',defaut= 32 ),  
+         EXTRACTION      =FACT(statut='f',min=01,max=99,
+           COMPOR          =SIMP(statut='o',typ='TXM' ),  
+           TEMP_EVAL       =SIMP(statut='o',typ='R' ),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe,docu="U4.81.11-e",
+                  fr="Définition d une courbe sur un maillage 2D",reentrant='n',
+
+         MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
+
+         regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                 AU_MOINS_UN('DEFI_SEGMENT','DEFI_ARC','DEFI_CHEMIN'),
+                 PRESENT_ABSENT('DEFI_CHEMIN','DEFI_SEGMENT','DEFI_ARC'),
+                 PRESENT_ABSENT('DEFI_SEGMENT','NOEUD_ORIG','GROUP_NO_ORIG'),
+                 PRESENT_ABSENT('DEFI_ARC','NOEUD_ORIG','GROUP_NO_ORIG'),
+                 EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+                 EXCLUS('DEFI_CHEMIN','DEFI_SEGMENT'),
+                 EXCLUS('DEFI_CHEMIN','DEFI_ARC'),),
+
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+         DEFI_SEGMENT    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+                   UN_PARMI('EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),),
+           ORIGINE         =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+           EXTREMITE       =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
+         ),
+
+         DEFI_ARC        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+                   UN_PARMI('RAYON','ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+                   UN_PARMI('RAYON','EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),               
+                   PRESENT_PRESENT('RAYON','SECTEUR'),),
+           CENTRE          =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,max=1),
+           RAYON           =SIMP(statut='f',typ='R',max=1,val_min=0.E+0),  
+           SECTEUR         =SIMP(statut='f',typ='R',min=2,max=2,
+                                 val_min=-180.E+0,val_max=180E+0),  
+           ORIGINE         =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+           EXTREMITE       =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",    
+                                 into=("RELATIF","ABSOLU",) ),
+         ),
+
+         DEFI_CHEMIN     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+         GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface,docu="U4.81.12-e",
+                  fr="Définition d un chemin sur un maillage 3D",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         DEFI_SEGMENT    =FACT(statut='o',min=01,max='**',
+           regles=(UN_PARMI('ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+                   UN_PARMI('EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),),
+           ORIGINE         =SIMP(statut='f',typ='R',min=3,max=3),  
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+           EXTREMITE       =SIMP(statut='f',typ='R',min=3,max=3),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
+         ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 25/01/2002   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def lire_champ_prod(TYPE_CHAM=None,**args):
+  if TYPE_CHAM == "CHAM_NO_TEMP_R" : return cham_no_temp_r
+  if TYPE_CHAM == "CHAM_NO_DEPL_R" : return cham_no_depl_r
+  raise AsException("type de concept resultat non prevu")
+
+LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
+                fr="Lire un champ dans un fichier et le stocker dans un concept.",
+                ang="To read a field in a file and to save it in a concept.",
+                docu="U7.02.02-a1",reentrant='n',
+#
+# 1. Le maillage support du champ
+#
+         MAILLAGE        =SIMP(statut='o',typ=maillage,
+                          fr="Nom du maillage support du champ",
+                          ang="Name of the mesh on which the field is defined" ),
+#
+# 2. Format de lecture
+#    Remarque : seul MED est operationnel dans cette version.
+#
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="MED",into=("MED",),
+                          fr="Format du fichier : MED seulement",
+                          ang="Format of the file : MED only" ),
+#
+# 3. L'unite logique du fichier.
+#
+         UNITE           =SIMP(statut='f',typ='I',defaut= 81,
+                          fr="Le fichier est : fort.n.",
+                          ang="File is : fort.n" ),  
+#
+# 4. Pour le format MED, il faut preciser le nom sous lequel le champ est connu dans le fichier
+#    et les composantes a lire
+#
+         b_format =BLOC(condition = "FORMAT == 'MED'",
+                        fr="Nom du champ dans le fichier MED",
+         regles=(UN_PARMI('NOM_CMP_IDEM','NOM_CMP'),
+          PRESENT_PRESENT('NOM_CMP','NOM_CMP_MED' ),),
+#
+            NOM_MED      =SIMP(statut='o',typ='TXM',
+                          fr="Nom du champ dans le fichier MED.",
+                          ang="Name of the field in the MED file." ),
+#
+            NOM_CMP_IDEM =SIMP(statut='f',typ='TXM',into=("OUI",),
+                          fr="Les composantes ont le meme nom dans MED et ASTER.",
+                          ang="The names of the components are the same in ASTER and MED." ),
+            NOM_CMP      =SIMP(statut='f',typ='TXM',max='**',
+                          fr="Nom des composantes dans ASTER.",
+                          ang="Names of the components in ASTER" ),
+            NOM_CMP_MED  =SIMP(statut='f',typ='TXM',max='**',
+                          fr="Nom des composantes dans MED.",
+                          ang="Names of the components in MED" ),
+#
+            NUME_ORDRE   =SIMP(statut='f',typ='I',max='**',
+                          fr="Numero d'ordre du champ à lire.",
+                          ang="Rank number of the field to read."),
+#
+# Pour une lecture dans un fichier MED, on peut préciser le nom sous lequel
+# le maillage associé au champ y a été enregistré. Par défaut, on prendra le premier maillage.
+#
+            NOM_MAIL_MED = SIMP(statut='f',typ='TXM',
+                           fr="Nom du maillage dans le fichier MED.",
+                           ang="Name of the mesh into the MED file.",),
+#
+                  ),
+#
+# 5. Le type du concept lu
+#
+         TYPE_CHAM       =SIMP(statut='o',typ='TXM',into=("CHAM_NO_TEMP_R","CHAM_NO_DEPL_R"),
+                          fr="Type de champ à créer.",
+                          ang="Type of the field to create." ),
+#
+# 6. Le niveau d'information
+#
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+LIRE_FONCTION=OPER(nom="LIRE_FONCTION",op=  83,sd_prod=fonction,
+                   fr="Lecture d une fonction dans un fichier ",
+                   docu="U4.32.02-e1",reentrant='n',
+         UNITE           =SIMP(statut='o',typ='I' ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC",) ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC",) ),
+         INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 2,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+LIRE_INTE_SPEC=OPER(nom="LIRE_INTE_SPEC",op= 116,sd_prod=tabl_intsp,
+                    fr="Lecture sur un fichier externe de  fonctions complexes pour créer une matrice interspectrale",
+                    docu="U4.36.01-e1",reentrant='n',
+         UNITE           =SIMP(statut='o',typ='I' ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",into=("REEL_IMAG","MODULE_PHASE") ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC",) ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 10/10/2001   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage,
+                   fr="Lecture d'un fichier de maillage",
+                   ang="Readings of a mesh file",
+                   docu="U4.21.01-f",reentrant='n',
+#
+         UNITE           =SIMP(statut='f',typ='I',defaut= 20 ),
+#
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","MED"),
+                            fr="Format du fichier : ASTER ou MED.",
+                            ang="Format of the file : ASTER or MED.",),
+#
+         ABSC_CURV       =FACT(statut='f',min=00,max=01,
+               TOUT          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+#
+         VERI_MAIL       =FACT(statut='d',min=01,max=01,
+               APLAT         =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+         ),
+#
+         b_format_med =BLOC( condition = " ( FORMAT == 'MED' ) " ,
+                           fr="Informations complémentaires pour la lecture MED.",
+                           ang="Further information for MED readings.",
+#
+# Pour une lecture dans un fichier MED, on peut préciser le nom sous lequel
+# le maillage y a été enregistré. Par défaut, on va le chercher sous le nom du concept à créer.
+#
+              NOM_MED    = SIMP(statut='f',typ='TXM',
+                            fr="Nom du maillage dans le fichier MED.",
+                            ang="Name of the mesh into the MED file.",),
+#
+              INFO_MED   = SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#
+                           ) ,
+#
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def lire_miss_3d_prod(TYPE_RESU,**args):
+  if TYPE_RESU == "TRANS" : return dyna_trans
+  if TYPE_RESU == "HARMO" : return dyna_harmo
+  raise AsException("type de concept resultat non prevu")
+
+LIRE_MISS_3D=OPER(nom="LIRE_MISS_3D",op= 163,sd_prod=lire_miss_3d_prod,
+                  fr="Restitution au format MISS3D d une évolution harmonique ou transitoire",
+                  docu="U7.02.31-c",reentrant='n',
+         MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 27 ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="TRANS",into=("TRANS","HARMO") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
+                 fr=" ",
+                 docu="U7.02.11-a",reentrant='n',
+         regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 19 ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",)),
+         MAIL_PLEXUS     =SIMP(statut='o',typ=maillage ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage ),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8 ),
+         b_prec_crit     =BLOC(condition = "LIST_INST != None or INST != None",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
+                                   into=("RELATIF","ABSOLU") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 12/09/2001   AUTEUR MCOURTOI M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def lire_resu_prod(TYPE_RESU,**args):
+  if TYPE_RESU == "EVOL_CHAR" :  return evol_char
+  if TYPE_RESU == "EVOL_THER" :  return evol_ther
+  if TYPE_RESU == "EVOL_ELAS" :  return evol_elas
+  if TYPE_RESU == "EVOL_NOLI" :  return evol_noli
+  if TYPE_RESU == "DYNA_TRANS" : return dyna_trans
+  if TYPE_RESU == "DYNA_HARMO" : return dyna_harmo
+  if TYPE_RESU == "HARM_GENE" :  return harm_gene
+  raise AsException("type de concept resultat non prevu")
+
+LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,docu="U7.02.01-c1",reentrant='n',
+               fr="Lecture de champs aux noeuds ou par éléments aux noeuds sur un fichier IDEAS ou EnSight",
+         regles=(UN_PARMI('MAILLAGE','MODELE'),),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS","ENSIGHT","MED") ),
+         b_unite         =BLOC(condition="FORMAT=='IDEAS'",
+           UNITE           =SIMP(statut='f',typ='I',defaut= 19 ),
+         ),
+         b_nom_fichier     =BLOC(condition="FORMAT=='ENSIGHT'",
+           NOM_FICHIER     =SIMP(statut='f',typ='TXM'),
+         ),
+         TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_THER","EVOL_ELAS","EVOL_NOLI",
+                                                          "DYNA_TRANS","DYNA_HARMO","HARM_GENE","EVOL_CHAR") ),
+         b_evol_elas     =BLOC(condition="TYPE_RESU=='EVOL_ELAS'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("DEPL",) ),
+         ),
+         b_evol_ther     =BLOC(condition="TYPE_RESU=='EVOL_THER'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("TEMP","TEMP_PEAU") ),
+         ),
+         b_evol_char     =BLOC(condition="TYPE_RESU=='EVOL_CHAR'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("PRES","VITE_VENT",
+                                       "FVOL_3D","FVOL_2D",
+                                       "FSUR_3D","FSUR_2D") ),
+         ),
+         b_evol_noli     =BLOC(condition="TYPE_RESU=='EVOL_NOLI'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("DEPL","VITE","ACCE","VARI_ELNO",
+                                       "SIEF_ELNO","EPSA_ELNO") ),
+         ),
+         b_dyna          =BLOC(condition="(TYPE_RESU=='DYNA_TRANS') or (TYPE_RESU=='DYNA_HARMO') or\
+                                          (TYPE_RESU=='HARM_GENE')",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("DEPL","VITE","ACCE",) ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+         MAILLAGE        =SIMP(statut='f',typ=maillage),
+         MODELE          =SIMP(statut='f',typ=modele),
+         NB_VARI         =SIMP(statut='f',typ='I' ),
+         FORMAT_IDEAS    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('POSI_INST','POSI_FREQ'),),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',into=("TEMP","DEPL","VITE","ACCE","PRES","VARI_ELNO",
+                                                                     "SIEF_ELNO","EPSA_ELNO","TEMP_PEAU","VITE_VENT",
+                                                                     "FVOL_3D","FVOL_2D","FSUR_3D","FSUR_2D") ),
+           NUME_DATASET    =SIMP(statut='f',typ='I',into=(55,57,2414) ),
+           RECORD_3        =SIMP(statut='f',typ='I',max='**'),
+           RECORD_6        =SIMP(statut='f',typ='I',max='**'),
+           RECORD_9        =SIMP(statut='f',typ='I',max='**'),
+           POSI_ORDRE      =SIMP(statut='o',typ='I',max='**'),
+           POSI_INST       =SIMP(statut='f',typ='I',max='**'),
+           POSI_FREQ       =SIMP(statut='f',typ='I',max='**'),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+         ),
+         b_extrac        =BLOC(condition="1",fr="accès à un champ dans la structure de données résultat",
+           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST','FREQ','LIST_FREQ'),),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8),
+             
+           b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 25/01/2002   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+def macr_adap_mail_prod(self,MAJ_CHAM,ADAPTATION,**args):
+  mail1=ADAPTATION['MAILLAGE_N']
+  self.type_sdprod(mail1,maillage)
+  mail2=ADAPTATION['MAILLAGE_NP1']
+  self.type_sdprod(mail2,maillage)
+  if MAJ_CHAM == None:return None
+  for ch in MAJ_CHAM:
+    t=ch['TYPE_CHAM']
+    if t == 'CHAM_NO_TEMP_R':self.type_sdprod(ch['CHAM_MAJ'],cham_no_temp_r)
+    if t == 'CHAM_NO_DEPL_R':self.type_sdprod(ch['CHAM_MAJ'],cham_no_depl_r)
+  return None
+
+MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=-24,sd_prod=macr_adap_mail_prod,
+                     fr="Adapter un maillage avec le logiciel HOMARD.",
+                     ang="Mesh adaptation with HOMARD software.",
+                     docu="U7.03.01-a",
+#
+# 1. Le niveau d'information
+#
+         INFO           = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+#
+# 2. Version de HOMARD
+#
+         VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V5_1",
+                               into=("V5_1", "V5_N", "V5_N_PERSO"),
+                           fr="Version de HOMARD",
+                           ang="HOMARD release"),
+#
+# 3. Langue des messages issus de HOMARD
+#
+         LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
+                               into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
+                           fr="Langue des messages issus de HOMARD.",
+                           ang="Language for HOMARD messages." ),
+#
+# 4. LE TYPE DE TRAITEMENT :
+#
+         ADAPTATION      =FACT(statut='o',min=01,max=01,
+                           fr="Type d'adaptation",
+                           ang="Type of adaptation",
+#
+# 4.1. DEUX CHOIX D'ADAPTATION EXCLUSIFS :
+#
+# 4.1.
+#      A. SELON UN INDICATEUR D'ERREUR, AVEC TROIS VARIANTES :
+#         . RAFFINEMENT ET DERAFFINEMENT
+#         . RAFFINEMENT SEUL
+#         . DERAFFINEMENT SEUL
+#      B. UNIFORME, AVEC TROIS VARIANTES :
+#         . RAFFINEMENT SEUL
+#         . DERAFFINEMENT SEUL
+#         . RIEN : LE MAILLAGE EST LE MEME A LA SORTIE ET A L'ENTREE
+#
+           regles=(
+                   UN_PARMI('LIBRE','UNIFORME'),
+                  ),
+           LIBRE          = SIMP(statut='f',typ='TXM',
+                                 into=("RAFF_DERA","RAFFINEMENT","DERAFFINEMENT"),    
+                           fr="Adaptation selon un indicateur d'erreur.",
+                           ang="Adaptation among an error indicator" ),
+           UNIFORME       = SIMP(statut='f',typ='TXM',
+                                 into=("RAFFINEMENT","DERAFFINEMENT","RIEN"),    
+                           fr="Adaptation uniforme.",
+                           ang="Uniform adaptation" ),
+#
+# 4.2. QUEL QUE SOIT LE TYPE DE TRAITEMENT, IL FAUT DONNER  :
+#      A. LE CONCEPT DU MAILLAGE INITIAL
+#      B. LE CONCEPT DU MAILLAGE FINAL
+#
+           MAILLAGE_N     = SIMP(statut='o',typ=(CO,maillage),
+                           fr="Maillage avant adaptation",
+                           ang="Mesh before adaptation" ),
+           MAILLAGE_NP1   = SIMP(statut='o',typ=(CO,maillage),
+                           fr="Maillage apres adaptation",
+                           ang="Mesh after adaptation" ),
+#
+# 4.3. POUR DE L'ADAPTATION LIBRE, IL FAUT L'INDICATEUR D'ERREUR
+#
+#
+           b_indicateur_d_erreur   =BLOC( condition = " LIBRE != None " ,
+                           fr="Indicateur d'erreur",
+                           ang="Error indicator",
+#
+# 4.3.1. LE NOM DU CONCEPT RESULTAT
+#
+                           RESULTAT_N     = SIMP(statut='o',typ=(evol_elas,evol_noli,evol_ther) ,
+                           fr="Resultat contenant l'indicateur d'erreur",
+                           ang="Result with error indicator" ),
+#
+# 4.3.2. LE CHAMP D'INDICATEUR D'ERREUR
+#
+                           INDICATEUR     = SIMP(statut='o',typ='TXM',     
+                           fr="Champ de l'indicateur d'erreur",
+                           ang="Error indicator field" ),
+#
+# 4.3.3. LA COMPOSANTE RETENUE
+#
+                           NOM_CMP_INDICA = SIMP(statut='o',typ='TXM',
+                           fr="Composante retenue",
+                           ang="Selected component" ),
+#
+# 4.3.4. LE NUMERO D'ORDRE
+#
+                           NUME_ORDRE     = SIMP(statut='f',typ='I' ,
+                           fr="Numero d ordre",
+                           ang="Rank" ),  
+                           ) ,
+#
+# 4.4. LES CRITERES POUR DE L'ADAPTATION LIBRE :
+#        ABSOLU, RELATIF, EN PROPORTION D'ENTITE
+# 4.4.1. POUR LE RAFFINEMENT :
+#
+           b_critere_de_raffinement =BLOC( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'RAFFINEMENT' ) " ,
+                           fr="Critère de raffinement.",
+                           ang="Refinement threshold.",
+                           regles=(UN_PARMI ( 'CRIT_RAFF_ABS', 'CRIT_RAFF_REL', 'CRIT_RAFF_PE' ),),
+                           CRIT_RAFF_ABS  = SIMP(statut='f',typ='R',
+                                                   fr="Critère absolu",
+                                                   ang="Absolute threshold" ),  
+                           CRIT_RAFF_REL  = SIMP(statut='f',typ='R',
+                                                   fr="Critère relatif",
+                                                   ang="Relative threshold" ),  
+                           CRIT_RAFF_PE   = SIMP(statut='f',typ='R',
+                                                   fr="Pourcentage d'éléments",
+                                                   ang="Percentage of elements" ),  
+                           ) ,
+#
+# 4.4.2. POUR LE DERAFFINEMENT :
+#
+           b_critere_de_deraffinement =BLOC ( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'DERAFFINEMENT' ) " ,
+                           fr="Critère de déraffinement.",
+                           ang="Unrefinement threshold.",
+                           regles=(UN_PARMI ( 'CRIT_DERA_ABS', 'CRIT_DERA_REL', 'CRIT_DERA_PE' ),),
+                           CRIT_DERA_ABS  = SIMP(statut='f',typ='R' ,
+                                                 fr="Critère absolu",
+                                                 ang="Absolute threshold" ),  
+                           CRIT_DERA_REL  = SIMP(statut='f',typ='R',
+                                                 fr="Critère relatif",
+                                                 ang="Relative threshold" ),  
+                           CRIT_DERA_PE   = SIMP(statut='f',typ='R',
+                                                 fr="Pourcentage d'éléments",
+                                                 ang="Percentage of elements" ),  
+                           ) ,
+#
+# 4.5. LES NIVEAUX EXTREMES POUR LE MAILLAGE ADAPTE
+# 4.5.1. POUR LE RAFFINEMENT :
+#
+           b_niveau_maximum =BLOC ( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'RAFFINEMENT' ) or "+
+                                                " ( UNIFORME == 'RAFFINEMENT' ) " ,
+                             fr="Niveau maximum de profondeur de raffinement",
+                             ang="Maximum level for refinement",
+                             NIVE_MAX       = SIMP(statut='f',typ='I' ),  
+                           ) ,
+#
+# 4.5.2. POUR LE DERAFFINEMENT :
+#
+           b_niveau_minimum =BLOC ( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'DERAFFINEMENT' ) or "+
+                                                " ( UNIFORME == 'DERAFFINEMENT' ) " ,
+                             fr="Niveau minimum de profondeur de déraffinement",
+                             ang="Minimum level for unrefinement",
+                             NIVE_MIN       = SIMP(statut='f',typ='I' ),
+                           ) ,
+         ),
+#
+# 5. LA MISE A JOUR DE CHAMPS.
+#    PAR DEFAUT, RIEN NE SE FAIT
+#
+         MAJ_CHAM        =FACT(statut='f',min=01,max='**',
+                           fr="Mise à jour de champs sur le nouveau maillage.",
+                           ang="Updationg of fields over the new mesh.",
+#
+# 5.1. LE NOM DU RESULTAT DU CHAMP A INTERPOLER
+#
+           RESULTAT       = SIMP(statut='o',
+                                 typ=(evol_elas,evol_noli,evol_ther),
+                           fr="Resultat contenant le champ à mettre à jour",
+                           ang="Result with field to be updated" ),
+#
+# 5.2. LE NOM DU CHAMP A INTERPOLER
+#
+           NOM_CHAM       = SIMP(statut='o',typ='TXM',
+                           fr="Nom du champ à mettre à jour",
+                           ang="Name of the field to be updated" ),  
+#
+# 5.3. LE NUMERO D'ORDRE POUR LE CHAMP A INTERPOLER
+#
+           NUME_ORDRE     = SIMP(statut='f',typ='I',
+                           fr="Numero d ordre du champ à mettre à jour",
+                           ang="Rank of the field to be updated" ),  
+#
+# 5.4. LE NOM DU CHAMP QUI CONTIENDRA LE RESULTAT DE LA MISE A JOUR
+#
+           CHAM_MAJ       = SIMP(statut='o',typ=(CO,cham_gd),
+                           fr="Nom du champ qui contiendra le champ mis à jour",
+                           ang="Name of the field for the updated field"),
+#
+# 5.5. LE TYPE DU CHAMP QUI CONTIENDRA LE RESULTAT DE LA MISE A JOUR
+#
+           TYPE_CHAM      = SIMP(statut='o',typ='TXM',     
+                                 into=("CHAM_NO_TEMP_R","CHAM_NO_DEPL_R"),
+                           fr="Type du champ qui contiendra le champ mis à jour",
+                           ang="Type of the field for the updated field" ),
+         ),
+#
+# 6. INFORMATION SUR LE MAILLAGE : par defaut, on ne fait que les nombres
+#    A. NOMBRE DE NOEUDS ET ELEMENTS DU MAILLAGE
+#    B. QUALITE DES ELEMENTS DU MAILLAGE
+#    C. CONTROLE DE LA NON INTERPENETRATION DES ELEMENTS DU MAILLAGE
+#    D. CONNEXITE DU MAILLAGE
+#    E. TAILLE DES DIFFERENTS SOUS-DOMAINES
+#
+         NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                          fr="Nombre de noeuds et éléments du maillage",
+                          ang="Number of nodes and elements in the mesh" ),
+#
+         QUALITE        = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Qualité du maillage",
+                          ang="Mesh quality" ),
+#
+         INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Controle de la non interpénétration des éléments.",
+                          ang="Overlapping checking." ),
+#
+         CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Connexité du maillage.",
+                          ang="Mesh connexity." ),
+#
+         TAILLE         = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Tailles des sous-domaines du maillage.",
+                          ang="Sizes of mesh sub-domains." ),
+#
+         MENAGE         = SIMP(statut='f',typ='TXM',into=("MAILLAGE","SOLUTION","TOUT") ),
+#
+)  ;
+#& MODIF COMMANDE  DATE 20/12/2001   AUTEUR F1BHHAJ J.ANGLES 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE F1BHHAJ J.ANGLES
+def macr_ascouf_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS,CHARGE,RESU_THER,**args):
+  self.type_sdprod(MODELE,modele)
+  if CHAM_MATER != None:self.type_sdprod(CHAM_MATER,cham_mater)
+  if CARA_ELEM  != None:self.type_sdprod(CARA_ELEM,cara_elem)
+  if FOND_FISS  != None:self.type_sdprod(FOND_FISS,fond_fiss)
+  if CHARGE     != None:self.type_sdprod(CHARGE,char_meca)
+  if RESU_THER  != None:self.type_sdprod(RESU_THER,evol_ther)
+  return evol_noli
+
+MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_prod,
+                      fr=" ",
+                      docu="U4.CF.20-a",reentrant='n',
+         regles=(UN_PARMI('COMP_INCR','COMP_ELAS'),),
+
+         TYPE_MAILLAGE   =SIMP(statut='o',typ='TXM',
+                               into=("SAIN",
+                                     "FISS_COUDE",
+                                     "SOUS_EPAIS_COUDE"
+                                     ) ),
+
+         CL_BOL_P2_GV    =FACT(statut='f',min=1,max=1,
+           ANGLE           =SIMP(statut='o',typ='R' ),
+           AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),
+         ),
+
+         MAILLAGE        =SIMP(statut='o',typ=maillage ),
+         MODELE          =SIMP(statut='o',typ=(CO,modele)),
+         CHAM_MATER      =SIMP(statut='f',typ=(CO,cham_mater)),
+         CARA_ELEM       =SIMP(statut='f',typ=(CO,cara_elem)),
+         FOND_FISS       =SIMP(statut='f',typ=(CO,fond_fiss)),
+         CHARGE          =SIMP(statut='f',typ=(CO,char_meca)),
+         RESU_THER       =SIMP(statut='f',typ=(CO,evol_ther)),
+
+         AFFE_MATERIAU   =FACT(statut='o',min=1,max=3,
+           regles=(UN_PARMI('TOUT','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ='TXM',into=("COUDE","BOL") ),
+           MATER           =SIMP(statut='o',typ=mater ),
+           TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+
+         PRES_REP        =FACT(statut='f',min=1,max=1,
+           PRES            =SIMP(statut='o',typ='R' ),
+           EFFE_FOND_P1    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+         ),
+
+         ECHANGE         =FACT(statut='f',min=1,max=1,
+           COEF_H          =SIMP(statut='f',typ=fonction ),
+           TEMP_EXT        =SIMP(statut='f',typ=fonction ),
+         ),
+
+         TORS_P1         =FACT(statut='f',min=1,max=6,
+           regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           FX              =SIMP(statut='f',typ='R' ),
+           FY              =SIMP(statut='f',typ='R' ),
+           FZ              =SIMP(statut='f',typ='R' ),
+           MX              =SIMP(statut='f',typ='R' ),
+           MY              =SIMP(statut='f',typ='R' ),
+           MZ              =SIMP(statut='f',typ='R' ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+         ),
+
+         COMP_INCR       =FACT(statut='f',min=1,max=1,
+           RELATION        =SIMP(statut='o',typ='TXM',into=("VMIS_ISOT_TRAC",) ),
+           VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut= 2,into=( 2 ,) ),
+         ),
+
+         COMP_ELAS       =FACT(statut='f',min=1,max=1,
+           RELATION        =SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC") ),
+           ELAS            =SIMP(statut='c',typ='I',defaut= 1,into=( 1 ,) ),
+           ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut= 1,into=( 1 ,) ),
+         ),
+
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R'
+                                ,defaut= 1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+           TYPE_MATR_COMP  =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+
+         NEWTON          =FACT(statut='d',min=1,max=1,
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),
+           PREDICTION      =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
+           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut=0),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+         ),
+
+         RECH_LINEAIRE   =FACT(statut='f',min=1,max=1,
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),
+         ),
+
+         INCREMENT       =FACT(statut='o',min=1,max=1,
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=listr8),
+           EVOLUTION       =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE",
+                                 into=("CHRONOLOGIQUE","RETROGRADE","SANS",) ),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+           SUBD_PAS        =SIMP(statut='f',typ='I',defaut=1),
+           SUBD_PAS_MINI   =SIMP(statut='f',typ='R'),
+           COEF_SUBD_PAS_1 =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+         ),
+
+         THETA_3D        =FACT(statut='f',min=1,max='**',
+           R_INF           =SIMP(statut='o',typ='R' ),
+           R_SUP           =SIMP(statut='o',typ='R' ),
+         ),
+
+         IMPR_TABLE      =FACT(statut='f',min=1,max=1,
+           regles=(UN_PARMI('TOUT_PARA','NOM_PARA', ),
+            PRESENT_PRESENT('TOUT_PARA','ANGLE',    ),
+                   UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL',),),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',max=4,
+                                 into=("TRESCA_MEMBRANE",
+                                       "TRESCA_MFLE",
+                                       "TRESCA",
+                                       "SI_LONG"
+                                       ) ),
+           TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           ANGLE           =SIMP(statut='f',typ='R',max='**' ),
+           R_CINTR         =SIMP(statut='f',typ='R',max='**' ),
+           POSI_CURV_LONGI =SIMP(statut='f',typ='R',max='**' ),
+           POSI_ANGUL      =SIMP(statut='f',typ='R',max='**' ),
+         ),
+
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
+                                 into=("RESULTAT","ASTER","IDEAS","CASTEM") ),
+                                 
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),  
+
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM' ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 20/12/2001   AUTEUR F1BHHAJ J.ANGLES 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE F1BHHAJ J.ANGLES
+MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op= -19,sd_prod=maillage,
+                      fr=" ",docu="U4.CF.10-a",reentrant='n',
+
+         regles=(EXCLUS('SOUS_EPAIS_COUDE','FISS_COUDE','SOUS_EPAIS_MULTI'),),
+
+         EXEC_MAILLAGE   =FACT(statut='o',min=1,max=1,
+           LOGICIEL        =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000") ),
+           UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
+           UNITE_MGIB      =SIMP(statut='f',typ='I',defaut=19),  
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10,11)),
+         ),
+
+         TYPE_ELEM       =SIMP(statut='f',typ='TXM',defaut="CU20",into=("CU20","CUB8") ),
+
+         COUDE           =FACT(statut='o',min=1,max=1,
+           ANGLE           =SIMP(statut='o',typ='R' ),  
+           R_CINTR         =SIMP(statut='o',typ='R' ),  
+           L_TUBE_P1       =SIMP(statut='o',typ='R' ),  
+           L_TUBE_P2       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           NB_ELEM_EPAIS   =SIMP(statut='f',typ='I',defaut= 3 ),  
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           TRANSFORMEE     =SIMP(statut='o',typ='TXM',defaut="COUDE",into=("COUDE","TUBE") ),
+           b_transf_coude  =BLOC(condition = "TRANSFORMEE == 'COUDE' ",
+              DEXT            =SIMP(statut='o',typ='R' ),  
+              EPAIS           =SIMP(statut='o',typ='R' ),  
+              SUR_EPAIS       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+              BOL_P2          =SIMP(statut='f',typ='TXM',into=("ASP_MPP","CUVE","GV") ),
+           ),
+           b_transf_tube   =BLOC(condition = "TRANSFORMEE == 'TUBE' ",
+              TRAN_EPAIS      =SIMP(statut='o',typ='TXM',defaut="NON",into=("OUI","NON") ),
+              b_trans_epais_oui    =BLOC(condition = "TRAN_EPAIS == 'OUI' ",
+                      regles=(ENSEMBLE('ANGL_TETA2','EPAIS_TI'),
+                              UN_PARMI('ABSC_CURV_TRAN','POSI_ANGU_TRAN'),),
+                      DEXT_T1         =SIMP(statut='o',typ='R' ),  
+                      EPAIS_T1        =SIMP(statut='o',typ='R' ),  
+                      EPAIS_T2        =SIMP(statut='o',typ='R' ),  
+                      EPAIS_TI        =SIMP(statut='f',typ='R' ),  
+                      ANGL_TETA1      =SIMP(statut='o',typ='R' ),  
+                      ANGL_TETA2      =SIMP(statut='f',typ='R' ),  
+                      ABSC_CURV_TRAN  =SIMP(statut='f',typ='R' ),  
+                      POSI_ANGU_TRAN  =SIMP(statut='f',typ='R' ),  
+              ),
+              b_trans_epais_non    =BLOC(condition = "TRAN_EPAIS == 'NON' ",
+                      DEXT            =SIMP(statut='o',typ='R' ),  
+                      EPAIS           =SIMP(statut='o',typ='R' ),  
+                      SUR_EPAIS       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+                      BOL_P2          =SIMP(statut='f',typ='TXM',into=("ASP_MPP","CUVE","GV") ),
+              ),
+           ),
+         ),
+
+         SOUS_EPAIS_COUDE=FACT(statut='f',min=1,max=1,
+           regles=(UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL'),
+                   UN_PARMI('POSI_CURV_CIRC','AZIMUT'),),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("AXIS","ELLI") ),
+           AXE_CIRC        =SIMP(statut='f',typ='R' ),  
+           AXE_LONGI       =SIMP(statut='o',typ='R' ),  
+           PROFONDEUR      =SIMP(statut='o',typ='R' ),  
+           POSI_CURV_LONGI =SIMP(statut='f',typ='R' ),  
+           POSI_ANGUL      =SIMP(statut='f',typ='R' ),  
+           POSI_CURV_CIRC  =SIMP(statut='f',typ='R' ),  
+           AZIMUT          =SIMP(statut='f',typ='R' ),  
+           SOUS_EPAIS      =SIMP(statut='o',typ='TXM',into=("INTERNE","EXTERNE") ),
+           NB_ELEM_LONGI   =SIMP(statut='o',typ='I' ),  
+           NB_ELEM_CIRC    =SIMP(statut='o',typ='I' ),  
+           NB_ELEM_RADI    =SIMP(statut='f',typ='I',defaut= 3 ),  
+           EMPREINTE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+
+         SOUS_EPAIS_MULTI=FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL'),
+                   UN_PARMI('POSI_CURV_CIRC','AZIMUT'),),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("AXIS","ELLI") ),
+           AXE_CIRC        =SIMP(statut='f',typ='R' ),  
+           AXE_LONGI       =SIMP(statut='o',typ='R' ),  
+           PROFONDEUR      =SIMP(statut='o',typ='R' ),  
+           POSI_CURV_LONGI =SIMP(statut='f',typ='R' ),  
+           POSI_ANGUL      =SIMP(statut='f',typ='R' ),  
+           POSI_CURV_CIRC  =SIMP(statut='f',typ='R' ),  
+           AZIMUT          =SIMP(statut='f',typ='R' ),  
+           SOUS_EPAIS      =SIMP(statut='o',typ='TXM',into=("INTERNE","EXTERNE") ),
+           NB_ELEM_LONGI   =SIMP(statut='o',typ='I' ),  
+           NB_ELEM_CIRC    =SIMP(statut='o',typ='I' ),  
+           EMPREINTE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+
+         FISS_COUDE      =FACT(statut='f',min=1,max=1,
+           regles=(UN_PARMI('ABSC_CURV','POSI_ANGUL'),),
+           AXIS            =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),  
+           PROFONDEUR      =SIMP(statut='o',typ='R' ),  
+           LONGUEUR        =SIMP(statut='o',typ='R' ),  
+           ABSC_CURV       =SIMP(statut='f',typ='R' ),  
+           POSI_ANGUL      =SIMP(statut='f',typ='R' ),  
+           FISSURE         =SIMP(statut='o',typ='TXM',into=("DEB_INT","DEB_EXT") ),
+           AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),  
+           ORIEN           =SIMP(statut='o',typ='R',
+                                 into=(45.,-45.,90.,0.E+0) ),
+           NB_TRANCHE      =SIMP(statut='o',typ='I' ),  
+           NB_SECTEUR      =SIMP(statut='o',typ='I' ),  
+           NB_COURONNE     =SIMP(statut='o',typ='I' ),  
+           RAYON_TORE      =SIMP(statut='f',typ='R' ),  
+           COEF_MULT_RC2   =SIMP(statut='f',typ='R',defaut= 1. ),  
+           COEF_MULT_RC3   =SIMP(statut='f',typ='R' ),  
+           ANGL_OUVERTURE  =SIMP(statut='f',typ='R',defaut= 0.5 ),  
+         ),
+
+         IMPRESSION      =FACT(statut='f',min=1,max='**',
+           regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",   
+                                 into=("ASTER","IDEAS","CASTEM") ),
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),  
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+           FICHIER         =SIMP(statut='f',typ='TXM' ),  
+           UNITE           =SIMP(statut='f',typ='I' ),  
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 20/12/2001   AUTEUR F1BHHAJ J.ANGLES 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE F1BHHAJ J.ANGLES
+def macr_aspic_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS_1,FOND_FISS_2,CHARGE,RESU_THER,**args):
+  if MODELE      != None:self.type_sdprod(MODELE,modele)
+  if CHAM_MATER  != None:self.type_sdprod(CHAM_MATER,cham_mater)
+  if CARA_ELEM   != None:self.type_sdprod(CARA_ELEM,cara_elem)
+  if FOND_FISS_1 != None:self.type_sdprod(FOND_FISS_1,fond_fiss)
+  if FOND_FISS_2 != None:self.type_sdprod(FOND_FISS_2,fond_fiss)
+  if CHARGE      != None:self.type_sdprod(CHARGE,char_meca)
+  if RESU_THER   != None:self.type_sdprod(RESU_THER,evol_ther)
+  return evol_noli
+
+MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
+                    fr=" ",docu="U4.PC.20-a1",reentrant='n',
+         regles=(UN_PARMI('COMP_INCR','COMP_ELAS'),),
+
+         TYPE_MAILLAGE   =SIMP(statut='o',typ='TXM',
+                               into=("SAIN_FIN","SAIN_GROS","FISS_COUR_DEB","FISS_COUR_NONDEB","FISS_LONG_DEB",
+                                     "FISS_LONG_NONDEB","FISS_AXIS_DEB","FISS_AXIS_NONDEB") ),
+
+         TUBULURE        =FACT(statut='o',min=1,max=1,
+           TYPE            =SIMP(statut='o',typ='TXM',into=("TYPE_1","TYPE_2") ),
+         ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         MODELE          =SIMP(statut='f',typ=(CO,modele)),
+         CHAM_MATER      =SIMP(statut='f',typ=(CO,cham_mater)),
+         CARA_ELEM       =SIMP(statut='f',typ=(CO,cara_elem)),
+         FOND_FISS_1     =SIMP(statut='f',typ=(CO,fond_fiss)),
+         FOND_FISS_2     =SIMP(statut='f',typ=(CO,fond_fiss)),
+         CHARGE          =SIMP(statut='f',typ=(CO,char_meca)),
+         RESU_THER       =SIMP(statut='f',typ=(CO,evol_ther)),
+
+         AFFE_MATERIAU   =FACT(statut='o',min=1,max=3,
+           regles=(UN_PARMI('TOUT','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           GROUP_MA        =SIMP(statut='f',typ='TXM',into=("TUBU","CORP","SOUD","SOUDCORP","SOUDTUBU") ),
+           MATER           =SIMP(statut='o',typ=mater),
+           TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           RCCM            =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
+         ),
+
+         EQUILIBRE       =FACT(statut='o',min=1,max=1,
+           NOEUD           =SIMP(statut='o',typ=no),
+         ),
+
+         PRES_REP        =FACT(statut='o',min=1,max=1,
+           PRES            =SIMP(statut='o',typ='R'),
+           NOEUD           =SIMP(statut='f',typ=no),
+           EFFE_FOND       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+
+         ECHANGE         =FACT(statut='f',min=1,max=1,
+           COEF_H_TUBU     =SIMP(statut='o',typ=fonction),
+           COEF_H_CORP     =SIMP(statut='o',typ=fonction),
+           TEMP_EXT        =SIMP(statut='o',typ=fonction),
+         ),
+
+         TORS_CORP       =FACT(statut='f',min=1,max=6,
+           regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           NOEUD           =SIMP(statut='o',typ=no),
+           FX              =SIMP(statut='f',typ='R'),
+           FY              =SIMP(statut='f',typ='R'),
+           FZ              =SIMP(statut='f',typ='R'),
+           MX              =SIMP(statut='f',typ='R'),
+           MY              =SIMP(statut='f',typ='R'),
+           MZ              =SIMP(statut='f',typ='R'),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+
+         TORS_TUBU       =FACT(statut='f',min=1,max=6,
+           regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           FX              =SIMP(statut='f',typ='R'),
+           FY              =SIMP(statut='f',typ='R'),
+           FZ              =SIMP(statut='f',typ='R'),
+           MX              =SIMP(statut='f',typ='R'),
+           MY              =SIMP(statut='f',typ='R'),
+           MZ              =SIMP(statut='f',typ='R'),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+
+         COMP_INCR       =FACT(statut='f',min=1,max=1,
+           RELATION        =SIMP(statut='o',typ='TXM',into=("VMIS_ISOT_TRAC",) ),
+           VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut= 2,into=( 2 ,) ),
+         ),
+
+         COMP_ELAS       =FACT(statut='f',min=1,max=1,
+           RELATION        =SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC") ),
+           ELAS            =SIMP(statut='c',typ='I',defaut= 1,into=( 1 ,) ),
+           ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut= 1,into=( 1 ,) ),
+         ),
+
+         THETA_3D        =FACT(statut='f',min=1,max='**',
+           R_INF           =SIMP(statut='o',typ='R'),
+           R_SUP           =SIMP(statut='o',typ='R'),
+         ),
+
+         OPTION          =SIMP(statut='f',typ='TXM',into=("CALC_G_MAX","CALC_G_MAX_LOCAL") ),
+         BORNES          =FACT(statut='f',min=1,max='**',
+           NUME_ORDRE      =SIMP(statut='o',typ='I'),
+           VALE_MIN        =SIMP(statut='o',typ='R'),
+           VALE_MAX        =SIMP(statut='o',typ='R'),
+         ),
+
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non iversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut=1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut=10),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut=0),
+           TYPE_MATR_COMP  =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+
+         NEWTON          =FACT(statut='d',min=1,max=1,
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut=1),
+           PREDICTION      =SIMP(statut='f',typ='TXM',into=("TANGENTE","ELASTIQUE","EXTRAPOL","DEPL_CALCULE")),
+           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE")),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0),
+         ),
+
+         RECH_LINEAIRE   =FACT(statut='d',min=1,max=1,
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut=1.0E-3),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut=3),
+         ),
+
+         INCREMENT       =FACT(statut='o',min=1,max=1,
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=listr8),
+           EVOLUTION       =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE",
+                                 into=("CHRONOLOGIQUE","RETROGRADE","SANS",) ),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+           SUBD_PAS        =SIMP(statut='f',typ='I',defaut=1),
+           SUBD_PAS_MINI   =SIMP(statut='f',typ='R'),
+           COEF_SUBD_PAS_1 =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+         ),
+
+         PAS_AZIMUT      =SIMP(statut='f',typ='I',defaut=1),
+
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
+                                 into=("RESULTAT","ASTER","CASTEM","IDEAS")),
+                                 
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),  
+
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+
+           b_extrac        =BLOC(condition="((FORMAT=='IDEAS')or(FORMAT=='CASTEM'))",
+                                 fr="extraction d un champ de grandeur",
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST'),),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',max=3,
+                                   into=("DEPL","EQUI_ELNO_SIGM","TEMP")),
+             
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+             INST            =SIMP(statut='f',typ='R',max='**'),
+           ),      
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+
+         TITRE           =SIMP(statut='f',typ='TXM'),
+)  ;
+# debut entete
+#& MODIF COMMANDE  DATE 20/12/2001   AUTEUR F1BHHAJ J.ANGLES 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE F1BHHAJ J.ANGLES
+MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= -16,sd_prod=maillage,reentrant='n',
+                    fr=" ",docu="U4.PC.10-a",
+
+         EXEC_MAILLAGE   =FACT(statut='o',min=1,max=1,
+           LOGICIEL        =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000")),
+           UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
+           UNITE_MGIB      =SIMP(statut='f',typ='I',defaut=19),  
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10,11)),
+         ),
+
+         TYPE_ELEM       =SIMP(statut='f',typ='TXM',defaut="CU20",into=("CU20","CUB8")),
+
+         RAFF_MAIL       =SIMP(statut='f',typ='TXM',defaut="GROS",into=("GROS","FIN")),
+
+         TUBULURE        =FACT(statut='o',min=1,max=1,
+           E_BASE          =SIMP(statut='o',typ='R'),  
+           DEXT_BASE       =SIMP(statut='o',typ='R'),  
+           L_BASE          =SIMP(statut='o',typ='R'),  
+           L_CHANF         =SIMP(statut='o',typ='R'),  
+           E_TUBU          =SIMP(statut='o',typ='R'),  
+           DEXT_TUBU       =SIMP(statut='o',typ='R'),  
+           Z_MAX           =SIMP(statut='o',typ='R'),  
+           TYPE            =SIMP(statut='o',typ='TXM',into=("TYPE_1","TYPE_2")),
+           L_PENETR        =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+         ),
+
+         SOUDURE         =FACT(statut='o',min=1,max=1,
+           H_SOUD          =SIMP(statut='o',typ='R'),  
+           ANGL_SOUD       =SIMP(statut='o',typ='R'),  
+           JEU_SOUD        =SIMP(statut='o',typ='R'),  
+         ),
+
+         CORPS           =FACT(statut='o',min=1,max=1,
+           E_CORP          =SIMP(statut='o',typ='R'),  
+           DEXT_CORP       =SIMP(statut='o',typ='R'),  
+           X_MAX           =SIMP(statut='o',typ='R'),  
+         ),
+
+         FISS_SOUDURE    =FACT(statut='f',min=1,max=1,
+           TYPE            =SIMP(statut='o',typ='TXM',into=("LONGUE","COURTE")),
+           AXIS            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           PROFONDEUR      =SIMP(statut='o',typ='R'),  
+           LONGUEUR        =SIMP(statut='f',typ='R'),  
+           AZIMUT          =SIMP(statut='o',typ='R'),  
+           RAYON_TORE      =SIMP(statut='f',typ='R'),  
+           POSITION        =SIMP(statut='o',typ='TXM',into=("DROIT","INCLINE")),
+           FISSURE         =SIMP(statut='o',typ='TXM',into=("DEB_INT","DEB_EXT","NON_DEB","TRAVERS")),
+           LIGA_INT        =SIMP(statut='f',typ='R'),  
+           ANGL_OUVERTURE  =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+           COEF_MULT_RC1   =SIMP(statut='f',typ='R'),  
+           COEF_MULT_RC2   =SIMP(statut='f',typ='R'),  
+           COEF_MULT_RC3   =SIMP(statut='f',typ='R'),  
+           NB_TRANCHE      =SIMP(statut='f',typ='I'),  
+           NB_SECTEUR      =SIMP(statut='f',typ='I'),  
+           NB_COURONNE     =SIMP(statut='f',typ='I'),  
+         ),
+
+         IMPRESSION      =FACT(statut='f',min=1,max='**',
+           regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","IDEAS","CASTEM")),
+
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),  
+
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+           FICHIER         =SIMP(statut='f',typ='TXM'),  
+           UNITE           =SIMP(statut='f',typ='I'),  
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 19/12/2001   AUTEUR CIBHHPD D.NUNEZ 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op=  81,sd_prod=macr_elem_dyna,
+                    fr="Définition d un macro élément pour analyse modale ou harmonique par sous structuration dynamique",
+                    docu="U4.65.01-d",reentrant='n',
+         regles=(EXCLUS('MATR_AMOR','AMOR_REDUIT' ),),
+         BASE_MODALE     =SIMP(statut='o',typ=base_modale ),
+         MATR_RIGI       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),         
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","RITZ",
+                          "DIAG_MASS") ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,docu="U4.62.01-e",reentrant='f',
+                    fr="Définition d un macro-élément pour l analyse statique par sous structuration",
+        regles=(AU_MOINS_UN('DEFINITION','RIGI_MECA','MASS_MECA','CAS_CHARGE'),
+                ENSEMBLE('DEFINITION','EXTERIEUR'),),
+         DEFINITION      =FACT(statut='f',min=1,max=1,
+           MODELE          =SIMP(statut='o',typ=modele),
+           CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+           CHAR_MACR_ELEM  =SIMP(statut='f',typ=char_meca),
+           INST            =SIMP(statut='f',typ='R',defaut=0.0E+0 ),
+           NMAX_CAS        =SIMP(statut='f',typ='I',defaut=10),
+           NMAX_CHAR       =SIMP(statut='f',typ='I',defaut=10),
+         ),
+         EXTERIEUR       =FACT(statut='f',min=1,max=1,
+           regles=(AU_MOINS_UN('NOEUD','GROUP_NO'),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         ),
+         RIGI_MECA       =FACT(statut='f',min=1,max=1,
+         ),
+         MASS_MECA       =FACT(statut='f',min=1,max=1,
+           BIDO1           =SIMP(statut='f',typ='I',defaut=0),
+         ),
+         CAS_CHARGE      =FACT(statut='f',min=1,max='**',
+           NOM_CAS         =SIMP(statut='o',typ='TXM'),
+           SUIV            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
+           INST            =SIMP(statut='f',typ='R',defaut=0.E+0),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MACR_GOUJ2E_CALC=MACRO(nom="MACR_GOUJ2E_CALC",op=-23,sd_prod=evol_noli,
+                      fr=" ",docu="U4.GJ.20-a",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         DEFI_GOUJ       =FACT(statut='o',min=01,max=01,
+           TYPE            =SIMP(statut='o',typ='TXM',into=("M33","M64","M90","M115","M155","M180","M186")),
+           VARIANTE        =SIMP(statut='o',typ='TXM',into=("A","B","C","D","E","F","G","H","I","J","K","L","M",  
+                                                            "N","O","P","Q","R","S","T","U","V","W","X","Y","Z")),
+           FILET_TRONQUE   =SIMP(statut='f',typ='I',max='**'),  
+           FILET_TRONQA    =SIMP(statut='f',typ='I',max='**'),  
+           FILET_TRONQB    =SIMP(statut='f',typ='I',max='**'),  
+           FILET_JEU_HT    =SIMP(statut='f',typ='I',max='**'),  
+           FILET_JEU_HTA   =SIMP(statut='f',typ='I',max='**'),  
+           FILET_JEU_HTB   =SIMP(statut='f',typ='I',max='**'),  
+         ),
+         EXCIT           =FACT(statut='o',min=01,max=01,
+           TYPE_BLOCAGE    =SIMP(statut='o',typ='I',defaut=2,into=(1,2,3)),
+           FORCE_GOUJ      =SIMP(statut='o',typ='R'),  
+         ),
+         CALCUL          =FACT(statut='o',min=01,max=01,
+           TYPE_CALCUL     =SIMP(statut='o',typ='TXM',into=("ELASTIQUE","ELASTOPLASTIQUE")),
+           NB_INCR         =SIMP(statut='o',typ='I'),  
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max=01,
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="TABLE",    
+                                 into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED","TABLE")),
+           VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM'),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1 ,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MACR_GOUJ2E_MAIL=MACRO(nom="MACR_GOUJ2E_MAIL",op= -22,sd_prod=maillage,
+                      fr=" ",docu="U4.GJ.10-a",reentrant='n',
+         EXEC_MAILLAGE   =FACT(statut='o',min=1,max=1,
+           LOGICIEL        =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000") ),
+           UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
+           UNITE_MGIB      =SIMP(statut='f',typ='I',defaut=19),  
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10)),
+         ),
+         DEFI_GOUJ       =FACT(statut='o',min=1,max=1,
+           TYPE            =SIMP(statut='o',typ='TXM',into=("M33","M64","M90","M115","M155","M180","M186")),
+           VARIANTE        =SIMP(statut='o',typ='TXM',into=("A","B","C","D","E","F","G","H","I","J","K","L","M",  
+                                                            "N","O","P","Q","R","S","T","U","V","W","X","Y","Z")), 
+         ),
+         GEOM_GOUJ_BRID  =FACT(statut='o',min=1,max=1,
+           NB_FILET        =SIMP(statut='o',typ='I'),  
+           H_CORP_BRID     =SIMP(statut='o',typ='R'),  
+           R_EXT_BRID      =SIMP(statut='o',typ='R'),  
+           H_HAUT_BRID     =SIMP(statut='f',typ='R',defaut=0.0E+0),  
+           H_BAS_BRID      =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+           FILET_ABST      =SIMP(statut='f',typ='I',max='**'),  
+         ),
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
+           regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",    
+                                 into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED")),
+           FICHIER         =SIMP(statut='f',typ='TXM'),  
+           UNITE           =SIMP(statut='f',typ='I'),  
+           VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 25/01/2002   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=-24,docu="U7.03.02-a",
+                     fr="Donner des informations sur un maillage.",
+                     ang="To give information about a mesh.",
+#
+# 1. Le niveau d'information
+#
+         INFO           = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+#
+# 2. Version de HOMARD
+#
+         VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V5_1",
+                               into=("V5_1", "V5_N","V5_N_PERSO"),
+                           fr="Version de HOMARD",
+                           ang="HOMARD release"),
+#
+# 3. Langue des messages issus de HOMARD
+#
+         LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
+                               into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
+                           fr="Langue des messages issus de HOMARD.",
+                           ang="Language for HOMARD messages." ),
+#
+# 4. Le nom du maillage a analyser
+#
+         MAILLAGE       = SIMP(statut='o',typ=maillage,
+                           fr="Maillage à analyser.",
+                           ang="Mesh to be checked." ),
+#
+# 5. Les options ; par defaut, on ne fait que les nombres
+# 5.1. Nombre de noeuds et elements
+#
+         NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                          fr="Nombre de noeuds et éléments du maillage",
+                          ang="Number of nodes and elements in the mesh" ),
+#
+# 5.2. Determination de la qualite des elements du maillage
+#
+         QUALITE        = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Qualité du maillage",
+                          ang="Mesh quality" ),
+#
+# 5.3. Connexite du maillage
+#
+         CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Connexité du maillage.",
+                          ang="Mesh connexity." ),
+#
+# 5.4. Taille des sous-domaines du maillage
+#
+         TAILLE         = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Tailles des sous-domaines du maillage.",
+                          ang="Sizes of mesh sub-domains." ),
+#
+# 5.5. Controle de la non-interpenetration des elements
+#
+         INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Controle de la non interpénétration des éléments.",
+                          ang="Overlapping checking." ),
+#
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+MACRO_CARA_POUTRE=MACRO(nom="MACRO_CARA_POUTRE",op=-11,sd_prod=tabl_cara_geom,
+                       docu="U4.42.02-c",reentrant='n',
+                       fr="caractéristiques d'une section transversale de poutre à partir d'un maillage 2D",
+         regles=(EXCLUS('SYME_X','GROUP_MA_BORD'),
+                 EXCLUS('SYME_Y','GROUP_MA_BORD'),
+                 ENSEMBLE('LONGUEUR','LIAISON','MATERIAU') ,),
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut= 20 ),  
+         SYME_X          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         SYME_Y          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         GROUP_MA_BORD   =SIMP(statut='f',typ=grma,max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ORIG_INER       =SIMP(statut='f',typ='R',max='**'),  
+         NOEUD           =SIMP(statut='f',typ=no,max='**'),
+         GROUP_MA_INTE   =SIMP(statut='f',typ=grma,max='**'),
+         LONGUEUR        =SIMP(statut='f',typ='R'),  
+         MATERIAU        =SIMP(statut='f',typ=mater),
+         LIAISON         =SIMP(statut='f',typ='TXM',into=("ROTULE","ENCASTREMENT")),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MACRO_CHAR_F_U=MACRO(nom="MACRO_CHAR_F_U",op=-15,sd_prod=char_meca,
+                    fr=" ",docu="U4.72.07-a",reentrant='n',
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CHARGE          =SIMP(statut='o',typ=char_meca),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         COEF_IMPO       =SIMP(statut='f',typ='R',defaut=1.0E+0),  
+         NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="APRES",into=("NORMAL","APRES")),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+def macro_elas_mult_prod(self,NUME_DDL,CAS_CHARGE,**args ):
+  self.type_sdprod(NUME_DDL,nume_ddl)
+  if CAS_CHARGE[0]['NOM_CAS']      != None : return mult_elas
+  if CAS_CHARGE[0]['MODE_FOURIER'] != None : return fourier_elas
+  raise AsException("type de concept resultat non prevu")
+
+MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=-10,sd_prod=macro_elas_mult_prod,docu="U4.51.02-c1",reentrant='f',
+         regles=(UN_PARMI('CHAR_MECA_GLOBAL','CHAR_CINE_GLOBAL','LIAISON_DISCRET', ),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         NUME_DDL        =SIMP(statut='f',typ=(CO,nume_ddl)),# CO()
+         CHAR_MECA_GLOBAL=SIMP(statut='f',typ=char_meca,max='**'),
+         CHAR_CINE_GLOBAL=SIMP(statut='f',typ=char_meca,max='**'),
+         LIAISON_DISCRET =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         CAS_CHARGE      =FACT(statut='o',min=1,max='**',
+           regles=(UN_PARMI('NOM_CAS','MODE_FOURIER'),
+                   UN_PARMI('CHAR_MECA','CHAR_CINE','VECT_ASSE'),),
+           NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+           MODE_FOURIER    =SIMP(statut='f',typ='I' ),
+           TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
+           CHAR_MECA       =SIMP(statut='f',typ=char_meca,max='**'),
+           CHAR_CINE       =SIMP(statut='f',typ=char_meca,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',max='**',
+                                 into=("EFGE_ELNO_DEPL","EPOT_ELEM_DEPL","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
+                                       "SIGM_ELNO_CART","EFGE_ELNO_CART","DEGE_ELNO_DEPL","EPSI_ELNO_DEPL",
+                                       "EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL","EPSP_ELNO","EPSP_ELGA",
+                                       "ECIN_ELEM_DEPL","FLUX_ELGA_TEMP","FLUX_ELNO_TEMP","SOUR_ELGA_ELEC",
+                                       "PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG","INTE_ELNO_ACTI",
+                                       "INTE_ELNO_REAC","SIGM_NOZ1_ELGA","ERRE_ELEM_NOZ1","SIGM_NOZ2_ELGA",
+                                       "ERRE_ELEM_NOZ2","VNOR_ELEM_DEPL","ERRE_ELNO_ELGA","SIRE_ELNO_DEPL",
+                                       "ERRE_ELGA_NORE","EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","EQUI_ELNO_EPSI",
+                                       "EQUI_ELGA_EPSI","FORC_NODA","REAC_NODA","EPSI_NOEU_DEPL","SIGM_NOEU_DEPL",
+                                       "EFGE_NOEU_DEPL","EQUI_NOEU_SIGM","EQUI_NOEU_EPSI","FLUX_NOEU_TEMP") ),
+           NUME_COUCHE     =SIMP(statut='f',typ='I',defaut=1),
+           NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY")),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r),
+         ),
+#
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT") ),
+           b_mult_front    = BLOC ( condition = "METHODE == 'MULT_FRONT' ",
+                                    fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+            ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MACRO_MADMACS=MACRO(nom="MACRO_MADMACS",op=-9,docu="U7.03.21-c",
+                    fr="Impression au format IDEAS des données pour chainage entre Code_Aster et MADMACS",
+         regles=(UN_PARMI('MATR_ELEM_RIGI','MATR_RIGI'),
+                 UN_PARMI('MATR_ELEM_MASS','MATR_MASS'),
+                 PRESENT_ABSENT('MATR_ELEM_AMOR','MATR_AMOR'),),
+         FICHIER         =SIMP(statut='f',typ='TXM' ),  
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",)),
+         VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(5,)),
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl),
+         CHARGE          =SIMP(statut='o',typ=char_meca,max='**'),
+         MATR_ELEM_RIGI  =SIMP(statut='f',typ=matr_elem_depl_r),
+         MATR_RIGI       =SIMP(statut='f',typ=matr_asse_depl_r),
+         MATR_ELEM_MASS  =SIMP(statut='f',typ=matr_elem_depl_r),
+         MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r),
+         MATR_ELEM_AMOR  =SIMP(statut='f',typ=matr_elem_depl_r),
+         MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r),
+         MODE_MECA       =SIMP(statut='o',typ=mode_meca),
+         NMAX_MODE       =SIMP(statut='f',typ='I',defaut=10),  
+         INTERFACE       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO'),
+                   UN_PARMI('DDL_ACTIF','MASQUE'),),
+           NOM             =SIMP(statut='o',typ='TXM'),  
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           DDL_ACTIF       =SIMP(statut='f',typ='TXM',max='**'),  
+           MASQUE          =SIMP(statut='f',typ='TXM',max='**'),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def macro_matr_ajou_prod(self,MATR_AMOR_AJOU,MATR_MASS_AJOU,MATR_RIGI_AJOU,FORC_AJOU,**args):
+  self.type_sdprod(MATR_AMOR_AJOU,matr_asse_depl_r)
+  self.type_sdprod(MATR_MASS_AJOU,matr_asse_depl_r)
+  self.type_sdprod(MATR_RIGI_AJOU,matr_asse_depl_r)
+  if FORC_AJOU != None:
+    for m in FORC_AJOU:
+      self.type_sdprod(m['VECTEUR'],vect_asse_gene)
+
+  return None
+
+MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=-13,docu="U4.66.11-b",sd_prod=macro_matr_ajou_prod,
+      regles=(AU_MOINS_UN('MODE_MECA','DEPL_IMPO','MODELE_GENE'),
+              AU_MOINS_UN('MATR_MASS_AJOU','MATR_AMOR_AJOU','MATR_RIGI_AJOU'),
+              EXCLUS('MODE_MECA','DEPL_IMPO','MODELE_GENE'),
+              EXCLUS('MONO_APPUI','MODE_STAT',),
+             ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage),
+         GROUP_MA_FLUIDE =SIMP(statut='o',typ=grma),
+         GROUP_MA_INTERF =SIMP(statut='o',typ=grma),
+         MODELISATION    =SIMP(statut='o',typ='TXM',into=("PLAN","AXIS","3D")),
+         FLUIDE          =FACT(statut='o',min=1,max='**',
+           RHO             =SIMP(statut='o',typ='R'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           MAILLE          =SIMP(statut='f',typ=ma),
+         ),
+         DDL_IMPO        =FACT(statut='o',min=1,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO'),
+                   UN_PARMI('PRES_FLUIDE','PRES_SORTIE'),),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+           PRES_FLUIDE     =SIMP(statut='f',typ='R'),
+           PRES_SORTIE     =SIMP(statut='f',typ='R'),
+         ),
+         ECOULEMENT      =FACT(statut='f',min=1,max='**',
+           GROUP_MA_1      =SIMP(statut='o',typ=grma),
+           GROUP_MA_2      =SIMP(statut='o',typ=grma),
+           VNOR_1          =SIMP(statut='o',typ='R'),
+           VNOR_2          =SIMP(statut='f',typ='R'),
+           POTENTIEL       =SIMP(statut='f',typ=evol_ther),
+         ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca),
+         DEPL_IMPO       =SIMP(statut='f',typ=cham_no_depl_r),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene),
+         NUME_DDL_GENE   =SIMP(statut='f',typ=nume_ddl_gene),
+         DIST_REFE       =SIMP(statut='f',typ='R',defaut= 1.0E-2),
+         MATR_MASS_AJOU  =SIMP(statut='f',typ=(CO,matr_asse)),
+         MATR_RIGI_AJOU  =SIMP(statut='f',typ=(CO,matr_asse)),
+         MATR_AMOR_AJOU  =SIMP(statut='f',typ=(CO,matr_asse)),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",),),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,),),
+         FORC_AJOU       =FACT(statut='f',min=1,max='**',
+           DIRECTION     =SIMP(statut='o',typ='R',max=3),
+           NOEUD         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO      =SIMP(statut='f',typ=grno,max='**'),
+           VECTEUR       =SIMP(statut='o',typ=(CO,vect_asse_gene)),
+         ),
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non iversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+) ;
+#& MODIF COMMANDE  DATE 23/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+#% RESPONSABLE VABHHTS J.PELLET
+
+def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
+                        SOLVEUR,NUME_DDL,CHARGE,INST,**args):
+  """
+     Ecriture de la macro MACRO_MATR_ASSE
+  """
+  ier=0
+  # On met le mot cle NUME_DDL dans une variable locale pour le proteger
+  numeddl=NUME_DDL
+  # On importe les definitions des commandes a utiliser dans la macro
+  # Le nom de la variable doit etre obligatoirement le nom de la commande
+  CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM')
+  NUME_DDL      =self.get_cmd('NUME_DDL')
+  ASSE_MATRICE  =self.get_cmd('ASSE_MATRICE')
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.icmd=1
+
+  if SOLVEUR:
+    methode=SOLVEUR['METHODE']
+    if methode=='LDLT':
+      if SOLVEUR['RENUM']:
+         renum=SOLVEUR['RENUM']
+      else:
+         renum='RCMK'
+      if renum not in ('SANS','RCMK'):
+        ier=ier+1
+        self.cr.fatal("Avec methode LDLT, RENUM doit etre SANS ou RCMK.")
+        return ier
+    elif methode=='MULT_FRONT':
+      if SOLVEUR['RENUM']:
+         renum=SOLVEUR['RENUM']
+      else:
+         renum='MDA'
+      if renum not in ('MDA','MD','METIS'):
+        ier=ier+1
+        self.cr.fatal("Avec methode MULT_FRONT, RENUM doit etre MDA, MD ou RCMK.")
+        return ier
+    elif methode=='GCPC':
+      if SOLVEUR['RENUM']:
+         renum=SOLVEUR['RENUM']
+      else:
+         renum='SANS'
+      if renum not in ('SANS','RCMK'):
+        ier=ier+1
+        self.cr.fatal("Avec methode GCPC, RENUM doit etre SANS ou RCMK.")
+        return ier
+  else:
+    methode='MULT_FRONT'
+    renum  ='MDA'
+
+  if numeddl in self.sdprods:
+    # Si le concept numeddl est dans self.sdprods
+    # il doit etre  produit par la macro
+    # il faudra donc appeler la commande NUME_DDL
+    lnume = 1
+  else:
+    lnume = 0
+  lrigel = 0
+  lmasel = 0
+
+  iocc=0
+  for m in MATR_ASSE:
+    iocc=iocc+1
+    option=m['OPTION']
+    if iocc == 1 and lnume == 1 and option not in ('RIGI_MECA','RIGI_MECA_LAGR',
+                                                   'RIGI_THER','RIGI_ACOU')      :
+      ier=ier+1
+      self.cr.fatal("LA PREMIERE OPTION DOIT ETRE RIGI_MECA OU RIGI_THER OU RIGI_ACOU OU RIGI_MECA_LAGR")
+      return ier
+
+    if m['SIEF_ELGA']!=None and option!='RIGI_GEOM':
+      ier=ier+1
+      self.cr.fatal("SIEF_ELGA N EST ADMIS QU AVEC L OPTION RIGI_GEOM")
+      return ier
+
+    if m['MODE_FOURIER']!=None and option not in ('RIGI_MECA','RIGI_FLUI_STRU','RIGI_THER'):
+      ier=ier+1
+      self.cr.fatal("MODE_FOURIER N EST ADMIS QU AVEC UNE DES OPTIONS RIGI_MECA RIGI_FLUI_STRU RIGI_THER")
+      return ier
+
+    if (m['THETA']!=None or m['PROPAGATION']!=None) and option!='RIGI_MECA_LAGR':
+      ier=ier+1
+      self.cr.fatal("PROPAGATION ET,OU THETA NE SONT ADMIS QU AVEC L OPTION RIGI_MECA_LAGR")
+      return ier
+
+    motscles={'OPTION':option}
+    if option == 'AMOR_MECA':
+       if (not lrigel or not lmasel):
+          ier=ier+1
+          self.cr.fatal("""POUR CALCULER AMOR_MECA, IL FAUT AVOIR CALCULE
+                           RIGI_MECA ET MASS_MECA AUPARAVANT (DANS LE MEME APPEL)""")
+          return ier
+       if CHAM_MATER != None:
+          motscles['RIGI_MECA']   =rigel
+          motscles['MASS_MECA']   =masel
+    if CHARGE     != None:
+       if option[0:9] not in ('MASS_THER','RIGI_GEOM','MASS_ID_M'):
+                           motscles['CHARGE']      =CHARGE
+    if CHAM_MATER != None: motscles['CHAM_MATER']  =CHAM_MATER
+    if CARA_ELEM  != None: motscles['CARA_ELEM']   =CARA_ELEM
+    if INST       != None: motscles['INST']        =INST
+    if m['SIEF_ELGA']   :  motscles['SIEF_ELGA']   =m['SIEF_ELGA']
+    if m['MODE_FOURIER']:  motscles['MODE_FOURIER']=m['MODE_FOURIER']
+    if m['THETA']       :  motscles['THETA']       =m['THETA']
+    if m['PROPAGATION'] :  motscles['PROPAGATION'] =m['PROPAGATION']
+
+    __a=CALC_MATR_ELEM(MODELE=MODELE,**motscles)
+
+    if option == 'RIGI_MECA':
+      rigel  = __a
+      lrigel = 1
+    if option == 'MASS_MECA':
+      masel  = __a
+      lmasel = 1
+
+    if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'):
+      self.DeclareOut('num',numeddl)
+      # On peut passer des mots cles egaux a None. Ils sont ignores
+      num=NUME_DDL(MATR_RIGI=__a,METHODE=methode,RENUM=renum)
+    else:
+      num=numeddl
+
+    self.DeclareOut('mm',m['MATRICE'])
+    mm=ASSE_MATRICE(MATR_ELEM=__a,NUME_DDL=num)
+  return ier
+
+
+def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args):
+  if not MATR_ASSE:  raise AsException("Impossible de typer les concepts resultats")
+  if not NUME_DDL:  raise AsException("Impossible de typer les concepts resultats")
+  self.type_sdprod(NUME_DDL,nume_ddl)
+  for m in MATR_ASSE:
+    opti=m['OPTION']
+
+    if opti in ( "RIGI_MECA","RIGI_FLUI_STRU","RIGI_MECA_LAGR" ,
+       "MASS_MECA" , "MASS_FLUI_STRU" ,"RIGI_GEOM" ,"RIGI_ROTA",
+       "AMOR_MECA","IMPE_MECA","MASS_ID_MDEP_R","MASS_ID_MDNS_R",
+       "ONDE_FLUI","MASS_MECA_DIAG" ) : t=matr_asse_depl_r
+
+    if opti in ( "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",) : t=matr_asse_pres_c
+
+    if opti in ( "RIGI_THER","MASS_THER","RIGI_THER_CONV" ,
+       "RIGI_THER_CONV_D","MASS_ID_MTEM_R","MASS_ID_MTNS_R",) : t=matr_asse_temp_r
+
+    if opti == "RIGI_MECA_HYST"   : t= matr_asse_depl_c
+
+    self.type_sdprod(m['MATRICE'],t)
+  return None
+
+MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,docu="U4.61.21-c",
+                      sd_prod=macro_matr_asse_prod,
+                      fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ",
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou)),
+         INST            =SIMP(statut='f',typ='R'),
+         NUME_DDL        =SIMP(statut='o',typ=(nume_ddl,CO)),
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",
+                                 into=("LDLT","MULT_FRONT","GCPC")),
+           RENUM           =SIMP(statut='f',typ='TXM',into=("SANS","RCMK","MD","MDA","METIS")),
+         ),
+         MATR_ASSE       =FACT(statut='o',min=01,max='**',
+           MATRICE         =SIMP(statut='o',typ=(matr_asse,CO)),
+           OPTION          =SIMP(statut='o',typ='TXM',
+                                 into=("RIGI_MECA","MASS_MECA","MASS_MECA_DIAG",
+                                       "AMOR_MECA","RIGI_MECA_HYST","IMPE_MECA",
+                                       "ONDE_FLUI","RIGI_FLUI_STRU","MASS_FLUI_STRU",
+                                       "RIGI_ROTA","RIGI_GEOM","RIGI_MECA_LAGR",
+                                       "RIGI_THER","MASS_THER",
+                                       "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",
+                                       "MASS_ID_MTEM_R","MASS_ID_MTNS_R","MASS_ID_MDEP_R","MASS_ID_MDNS_R",)
+                                 ),
+           SIEF_ELGA       =SIMP(statut='f',typ=cham_elem_sief_r),
+           MODE_FOURIER    =SIMP(statut='f',typ='I'),
+           THETA           =SIMP(statut='f',typ=theta_geom),
+           PROPAGATION     =SIMP(statut='f',typ='R'),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=-18,fr=" ",docu="U7.03.11-a",
+         OPTION          =FACT(statut='o',min=01,max=01,
+           regles=(UN_PARMI('TOUT','MODULE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           MODULE          =SIMP(statut='f',typ='TXM',into=("PRE_MISS","MISS_EVOL","MISS_IMPE")),
+         ),
+         PROJET          =SIMP(statut='o',typ='TXM'),  
+         REPERTOIRE      =SIMP(statut='f',typ='TXM'),  
+         UNITE_IMPR_ASTER=SIMP(statut='f',typ='I',defaut=25),  
+         UNITE_OPTI_MISS =SIMP(statut='f',typ='I',defaut=26),  
+         UNITE_MODELE_SOL=SIMP(statut='f',typ='I',defaut=27),  
+         UNITE_RESU_IMPE =SIMP(statut='f',typ='I',defaut=30),  
+)  ;
+#& MODIF COMMANDE  DATE 23/01/2002   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def macro_mode_meca_prod(self,MATR_A,MATR_B,**args ):
+  self.type_sdprod(MATR_A,matr_asse_depl_r)
+  self.type_sdprod(MATR_B,matr_asse_depl_r)
+  return mode_meca
+
+MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op= -12,sd_prod=macro_mode_meca_prod,
+                     docu="U4.52.02-c",reentrant='n',
+         MATR_A          =SIMP(statut='o',typ=(CO,matr_asse_depl_r) ),
+         MATR_B          =SIMP(statut='o',typ=(CO,matr_asse_depl_r) ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#  ce mot cle ne devrait il pas etre dans calc_freq  
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="SORENSEN",    
+                               into=("TRI_DIAG","JACOBI","SORENSEN",) ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="SANS",    
+                               into=("MODE_RIGIDE","SANS") ),
+         CALC_FREQ       =FACT(statut='d',min=00,max=01,
+           regles=(UN_PARMI('FREQ','FREQ_MAX'),
+                   PRESENT_PRESENT('FREQ_MIN','FREQ_MAX'),
+                   PRESENT_PRESENT('FREQ_MAX','NB_BLOC_FREQ'),
+                   EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+           FREQ            =SIMP(statut='f',typ='R',max='**' ),  
+           FREQ_MIN        =SIMP(statut='f',typ='R' ),  
+           FREQ_MAX        =SIMP(statut='f',typ='R' ),  
+           NB_BLOC_FREQ    =SIMP(statut='f',typ='I' ),  
+           NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10 ),  
+           DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),  
+           COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+           NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8 ),  
+           NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),  
+           PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2 ),  
+           PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-10 ),  
+           PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12 ),  
+           NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5 ),  
+           NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30 ),  
+           PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.4E-10 ),  
+           NMAX_ITER_BATHE =SIMP(statut='f',typ='I' ,defaut= 12 ),  
+           PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2 ),  
+           NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12 ),  
+           PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E0 ),  
+           NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20 ),  
+           PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717 ),  
+           SEUIL_FREQ      =SIMP(statut='f',typ='R' ,defaut= 1.E-2 ),  
+           STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="NON" ,into=("OUI","NON") ),
+         ),
+         VERI_MODE       =FACT(statut='d',min=00,max=01,
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-6 ),  
+           PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-3 ),  
+           STURM           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         NORM_MODE       =FACT(statut='o',min=01,max='**',
+           MASS_INER       =SIMP(statut='o',typ=tabl_mass_iner ),
+           NORME           =SIMP(statut='f',typ='TXM',defaut="TRAN_ROTA",    
+                                 into=("MASS_GENE","RIGI_GENE","EUCL",           
+                                       "EUCL_TRAN","TRAN","TRAN_ROTA") ),
+           INFO            =SIMP(statut='f',typ='I',defaut= 1 ,into=(1,2) ),
+         ),
+         FILTRE_MODE     =FACT(statut='f',min=01,max=01,
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",    
+                                 into=("MASS_EFFE_UN","MASS_GENE") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
+         ),
+         IMPRESSION      =FACT(statut='d',min=01,max=01,
+           TOUT_PARA       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           CUMUL           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",    
+                                 into=("MASS_EFFE_UN","MASS_GENE",) ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 23/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def macro_proj_base_ops(self,BASE,NB_VECT,MATR_ASSE_GENE,VECT_ASSE_GENE,**args):
+  """
+     Ecriture de la macro MACRO_PROJ_BASE
+  """
+  ier=0
+  # On importe les definitions des commandes a utiliser dans la macro
+  NUME_DDL_GENE  =self.get_cmd('NUME_DDL_GENE')
+  PROJ_MATR_BASE =self.get_cmd('PROJ_MATR_BASE')
+  PROJ_VECT_BASE =self.get_cmd('PROJ_VECT_BASE')
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.icmd=1
+
+  nompro=None
+  iocc=0
+  if MATR_ASSE_GENE:
+    for m in MATR_ASSE_GENE:
+      iocc=iocc+1
+      if (iocc==1 or (m['PROFIL']!=nompro)):
+         _num=NUME_DDL_GENE(BASE=BASE,NB_VECT=NB_VECT,STOCKAGE=m['PROFIL'])
+      nompro=m['PROFIL']
+      motscles={}
+      if   m['MATR_ASSE']     :  motscles['MATR_ASSE']     =m['MATR_ASSE']
+      elif m['MATR_ASSE_GENE']:  motscles['MATR_ASSE_GENE']=m['MATR_ASSE_GENE']
+      else:
+          ier=ier+1
+          self.cr.fatal("MATR_ASSE et MATR_ASSE_GENE absents")
+          return ier
+      self.DeclareOut('mm',m['MATRICE'])
+      mm=PROJ_MATR_BASE(BASE=BASE,NUME_DDL_GENE=_num,NB_VECT=NB_VECT,**motscles)
+
+  iocc=0
+  if VECT_ASSE_GENE:
+    for v in VECT_ASSE_GENE:
+      iocc=iocc+1
+      if (iocc==1 and not MATR_ASSE_GENE):
+         _num=NUME_DDL_GENE(BASE=BASE,NB_VECT=NB_VECT,STOCKAGE='DIAG')
+      motscles={}
+      if   v['VECT_ASSE']     :  motscles['VECT_ASSE']     =v['VECT_ASSE']
+      elif v['VECT_ASSE_GENE']:  motscles['VECT_ASSE_GENE']=v['VECT_ASSE_GENE']
+      else:
+          ier=ier+1
+          self.cr.fatal("MATR_ASSE et MATR_ASSE_GENE absents")
+          return ier
+      motscles['TYPE_VECT']=v['TYPE_VECT']
+      self.DeclareOut('vv',v['VECTEUR'])
+      vv=PROJ_VECT_BASE(BASE=BASE,NUME_DDL_GENE=_num,NB_VECT=NB_VECT,**motscles)
+
+  return ier
+
+
+def macro_proj_base_prod(self,MATR_ASSE_GENE,VECT_ASSE_GENE,**args ):
+  if MATR_ASSE_GENE != None:
+    for m in MATR_ASSE_GENE:
+      self.type_sdprod(m['MATRICE'],matr_asse_gene_r)
+      self.type_sdprod(m['MATR_ASSE'],matr_asse_depl_r)
+  if VECT_ASSE_GENE != None:
+    for v in VECT_ASSE_GENE:
+      self.type_sdprod(v['VECTEUR'],vect_asse_gene)
+  return None
+
+MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,docu="U4.63.11-c",
+                      sd_prod=macro_proj_base_prod,
+                      fr="Projection des matrices et/ou vecteurs assemblés sur une base de vecteurs",
+         BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene) ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999),
+         MATR_ASSE_GENE  =FACT(statut='f',min=01,max='**',
+           MATRICE         =SIMP(statut='o',typ=(CO,matr_asse)),
+           MATR_ASSE       =SIMP(statut='f',typ=matr_asse_depl_r),
+           MATR_ASSE_GENE  =SIMP(statut='f',typ=matr_asse_gene_r),
+           PROFIL          =SIMP(statut='f',typ='TXM',defaut="DIAG",into=("PLEIN","DIAG") ),
+         ),
+         VECT_ASSE_GENE  =FACT(statut='f',min=01,max='**',
+           VECTEUR         =SIMP(statut='o',typ=(CO,vect_asse)),
+           TYPE_VECT       =SIMP(statut='f',typ='TXM',defaut="FORC"),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r),
+           VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MAJ_CATA=PROC(nom="MAJ_CATA",op=20,docu="U4.15.01-d",
+              fr="Compilation des catalogues de commandes et d éléments",
+         regles=(UN_PARMI('COMMANDE','ELEMENT','VALIDATION'),),
+
+         COMMANDE        =FACT(statut='f',min=01,max=01,
+           UNITE           =SIMP(statut='o',typ='I',val_min=1,val_max=99, ),
+         ),
+
+         ELEMENT         =FACT(statut='f',min=01,max=01,),
+
+         VALIDATION      =FACT(statut='f',min=01,max=01,
+           UNITE           =SIMP(statut='o',typ='I',val_min=1,val_max=99, ),
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 04/12/2001   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
+                   fr="Analyse mécanique statique linéaire",docu="U4.51.01-f",reentrant='n',
+                   regles=(EXCLUS("INST","LIST_INST"),
+                           AU_MOINS_UN('CHAM_MATER','CARA_ELEM',), ),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater,
+         fr="le CHAM_MATER est nécessaire, sauf si le modèle ne contient que des éléments discrets (modélisations DIS_XXX)",
+         ang="CHAM_MATER is compulsory, except if the model contains only discret elements (modelizations DIS_XXX)"),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem,
+         fr="le CARA_ELEM est nécessaire dès que le modèle contient des éléments de structure : coques, poutres, ...",
+         ang="CARA_ELEM is compulsory as soon as the model contains structural elements : plates, beams, ..."),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         EXCIT           =FACT(statut='o',min=1,max='**',
+           CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+         ),
+         INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         OPTION          =SIMP(statut='f',typ='TXM',max='**',
+                               into=("SIEF_ELGA_DEPL","SIGM_ELNO_DEPL","SIPO_ELNO_DEPL","EFGE_ELNO_DEPL",
+                                     "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPME_ELNO_DEPL","EPME_ELGA_DEPL",
+                                     "EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","EQUI_ELNO_EPSI","EQUI_ELGA_EPSI",
+                                     "EQUI_ELNO_EPME","EQUI_ELGA_EPME","DEGE_ELNO_DEPL","EPOT_ELEM_DEPL",
+                                     "ENEL_ELGA","ENEL_ELNO_ELGA") ),
+         NUME_COUCHE     =SIMP(statut='f',typ='I',defaut=1),
+         NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY") ),
+         ANGLE           =SIMP(statut='f',typ='I',defaut=0),
+         PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL") ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters"),
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400.),
+           ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut=8),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.E-6),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 25/09/2001   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+MEMO_NOM_SENSI=PROC(nom="MEMO_NOM_SENSI",op=129,docu="U4.31.xx-a",
+                    fr="Mémorisation des noms des concepts dérivés.",
+                    ang="Memorisation of the names of the sensitive concepts.",
+         regles=(AU_MOINS_UN('NOM','NOM_ZERO','NOM_UN'),),
+
+         NOM=FACT(statut='f',max='**',
+             NOM_SD=SIMP(statut='o',typ='TXM',
+                         fr="Nom de la structure de base",
+                         ang="Name of the basic structure"),
+             PARA_SENSI=SIMP(statut='o',typ=(para_sensi,theta_geom),
+                         fr="Nom du paramètre sensible base",
+                         ang="Name of the sensitive parameter"),
+             NOM_COMPOSE=SIMP(statut='f',typ='TXM',defaut=" ",
+                         fr="Nom de la structure composée",
+                         ang="Name of the built strcuture"),
+         ),
+
+         NOM_ZERO=SIMP(statut='f',typ=fonction,
+                       fr="Nom de la fonction nulle",
+                       ang="Name of the zero fonction"),
+         NOM_UN=SIMP  (statut='f',typ=fonction,
+                       fr="Nom de la fonction unité",
+                       ang="Name of the one fonction"),
+
+
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op=  80,sd_prod=mode_cycl,
+                    fr="Modes propres d une structure à répétitivité cyclique à partir d une base de modes propres réels",
+                    docu="U4.52.05-e",reentrant='n',
+         BASE_MODALE     =SIMP(statut='o',typ=base_modale ),
+         NB_MODE         =SIMP(statut='f',typ='I',defaut= 999 ),
+         NB_SECTEUR      =SIMP(statut='o',typ='I' ),
+         LIAISON         =FACT(statut='o',min=01,max=01,
+           DROITE          =SIMP(statut='o',typ='TXM' ),
+           GAUCHE          =SIMP(statut='o',typ='TXM' ),
+           AXE             =SIMP(statut='f',typ='TXM' ),
+         ),
+         VERI_CYCL       =FACT(statut='f',min=01,max=01,
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF",) ),
+           DIST_REFE       =SIMP(statut='f',typ='R' ),
+         ),
+         CALCUL          =FACT(statut='o',min=01,max=01,
+           TOUT_DIAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NB_DIAM         =SIMP(statut='f',typ='I',max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE"
+                                ,into=("PLUS_PETITE","CENTRE","BANDE") ),
+           b_centre      =BLOC(condition = "OPTION == 'CENTRE'",
+             FREQ            =SIMP(statut='o',typ='R',min=01,max=01),
+           ),
+           b_bande       =BLOC(condition = "OPTION == 'BANDE'",
+             FREQ            =SIMP(statut='o',typ='R',min=02,max=02),
+           ),
+#  NMAX_FREQ n a-t-il pas un sens qu avec OPTION CENTRE                                
+           NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10 ),
+           PREC_SEPARE     =SIMP(statut='f',typ='R',defaut= 100. ),
+           PREC_AJUSTE     =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+           NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 50 ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def mode_iter_inv_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
+  if TYPE_RESU == "MODE_FLAMB" : return mode_flamb
+  if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c
+  if AsType(MATR_A) == matr_asse_depl_r : return mode_meca
+  if AsType(MATR_A) == matr_asse_pres_r : return mode_acou
+  if AsType(MATR_A) == matr_asse_gene_r : return mode_gene
+  raise AsException("type de concept resultat non prevu")
+
+MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op=  44,sd_prod=mode_iter_inv_prod
+                    ,fr="Modes propres par itérations inverses ; valeurs propres et modes réels ou complexes",
+                     docu="U4.52.04-f",reentrant='n',
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_C          =SIMP(statut='f',typ=matr_asse_depl_r ),
+         TYPE_RESU       =SIMP(statut='f',position='global',typ='TXM',defaut="DYNAMIQUE",   
+                               into=("MODE_FLAMB","DYNAMIQUE"),fr="Type d analyse" ),
+         b_dynam         =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+           CALC_FREQ       =FACT(statut='o',min=1,max=1,fr="Choix des paramètres pour le calcul des valeurs propres",
+           
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="AJUSTE",into=("SEPARE","AJUSTE","PROCHE"),
+                                   fr="Choix de l option pour estimer les valeurs propres"  ),
+             FREQ            =SIMP(statut='o',typ='R',max='**'),
+             AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),     
+             NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 0,val_min=0 ),           
+             NMAX_ITER_SEPARE=SIMP(statut='f',typ='I' ,defaut= 30,val_min=0 ),
+             PREC_SEPARE     =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0 ),
+             NMAX_ITER_AJUSTE=SIMP(statut='f',typ='I',defaut= 15,val_min=0 ),
+             PREC_AJUSTE     =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0 ),
+
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0, ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0, ),
+           ),
+         ),
+         b_flamb        =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+           CALC_FREQ       =FACT(statut='o',min=1,max=1,fr="Choix des paramètres pour le calcul des valeurs propres",
+           
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="AJUSTE",into=("SEPARE","AJUSTE","PROCHE"),
+                                 fr="Choix de l option pour estimer les valeurs propres"  ),
+             CHAR_CRIT       =SIMP(statut='o',typ='R',max='**' ),
+             NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 0,val_min=0 ),           
+             NMAX_ITER_SEPARE=SIMP(statut='f',typ='I' ,defaut= 30,val_min=0 ),
+             PREC_SEPARE     =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0, ),
+             NMAX_ITER_AJUSTE=SIMP(statut='f',typ='I',defaut= 15 ),
+             PREC_AJUSTE     =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0, ),
+           
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0, ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0, ),
+           ),
+         ),
+         CALC_MODE       =FACT(statut='d',min=0,max=1,fr="Choix des paramètres pour le calcul des vecteurs propres",
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="DIRECT",into=("DIRECT","RAYLEIGH") ),
+           PREC            =SIMP(statut='f',typ='R',defaut= 1.E-5,val_min=0.E+0,fr="Précision de convergence" ),
+           NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ),
+         ),
+         VERI_MODE       =FACT(statut='d',min=0,max=1,
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0,
+                                 fr="Valeur limite admise pour l ereur a posteriori des modes"  ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 23/01/2002   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def mode_iter_simult_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
+  if TYPE_RESU == "MODE_FLAMB" : return mode_flamb
+  if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c
+  if AsType(MATR_A) == matr_asse_depl_r : return mode_meca
+  if AsType(MATR_A) == matr_asse_pres_r : return mode_acou
+  if AsType(MATR_A) == matr_asse_gene_r : return mode_gene
+  raise AsException("type de concept resultat non prevu")
+
+MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_prod,
+                      fr="Modes propres par itérations simultanées ; valeurs propres et modes propres réels ou complexes",
+                      docu="U4.52.03-e",reentrant='n',
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_C          =SIMP(statut='f',position='global',typ=matr_asse_depl_r ),
+         METHODE         =SIMP(statut='f',position='global',typ='TXM',defaut="SORENSEN",
+                               into=("TRI_DIAG","JACOBI","SORENSEN") ),
+         TYPE_RESU       =SIMP(statut='f',position='global',typ='TXM',defaut="DYNAMIQUE",
+                               into=("MODE_FLAMB","DYNAMIQUE"),
+                               fr="Type d analyse" ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="SANS",into=("MODE_RIGIDE","SANS"),
+                               fr="Calcul des modes de corps rigide, uniquement pour la méthode TRI_DIAG" ),
+
+         b_flamb         =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+           CALC_FREQ       =FACT(statut='d',min=0,max=1,
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
+                                   fr="Choix de l option et par conséquent du shift du problème modal" ),
+             b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_centre      =BLOC(condition = "OPTION == 'CENTRE'",
+                                 fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+               CHAR_CRIT       =SIMP(statut='o',typ='R',min=1,max=1,
+                                     fr="Charge critique autour de laquelle on cherche les charges critiques propres"),
+             ),
+             b_bande       =BLOC(condition = "(OPTION == 'BANDE')",
+                                 fr="Recherche des valeurs propres dans une bande donnée",
+               CHAR_CRIT       =SIMP(statut='o',typ='R',min=2,max=2,
+                                     fr="Valeur des deux charges critiques délimitant la bande de recherche"),
+             ),           
+             APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG"),
+                                   fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),           
+             regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+             DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+             COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+             b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
+               PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
+               NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+               PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
+               NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ), 
+             ),
+             b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
+               PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
+               NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
+               PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+               NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
+             ),
+             b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
+               PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),  
+               NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),  
+               PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
+             ),
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+           ),
+         ),
+
+         b_dynam        =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+           CALC_FREQ       =FACT(statut='d',min=0,max=1,
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
+                                   fr="Choix de l option et par conséquent du shift du problème modal" ),
+             b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_centre       =BLOC(condition = "OPTION == 'CENTRE'",
+                                  fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+               FREQ            =SIMP(statut='o',typ='R',min=1,max=1,
+                                     fr="Fréquence autour de laquelle on cherche les fréquences propres"),
+               AMOR_REDUIT     =SIMP(statut='f',typ='R',max=1,),
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_bande         =BLOC(condition = "(OPTION == 'BANDE')",
+                                   fr="Recherche des valeurs propres dans une bande donnée",
+               FREQ            =SIMP(statut='o',typ='R',min=2,max=2,
+                                     fr="Valeur des deux fréquences délimitant la bande de recherche"),
+             ),           
+             APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG"),
+                                   fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),           
+             regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+             DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+             COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+             b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
+               PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
+               NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+               PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
+               NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ), 
+             ),
+             b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
+               PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
+               NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
+               PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+               NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
+             ),
+             b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
+               PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),  
+               NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),  
+               PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
+             ),
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+           ),
+         ),
+
+         VERI_MODE       =FACT(statut='d',min=0,max=1,
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-3,val_min=0.E+0 ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0,
+                                 fr="Valeur limite admise pour l ereur a posteriori des modes" ),
+           STURM           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),        
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def mode_stat_prod(MODE_STAT,FORCE_NODALE,PSEUDO_MODE,**args):
+ if (MODE_STAT != None)          : return mode_stat_depl
+ if (PSEUDO_MODE !=None)         : return mode_stat_acce
+ if (FORCE_NODALE != None)       : return mode_stat_forc
+ raise AsException("type de concept resultat non prevu")
+MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_stat_prod,
+                   fr="Calcul de modes statiques",
+                   docu="U4.52.14-e",reentrant='n',
+         MATR_RIGI       =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
+               regles=(UN_PARMI('MODE_STAT','FORCE_NODALE','PSEUDO_MODE'),),
+         MODE_STAT       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
+                   UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ,),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ,),
+           AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+           SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         FORCE_NODALE    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
+                   UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",), ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",), ),
+           AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+           SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         PSEUDO_MODE       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('AXE','DIRECTION','TOUT','NOEUD','GROUP_NO' ),),
+           AXE             =SIMP(statut='f',typ='TXM',into=("X","Y","Z"),max=3),
+           DIRECTION       =SIMP(statut='f',typ='R',min=3,max=3),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           b_dir           =BLOC(condition = "DIRECTION != None",
+             NOM_DIR         =SIMP(statut='f',typ='TXM' ),),
+           b_cmp          =BLOC(condition="TOUT!= None or NOEUD!=None or GROUP_NO!=None",
+             regles=(UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+             TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+             SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'), 
+        ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca,
+                      docu="U4.66.21-c",reentrant='f',
+#  la commande modi_base _modale : reentrant = f ou o                      
+         regles=(EXCLUS('AMOR_UNIF','AMOR_REDUIT', ),),
+         BASE            =SIMP(statut='o',typ=mode_meca ),
+         BASE_ELAS_FLUI  =SIMP(statut='o',typ=melasflu ),
+         NUME_VITE_FLUI  =SIMP(statut='o',typ='I' ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         AMOR_UNIF       =SIMP(statut='f',typ='R' ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 29/01/2002   AUTEUR CIBHHPD D.NUNEZ 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage,
+                   fr="Modification de la connectivité de groupes de mailles 2D ou 3D affectées à la modélisation de contact",
+                   docu="U4.23.04-c",reentrant='o',
+      regles=(UN_PARMI('ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE'),
+              EXCLUS('EQUE_PIQUA','PLAQ_TUBE'),
+              EXCLUS('EQUE_PIQUA','TUBE_COUDE'),),
+         MAILLAGE        =SIMP(statut='o',typ=maillage ),
+
+         ORIE_CONTACT    =FACT(statut='f',min=01,max=01,
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+         ),
+
+         DEFORME         =FACT(statut='f',min=01,max=01,
+           OPTION          =SIMP(statut='o',typ='TXM',into=("TRAN","TRAN_APPUI") ),
+           DEPL            =SIMP(statut='o',typ=cham_no_depl_r ),
+        b_deform        =BLOC(condition = "OPTION=='TRAN_APPUI'", 
+           GROUP_NO_APPUI = SIMP(statut='o',typ=grno,max='**' ),
+           GROUP_NO_STRU = SIMP(statut='o',typ=grno,max='**' ),),
+         ),
+
+         EQUE_PIQUA      =FACT(statut='f',min=01,max=01,
+           GROUP_NO        =SIMP(statut='o',typ=grno),
+           E_BASE          =SIMP(statut='o',typ='R' ),
+           DEXT_BASE       =SIMP(statut='o',typ='R' ),
+           L_BASE          =SIMP(statut='o',typ='R' ),
+           L_CHANF         =SIMP(statut='o',typ='R' ),
+           H_SOUD          =SIMP(statut='o',typ='R' ),
+           ANGL_SOUD       =SIMP(statut='o',typ='R' ),
+           JEU_SOUD        =SIMP(statut='o',typ='R' ),
+           E_CORP          =SIMP(statut='o',typ='R' ),
+           DEXT_CORP       =SIMP(statut='o',typ='R' ),
+           AZIMUT          =SIMP(statut='o',typ='R' ),
+           RAFF_MAIL       =SIMP(statut='o',typ='TXM' ),
+           X_MAX           =SIMP(statut='o',typ='R' ),
+         ),
+         ORIE_PEAU_2D    =FACT(statut='f',min=01,max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+         ),
+         ORIE_PEAU_3D    =FACT(statut='f',min=01,max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+         ),
+         ORIE_NORM_COQUE =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('NOEUD','GROUP_NO'),
+                   PRESENT_PRESENT('NOEUD','VECT_NORM'),
+                   PRESENT_PRESENT('GROUP_NO','VECT_NORM'),),
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
+           VECT_NORM       =SIMP(statut='f',typ='R',max=03),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+         ),
+         b_modele        =BLOC(condition = "(ORIE_PEAU_2D != None) or (ORIE_PEAU_3D != None) or(ORIE_NORM_COQUE != None)",
+           MODELE          =SIMP(statut='o',typ=modele ),
+         ),
+         PLAQ_TUBE       =FACT(statut='f',min=01,max=01,
+           DEXT            =SIMP(statut='o',typ='R' ),
+           EPAIS           =SIMP(statut='o',typ='R' ),
+           L_TUBE_P1       =SIMP(statut='o',typ='R' ),
+           AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),
+           COUTURE         =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",)  ),
+         ),
+         TUBE_COUDE      =FACT(statut='f',min=01,max=01,
+           ANGLE           =SIMP(statut='o',typ='R' ),
+           R_CINTR         =SIMP(statut='o',typ='R' ),
+           L_TUBE_P1       =SIMP(statut='o',typ='R' ),
+         ),
+         MODI_MAILLE     =FACT(statut='f',min=01,max=01,
+           regles=(AU_MOINS_UN('GROUP_MA_FOND','MAILLE_FOND','GROUP_NO_FOND','NOEUD_FOND'),),
+           OPTION          =SIMP(statut='o',typ='TXM',into=("NOEUD_QUART",) ),
+           GROUP_MA_FOND   =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_FOND     =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_FOND   =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_FOND      =SIMP(statut='f',typ=no,max='**'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 15/01/2002   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=obstacle,
+                   fr=" ",docu="U4.44.22-a",reentrant='f',
+      regles=(PRESENT_ABSENT('R_MOBILE','CRAYON'),
+              PRESENT_PRESENT('TUBE_NEUF','TABL_USURE'),
+              PRESENT_PRESENT('V_USUR_TUBE','V_USUR_OBST'),),
+         TUBE_NEUF       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         V_USUR_TUBE     =SIMP(statut='f',typ='R',max='**'),
+         V_USUR_OBST     =SIMP(statut='f',typ='R',max='**'),
+         TABL_USURE      =SIMP(statut='f',typ=tabl_post_usur),
+         INST            =SIMP(statut='f',typ='R'),  
+         OBSTACLE        =SIMP(statut='f',typ=obstacle),
+         GUIDE           =SIMP(statut='o',typ=obstacle),
+         CRAYON          =SIMP(statut='f',typ=obstacle),
+         R_MOBILE        =SIMP(statut='f',typ='R'),  
+         PERCEMENT       =SIMP(statut='f',typ='R',defaut=1),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+def modi_repere_prod(RESULTAT,**args):
+  if AsType(RESULTAT) == evol_elas :    return evol_elas
+  if AsType(RESULTAT) == evol_noli :    return evol_noli
+  if AsType(RESULTAT) == evol_ther :    return evol_ther
+  if AsType(RESULTAT) == dyna_trans :   return dyna_trans
+  if AsType(RESULTAT) == dyna_harmo :   return dyna_harmo
+  if AsType(RESULTAT) == mode_meca :    return mode_meca
+  if AsType(RESULTAT) == mode_flamb :   return mode_flamb
+  if AsType(RESULTAT) == mult_elas :    return mult_elas
+  if AsType(RESULTAT) == base_modale  : return base_modale
+  raise AsException("type de concept resultat non prevu")
+
+MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,docu="U4.74.01-a1",reentrant='n',
+                    fr="Impression des resultats dans un repere cylindrique",
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,mode_meca,
+                                               evol_noli,mult_elas,
+                                               evol_ther,base_modale,mode_flamb) ),
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                        'NOEUD_CMP','LIST_INST','LIST_FREQ','NOM_CAS'),),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8),
+
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+
+         MODI_CHAM       =FACT(statut='o',min=01,max='**',
+           TYPE_CHAM       =SIMP(statut='o',typ='TXM', max=1,    
+                                 into=("VECT_2D","VECT_3D","TORS_3D","TENS_2D","TENS_3D"),),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max=1 ),  
+           b_vect_2d       =BLOC(condition = "TYPE_CHAM=='VECT_2D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=2,max=2 ),),
+           b_vect_3d       =BLOC(condition = "TYPE_CHAM=='VECT_3D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=3,max=3 ),),
+           b_tors_3d       =BLOC(condition = "TYPE_CHAM=='TORS_3D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=6,max=6 ),),
+           b_tens_2d       =BLOC(condition = "TYPE_CHAM=='TENS_2D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=4,max=4 ),),
+           b_tens_3d       =BLOC(condition = "TYPE_CHAM=='TENS_3D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=6,max=6 ),),
+         ),
+         DEFI_REPERE     =FACT(statut='o',min=1,max=1,
+         regles=(UN_PARMI('ANGL_NAUT','ORIGINE'),),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="UTILISATEUR",
+                                 into=("UTILISATEUR","CYLINDRIQUE"),),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',min=1,max=3),
+           ORIGINE         =SIMP(statut='f',typ='R',min=2,max=3),  
+           AXE_Z           =SIMP(statut='f',typ='R',min=3,max=3),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def norm_mode_prod(MODE,**args ):
+  if AsType(MODE) == mode_meca   : return mode_meca
+  if AsType(MODE) == mode_meca_c : return mode_meca_c
+  if AsType(MODE) == mode_flamb  : return mode_flamb
+  raise AsException("type de concept resultat non prevu")
+
+NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
+               fr="Normalisation de modes propres",
+               docu="U4.52.11-e",reentrant='f',
+         regles=(UN_PARMI('NORME','NOEUD','AVEC_CMP','SANS_CMP'),),
+         MODE       =SIMP(statut='o',typ=(mode_meca,mode_flamb) ),
+         NORME      =SIMP(statut='f',typ='TXM',fr="Norme prédéfinie : masse généralisée, euclidienne,...",
+                          into=("MASS_GENE","RIGI_GENE","EUCL","EUCL_TRAN","TRAN","TRAN_ROTA") ),
+         NOEUD      =SIMP(statut='f',typ=no, fr="Composante donnée d un noeud spécifié égale à 1"),
+         b_noeud    =BLOC(condition = "NOEUD != None",
+           NOM_CMP    =SIMP(statut='o',typ='TXM' ),
+         ),
+         AVEC_CMP   =SIMP(statut='f',typ='TXM',max='**'),
+         SANS_CMP   =SIMP(statut='f',typ='TXM',max='**'),
+         MASS_INER  =SIMP(statut='f',typ=tabl_mass_iner ),
+         MODE_SIGNE =FACT(statut='f',min=00,max=01,fr="Imposer un signe sur une des composantes des modes",
+           NOEUD      =SIMP(statut='o',typ=no,fr="Noeud ou sera imposé le signe"),
+           NOM_CMP    =SIMP(statut='o',typ='TXM',fr="Composante du noeud ou sera imposé le signe" ),
+           SIGNE      =SIMP(statut='f',typ='TXM',defaut="POSITIF",into=("NEGATIF","POSITIF"),
+                            fr="Choix du signe" ),
+         ),
+         TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+         INFO       =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 22/01/2002   AUTEUR CIBHHPD D.NUNEZ 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl,docu="U4.61.11-f",reentrant='n',
+              fr="Etablissement de la numérotation des ddl avec ou sans renumérotation et du stockage de la matrice",
+                  regles=(UN_PARMI('MATR_RIGI','MODELE'),), 
+         MATR_RIGI       =SIMP(statut='f',typ=(matr_elem_depl_r ,matr_elem_depl_c,
+                                               matr_elem_temp_r,matr_elem_pres_c),max=100 ),
+         MODELE          =SIMP(statut='f',typ=modele ),
+         b_modele        =BLOC(condition = "MODELE != None",
+           CHARGE     =SIMP(statut='f',max='**',typ=(char_meca,char_ther,char_acou, ),),
+         ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+         b_mult_front    =BLOC(condition="METHODE=='MULT_FRONT'",fr="paramètres associés à la méthode multifrontale",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS"),defaut="METIS" ),
+         ),
+         b_ldlt          =BLOC(condition="METHODE=='LDLT'",fr="paramètres associés à la méthode LDLT",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
+         b_gcpc          =BLOC(condition="METHODE=='GCPC'",fr="paramètres associés à la méthode gradient conjugué",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene,
+                   fr="Etablissement de la numérotation des ddl d un modèle établi en coordonnées généralisées",
+                    docu="U4.65.03-d",reentrant='n',
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         BASE            =SIMP(statut='f',typ=(mode_meca,base_modale,mode_gene ) ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999 ),
+         STOCKAGE        =SIMP(statut='f',typ='TXM',defaut="LIGN_CIEL",into=("PLEIN","DIAG","LIGN_CIEL") ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_DYNA_ALEA=OPER(nom="POST_DYNA_ALEA",op= 132,sd_prod=tabl_post_alea,
+                    fr="Traitements statistiques de résultats de type interspectre et impression sur fichiers",
+                    docu="U4.84.04-d",reentrant='n',
+         regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I','OPTION'),),
+         INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
+         NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),  
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE_I    =SIMP(statut='f',typ='I',max='**' ),
+         NOEUD_I         =SIMP(statut='f',typ=no,max='**'),         
+         OPTION          =SIMP(statut='f',typ='TXM',into=("DIAG",) ),
+         b_nume_ordre_i =BLOC(condition = "NUME_ORDRE_I != None",
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I',max='**' ),   
+         ),  
+         b_noeud_i      =BLOC(condition = "NOEUD_I != None",
+           NOEUD_J         =SIMP(statut='o',typ=no,max='**'),
+           NOM_CMP_I       =SIMP(statut='o',typ='TXM',max='**' ),  
+           NOM_CMP_J       =SIMP(statut='o',typ='TXM',max='**' ),     
+         ),  
+         DEPASSEMENT     =FACT(statut='f',min=01,max='**',
+           fr="Loi de dépassement d un seuil pendant une durée donnée",
+           regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
+           VALE_MIN        =SIMP(statut='f',typ='R' ),  
+           VALE_MAX        =SIMP(statut='f',typ='R' ),  
+           PAS             =SIMP(statut='f',typ='R' ),  
+           DUREE           =SIMP(statut='f',typ='R',defaut= 1. ),  
+         ),
+         RAYLEIGH        =FACT(statut='f',min=01,max='**',
+           fr="Densité de probabilité de pic positif, loi adaptée à des signaux à bande étroite",
+           regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
+           VALE_MIN        =SIMP(statut='f',typ='R' ),  
+           VALE_MAX        =SIMP(statut='f',typ='R' ),  
+           PAS             =SIMP(statut='f',typ='R' ),  
+         ),
+         GAUSS           =FACT(statut='f',min=01,max='**',
+           fr="Densité de probabilité de pic positif, loi normale adaptée à des signaux large bande",
+           regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
+           VALE_MIN        =SIMP(statut='f',typ='R' ),  
+           VALE_MAX        =SIMP(statut='f',typ='R' ),  
+           PAS             =SIMP(statut='f',typ='R' ),  
+         ),
+         VANMARCKE       =FACT(statut='f',min=01,max='**',
+           fr="Probabilité de non dépassement de seuil pendant une durée donnée (analyse sismique)",
+           regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
+           VALE_MIN        =SIMP(statut='f',typ='R' ),  
+           VALE_MAX        =SIMP(statut='f',typ='R' ),  
+           PAS             =SIMP(statut='f',typ='R' ),  
+           DUREE           =SIMP(statut='f',typ='R',defaut= 10. ),  
+         ),
+         MOMENT          =SIMP(statut='f',typ='I',max='**',fr="Moments spectraux en complément des cinq premiers" ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=tabl_post_dyna,
+                      fr="Post-traitements en coordonnées généralisées issus de DYNA_TRAN_MODAL",
+                      docu="U4.84.02-d",reentrant='n',
+        regles=(UN_PARMI('CHOC','RELA_EFFO_DEPL', ),),
+         RESU_GENE       =SIMP(statut='o',typ=tran_gene ),
+         CHOC            =FACT(statut='f',min=01,max='**',
+                               fr="Analyse des non linéarités de choc",
+           INST_INIT       =SIMP(statut='f',typ='R',defaut= -1. ),  
+           INST_FIN        =SIMP(statut='f',typ='R',defaut= 999. ),  
+           NB_BLOC         =SIMP(statut='f',typ='I',defaut= 1 ),  
+           SEUIL_FORCE     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           DUREE_REPOS     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="USURE",into=("IMPACT","USURE") ),
+           NB_CLASSE       =SIMP(statut='f',typ='I',defaut= 10 ),  
+         ),
+         RELA_EFFO_DEPL  =FACT(statut='f',min=01,max=01,
+                               fr="Analyse des relationsnon linéaires effort-déplacement",
+           NOEUD           =SIMP(statut='o',typ=no),
+           NOM_CMP         =SIMP(statut='o',typ='TXM' ),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR VABHHTS J.TESELET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+def post_elem_prod( MASS_INER,ENER_POT,ENER_CIN,ENER_EXT,WEIBULL,
+                    CARA_GEOM,CARA_POUTRE,RICE_TRACEY,CHAR_LIMITE,
+                    INDIC_ENER,INDIC_SEUIL,ENER_ELAS,ENER_TOTALE,
+                    AIRE_INTERNE,**args ):
+  if MASS_INER    != None  : return tabl_mass_iner
+  if ENER_POT     != None  : return tabl_ener_pot
+  if ENER_CIN     != None  : return tabl_ener_cin
+  if ENER_EXT     != None  : return tabl_ener_ext
+  if WEIBULL      != None  : return tabl_weibull
+  if CARA_GEOM    != None  : return tabl_cara_geom
+  if CARA_POUTRE  != None  : return tabl_cara_geom
+  if RICE_TRACEY  != None  : return tabl_rice_tracey
+  if CHAR_LIMITE  != None  : return tabl_char_limite
+  if INDIC_ENER   != None  : return tabl_indic_ener
+  if INDIC_SEUIL  != None  : return tabl_indic_seuil
+  if ENER_ELAS    != None  : return tabl_ener_elas
+  if ENER_TOTALE  != None  : return tabl_ener_totale
+  if AIRE_INTERNE != None  : return tabl_aire_int
+  raise AsException("type de concept resultat non prevu")
+
+POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-d1",reentrant='f',
+               fr="Calcul de quantités globales (masse, inerties, énergie, ...) sur tout ou partie du modèle",
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                        'NOEUD_CMP','LIST_ORDRE','LIST_INST','LIST_FREQ','NOM_CAS'),
+                 EXCLUS('CHAM_GD','RESULTAT'),
+                 UN_PARMI('MASS_INER', 'ENER_POT', 'ENER_CIN','ENER_EXT',
+                          'WEIBULL', 'RICE_TRACEY', 'CARA_GEOM','CHAR_LIMITE',
+                          'CARA_POUTRE', 'INDIC_ENER', 'INDIC_SEUIL',
+                          'AIRE_INTERNE','ENER_ELAS','ENER_TOTALE'),
+                 PRESENT_PRESENT( 'MASS_INER', 'MODELE' ),
+                 PRESENT_PRESENT( 'CARA_GEOM', 'MODELE' ),
+                 PRESENT_PRESENT( 'AIRE_INTERNE', 'MODELE' ),
+                 PRESENT_PRESENT( 'CARA_POUTRE', 'MODELE' ),
+                 PRESENT_PRESENT( 'ENER_POT', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'ENER_CIN', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'WEIBULL', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'RICE_TRACEY', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'INDIC_ENER', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'INDIC_SEUIL', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'ENER_ELAS', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'ENER_TOTALE', 'MODELE', 'CHAM_MATER' ),
+                 PRESENT_PRESENT( 'CHAR_LIMITE', 'MODELE', 'CHAM_MATER' ),
+             ),
+         MODELE          =SIMP(statut='f',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
+         MODE_FOURIER    =SIMP(statut='f',typ='I',defaut=0),
+         NUME_COUCHE     =SIMP(statut='f',typ='I',defaut=1),
+         NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+         ANGLE           =SIMP(statut='f',typ='I',defaut=0),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         GEOMETRIE       =SIMP(statut='f',typ='TXM',defaut="INITIALE",into=("INITIALE","DEFORMEE")),
+         CHAM_GD         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_temp_r,cham_elem_ener_r) ),
+         RESULTAT        =SIMP(statut='f',typ=(mode_meca,evol_elas,evol_ther,evol_noli,mult_elas,
+                                               fourier_elas,dyna_trans) ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM',max='**'),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+
+         MASS_INER       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ORIG_INER       =SIMP(statut='f',typ='R',min=3,max=3 ),
+         ),
+
+         ENER_POT        =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         ENER_CIN        =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           OPTION          =SIMP(statut='f',typ='TXM',into=("MASS_MECA","MASS_MECA_DIAG"),
+                                                      defaut="MASS_MECA" ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         WEIBULL         =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="SIGM_ELGA",into=("SIGM_ELGA","SIGM_ELMOY")),
+           CORR_PLAST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut=1.),
+         ),
+
+         RICE_TRACEY     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="SIGM_ELGA",into=("SIGM_ELGA","SIGM_ELMOY")),
+           LOCAL           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+         ),
+
+         INDIC_ENER      =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         ENER_ELAS       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         ENER_TOTALE    =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         ENER_EXT     =FACT(statut='f',min=00,max=01,
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+         ),
+
+         CHAR_LIMITE     =FACT(statut='f',min=00,max=01,
+         CHAR_CSTE = SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON")
+         ),
+
+         INDIC_SEUIL     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         ),
+
+         CARA_GEOM       =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           SYME_X          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           SYME_Y          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           ORIG_INER       =SIMP(statut='f',typ='R',min=2,max=2),
+         ),
+
+         CARA_POUTRE     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA'),
+                   ENSEMBLE('LONGUEUR','LIAISON','MATERIAU'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA_INTE   =SIMP(statut='f',typ=grma,max='**'),
+           CARA_GEOM       =SIMP(statut='f',typ=tabl_cara_geom),
+           LAPL_PHI        =SIMP(statut='f',typ=evol_ther),
+           LAPL_PHI_Y      =SIMP(statut='f',typ=evol_ther),
+           LAPL_PHI_Z      =SIMP(statut='f',typ=evol_ther),
+           LIAISON         =SIMP(statut='f',typ='TXM',into=("ROTULE","ENCASTREMENT")),
+           LONGUEUR        =SIMP(statut='f',typ='R'),
+           MATERIAU        =SIMP(statut='f',typ=mater),
+           OPTION          =SIMP(statut='f',typ='TXM',into=("CARA_TORSION","CARA_CISAILLEMENT","CARA_GAUCHI") ),
+         ),
+
+         AIRE_INTERNE    =FACT(statut='f',min=1,max='**',
+           GROUP_MA_BORD   =SIMP(statut='o',typ=grma,max='**'),
+         ),
+ )  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=tabl_post_f_alea,docu="U4.84.03-c",reentrant='n',
+                    fr="Calcul du dommage subi par une structure soumise à unesollicitation de type aléatoire",
+         regles=(ENSEMBLE('MOMENT_SPEC_0','MOMENT_SPEC_2'),
+                 PRESENT_PRESENT( 'MOMENT_SPEC_4','MOMENT_SPEC_0'),
+                 UN_PARMI('TABL_POST_ALEA','MOMENT_SPEC_0'), ),
+         MOMENT_SPEC_0   =SIMP(statut='f',typ='R'),  
+         MOMENT_SPEC_2   =SIMP(statut='f',typ='R'),  
+         MOMENT_SPEC_4   =SIMP(statut='f',typ='R'),  
+         TABL_POST_ALEA  =SIMP(statut='f',typ=tabl_post_alea),
+         COMPTAGE        =SIMP(statut='o',typ='TXM',into=("PIC","NIVEAU")),
+         DUREE           =SIMP(statut='f',typ='R',defaut= 1.),  
+         CORR_KE         =SIMP(statut='f',typ='TXM',into=("RCCM",)),
+         DOMMAGE         =SIMP(statut='o',typ='TXM',into=("WOHLER",)),
+         MATER           =SIMP(statut='o',typ=mater),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=tabl_post_fatig,docu="U4.83.01-c",reentrant='n',
+                  fr="Calcul du dommage subi par une structure soumise à une histoire de chargement",
+
+         CHARGEMENT = SIMP(statut='o',typ='TXM',into=("UNIAXIAL","PERIODIQUE","QUELCONQUE")),
+
+         b_uniaxial = BLOC( condition = "CHARGEMENT=='UNIAXIAL'",
+                      regles=(PRESENT_PRESENT('CORR_KE','MATER'),
+                              PRESENT_PRESENT('CORR_SIGM_MOYE','MATER'),
+                              PRESENT_PRESENT('DOMMAGE','MATER'),),
+             HISTOIRE       = FACT(statut='o',min=1,max=1,
+                                 regles=(UN_PARMI('SIGM','EPSI'),),
+                                 SIGM  = SIMP(statut='f',typ=fonction),
+                                 EPSI  = SIMP(statut='f',typ=fonction),),
+             COMPTAGE       = SIMP(statut='o',typ='TXM',into=("RAINFLOW","RCCM","NATUREL")),
+             DELTA_OSCI     = SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+             COEF_MULT      = FACT(statut='f',min=1,max=1,
+                                 KT    = SIMP(statut='o',typ='R'),),
+             CORR_KE        = SIMP(statut='f',typ='TXM',into=("RCCM",)),
+             DOMMAGE        = SIMP(statut='f',typ='TXM',into=("WOHLER","MANSON_COFFIN",
+                                                              "TAHERI_MANSON","TAHERI_MIXTE")),
+             MATER          = SIMP(statut='f',typ=mater),
+             CORR_SIGM_MOYE = SIMP(statut='f',typ='TXM',into=("GOODMAN","GERBER")),
+             TAHERI_NAPPE   = SIMP(statut='f',typ=fonction),
+             TAHERI_FONC    = SIMP(statut='f',typ=fonction),
+             CUMUL          = SIMP(statut='f',typ='TXM',into=("LINEAIRE",)),
+         ),
+
+         b_periodique = BLOC( condition = "CHARGEMENT=='PERIODIQUE'",
+             HISTOIRE       = FACT(statut='o',min=1,max=1,
+                                 SIGM_XX  = SIMP(statut='o',typ=fonction),
+                                 SIGM_YY  = SIMP(statut='o',typ=fonction),
+                                 SIGM_ZZ  = SIMP(statut='o',typ=fonction),
+                                 SIGM_XY  = SIMP(statut='o',typ=fonction),
+                                 SIGM_XZ  = SIMP(statut='f',typ=fonction),
+                                 SIGM_YZ  = SIMP(statut='f',typ=fonction),),
+             CRITERE        = SIMP(statut='o',typ='TXM',into=("CROSSLAND","PAPADOPOULOS")),
+             DOMMAGE        = SIMP(statut='f',typ='TXM',into=("WOHLER",)),
+             MATER          = SIMP(statut='o',typ=mater),
+             COEF_CORR      = SIMP(statut='f',typ='R'),
+         ),
+
+         b_quelconque = BLOC( condition = "CHARGEMENT=='QUELCONQUE'",
+             HISTOIRE       = FACT(statut='o',min=1,max=1,
+                                 SIGM_XX  = SIMP(statut='o',typ=fonction),
+                                 SIGM_YY  = SIMP(statut='o',typ=fonction),
+                                 SIGM_ZZ  = SIMP(statut='o',typ=fonction),
+                                 SIGM_XY  = SIMP(statut='o',typ=fonction),
+                                 SIGM_XZ  = SIMP(statut='f',typ=fonction),
+                                 SIGM_YZ  = SIMP(statut='f',typ=fonction),
+                                 EPSP     = SIMP(statut='o',typ=fonction),
+                                 TEMP     = SIMP(statut='o',typ=fonction),),
+             DOMMAGE        = SIMP(statut='f',typ='TXM',into=("LEMAITRE",),defaut="LEMAITRE"),
+             MATER          = SIMP(statut='o',typ=mater),
+             CUMUL          = SIMP(statut='f',typ='TXM',into=("LINEAIRE",)),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_GOUJ2E=OPER(nom="POST_GOUJ2E",op=187,sd_prod=tabl_post_gouj2e,reentrant='n', 
+                 fr=" ",docu="U4.GJ.30-a",
+         TABLE           =SIMP(statut='o',typ=tabl_post_rele),
+)  ;
+#& MODIF COMMANDE  DATE 09/07/2001   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+POST_K1_K2_K3=OPER(nom="POST_K1_K2_K3",op=188,sd_prod=tabl_post_k,
+                   fr="Calcul des FIC par extrapolation du champ de déplacements sur les lèvres de la fissure",
+                   docu="U4.82.05-a",reentrant='n',
+         MODELISATION  =SIMP(statut='o',typ='TXM',
+                             into=("3D","AXIS","D_PLAN","C_PLAN"),
+                             fr="Modélisation cohérente avec celle utilisée pour le calcul des déplacements"),
+         FOND_3D       =SIMP(statut='f',typ=fond_fiss,fr="Fond de fissure issu de DEFI_FOND_FISS"),
+         b_fond_3d     =BLOC (condition="(FOND_3D != None)",
+                         MAILLAGE      = SIMP(statut='o',typ=maillage),
+                         PRECISION     = SIMP(statut='f',typ='R',defaut=0.001),
+                         NOEUD         = SIMP(statut='f',typ=no,max='**'),
+                         GROUP_NO      = SIMP(statut='f',typ=grno,max='**'),
+                         SANS_NOEUD    = SIMP(statut='f',typ=no,max='**'),
+                         SANS_GROUP_NO = SIMP(statut='f',typ=grno,max='**')
+                         ),
+         MATER         =SIMP(statut='o',typ=mater,
+                             fr="Matériau homogène et isotrope cohérent avec celui utilisé pour le calcul des déplacements"),
+         TABL_DEPL_SUP =SIMP(statut='o',typ=tabl_post_rele,
+                             fr="Table issue de post_releve_t sur les noeuds de la lèvre supérieure"),
+         TABL_DEPL_INF =SIMP(statut='o',typ=tabl_post_rele,
+                             fr="Table issue de post_releve_t sur les noeuds de la lèvre inférieure"),
+         ABSC_CURV_MAXI=SIMP(statut='f',typ='R',
+                             fr="distance maximum à partir du fond de fissure à utiliser pour le calcul"),  
+         PREC_VIS_A_VIS= SIMP(statut='f',typ='R',defaut=0.001),
+         INST          =SIMP(statut='f',typ='R',max='**'),
+         LIST_INST     =SIMP(statut='f',typ=listr8),
+             b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
+               PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+         INFO          =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         VECT_K1       =SIMP(statut='o',typ='R',max='**',
+                             fr="Vecteur normal au plan de fissure, orienté de la lèvre inférieure vers la lèvre supérieure"),  
+         TITRE         =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 23/01/2002   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=tabl_post_rccm,
+               fr="Vérification des critères de niveau 0 et certains critères de niveau A du RCC-M-B3200 (Edition 1991)",
+               docu="U4.83.11-c",reentrant='n',
+         MATER           =SIMP(statut='o',typ=mater ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="VALE_MAX",into=("VALE_MAX","VALE_INST") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         MAILLAGE        =SIMP(statut='f',typ=maillage),
+         OPTION          =SIMP(statut='o',typ='TXM',max='**',
+                               into=("PM_PB",
+                                     "SN",
+                                     "FATIGUE_SPMAX",
+                                     "FATIGUE_ZH210"
+                                     ) ),
+         SEGMENT         =FACT(statut='o',min=01,max='**',fr="Segment sur lequel s effectue le depouillement",
+           regles=(AU_MOINS_UN('CHEMIN','GROUP_NO','NOEUD'),
+                   EXCLUS('CHEMIN','GROUP_NO'),
+                   EXCLUS('CHEMIN','NOEUD'),),
+           INTITULE        =SIMP(statut='f',typ='TXM' ),
+           CHEMIN          =SIMP(statut='f',typ=(courbe,surface),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+             b_acce_noeud     =BLOC(condition="(NOEUD != None)or(GROUP_NO != None)",
+               PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+         ),
+         TRANSITOIRE     =FACT(statut='o',min=01,max='**',fr="transitoire à dépouiller",
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+           RESULTAT        =SIMP(statut='o',typ=(evol_elas,evol_noli) ),
+           RESU_SIGM_THER  =SIMP(statut='f',typ=(evol_elas,evol_noli),fr="résultat sous chargement thermique seul" ),
+           NB_OCCUR        =SIMP(statut='f',typ='I',defaut= 1,fr="nombre d occurences réelles de ce transitoire" ),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("SIEF_ELNO_ELGA","SIGM_ELNO_DEPL") ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ),
+           b_inst          =BLOC(condition = "(INST != None) or (LIST_INST != None)" ,
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+           ), 
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+# ======================================================================
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE G8BHHXD X.DESROCHES
+POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=tabl_post_rele,docu="U4.81.21-d",reentrant='n',
+         ACTION          =FACT(statut='o',min=01,max='**',
+           regles=(AU_MOINS_UN('CHEMIN','GROUP_NO','NOEUD'),
+                   EXCLUS('CHEMIN','GROUP_NO'),
+                   EXCLUS('CHEMIN','NOEUD'),
+                   PRESENT_ABSENT('CHEMIN','GROUP_MA','MAILLE'),
+                   UN_PARMI('RESULTAT','CHAM_GD'),            
+                   UN_PARMI('TOUT_CMP','NOM_CMP','INVARIANT','ELEM_PRINCIPAUX','RESULTANTE'),
+                   PRESENT_PRESENT('TRAC_DIR','DIRECTION'),          
+                   PRESENT_PRESENT('TRAC_DIRECTION','DIRECTION'),
+                   ENSEMBLE('MOMENT','POINT'),
+                   PRESENT_PRESENT('MOMENT','RESULTANTE'),
+                   PRESENT_ABSENT('TOUT_CMP','TRAC_DIRECTION','TRAC_NORMALE'),
+                   PRESENT_ABSENT('TOUT_CMP','TRAC_DIR','TRAC_NOR'),
+                   PRESENT_PRESENT('ORIGINE','AXE_Z'),),
+           INTITULE        =SIMP(statut='o',typ='TXM'),  
+           CHEMIN          =SIMP(statut='f',typ=(courbe,surface) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="MODULE",into=("MODULE","REEL","IMAG")),
+           CHAM_GD         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_temp_r,cham_no_pres_r,cham_no_var2_r,
+                                                 cham_elem_sief_r,cham_elem_epsi_r,cham_elem_flux_r,cham_elem_crit_r,
+                                                 cham_elem_ener_r,cham_elem_dbel_r,cham_elem_pres_r,cham_elem_erreur,
+                                                 cham_elem_vari_r,cham_no_depl_c,cham_no_temp_c,cham_no_pres_c,
+                                                 cham_elem_sief_c,cham_elem_epsi_c)),
+           RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_ther,evol_noli,dyna_trans,
+                                                 mode_meca,mode_flamb,mode_acou,base_modale,mode_stat,
+                                                 mult_elas,fourier_elas,dyna_harmo,acou_harmo)),
+           b_sensibilite   =BLOC(condition="RESULTAT != None",
+                                 fr="Définition des paramètres de sensibilité",
+                                 ang="Definition of sensitivity parameters",
+             SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
+                                   fr="Liste des paramètres de sensibilité.",
+                                   ang="List of sensitivity parameters"),),
+
+           b_extrac        =BLOC(condition = "RESULTAT != None",fr="extraction des résultats",
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','NUME_MODE','LIST_MODE',         
+                            'INST','LIST_INST','FREQ','LIST_FREQ','NOEUD_CMP','NOM_CAS'), ),           
+             NOM_CHAM        =SIMP(statut='o',typ='TXM' ),  
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),  
+             LIST_ORDRE      =SIMP(statut='f',typ=listis),
+             NUME_MODE       =SIMP(statut='f',typ='I',max='**'),  
+             LIST_MODE       =SIMP(statut='f',typ=listis),
+             NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+             NOM_CAS         =SIMP(statut='f',typ='TXM',max='**'),  
+             FREQ            =SIMP(statut='f',typ='R',max='**'),  
+             LIST_FREQ       =SIMP(statut='f',typ=listr8),
+             INST            =SIMP(statut='f',typ='R',max='**'),  
+             LIST_INST       =SIMP(statut='f',typ=listr8),
+             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),  
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           ),
+           TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),  
+           INVARIANT       =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           ELEM_PRINCIPAUX =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           RESULTANTE      =SIMP(statut='f',typ='TXM',max='**'),  
+           MOMENT          =SIMP(statut='f',typ='TXM',max='**'),  
+           POINT           =SIMP(statut='f',typ='R',max='**'),  
+
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL",
+                                 into=("GLOBAL","LOCAL","POLAIRE","UTILISATEUR","CYLINDRIQUE"),),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',min=3,max=3),  
+           ORIGINE         =SIMP(statut='f',typ='R',min=3,max=3),  
+           AXE_Z           =SIMP(statut='f',typ='R',min=3,max=3),  
+
+           TRAC_NOR        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           TRAC_DIR        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),  
+           TRAC_DIRECTION  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           TRAC_NORMALE    =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           VECT_Y          =SIMP(statut='f',typ='R',max='**'),  
+           MOYE_NOEUD      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           OPERATION       =SIMP(statut='o',typ='TXM',into=("EXTRACTION","MOYENNE","MOYENNE_RCCM"),max=2),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_SIMPLIFIE=OPER(nom="POST_SIMPLIFIE",op=185,sd_prod=tabl_post_simpli,
+                    fr=" ",docu="U4.PS.10-a",reentrant='n',
+         MATER           =SIMP(statut='o',typ=(mater) ),
+         DEF_EQUI        =FACT(statut='f',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',max='**',defaut="UTO_2_3",
+                                 into=("UTO_2_3",) ),
+           EPAIS           =SIMP(statut='o',typ='R'),  
+           LONG_FISS       =SIMP(statut='o',typ='R'),  
+           LONG_LIGA_INT   =SIMP(statut='o',typ='R'),  
+           DEXT            =SIMP(statut='o',typ='R'),  
+           TEMP_ANALYSE    =SIMP(statut='f',typ='R'),  
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 07/02/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-c",reentrant='f',
+                fr="Calcul des volumes d'usure et des profondeurs d'usure",
+         regles=(UN_PARMI('RESU_GENE','PUIS_USURE'),
+                 PRESENT_PRESENT('RESU_GENE','NOEUD'),
+                 UN_PARMI('INST','LIST_INST'),),
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           TABL_USURE      =SIMP(statut='f',typ=tabl_post_usur),
+           INST_INIT       =SIMP(statut='f',typ='R'),  
+                         ),
+         RESU_GENE       =SIMP(statut='f',typ=tran_gene),
+         NOEUD           =SIMP(statut='f',typ=no,max=1),
+         INST_INIT       =SIMP(statut='f',typ='R',defaut=-1.0E+0),  
+         INST_FIN        =SIMP(statut='f',typ='R'),  
+         NB_BLOC         =SIMP(statut='f',typ='I',defaut= 1 ),  
+         PUIS_USURE      =SIMP(statut='f',typ='R'),  
+         LOI_USURE       =SIMP(statut='o',typ='TXM',into=("ARCHARD","KWU_EPRI","EDF_MZ")),
+         b_archard       =BLOC(condition = "LOI_USURE == 'ARCHARD'",
+           regles=(EXCLUS('MATER_USURE','OBSTACLE'),
+                   EXCLUS('MOBILE','USURE_OBST'),),
+           MOBILE          =FACT(statut='f',min=01,max=01,
+             COEF_USURE      =SIMP(statut='o',typ='R'), 
+           ),   
+           OBSTACLE        =FACT(statut='f',min=01,max=01,
+             COEF_USURE      =SIMP(statut='o',typ='R'), 
+           ),   
+           MATER_USURE     =SIMP(statut='f',typ='TXM'),  
+           USURE_OBST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         ),
+         b_kwu_epri        =BLOC(condition = "LOI_USURE == 'KWU_EPRI'",
+           regles=(UN_PARMI('MOBILE','MATER_USURE'), 
+                   EXCLUS('MATER_USURE','OBSTACLE'),
+                   EXCLUS('MOBILE','USURE_OBST'),),
+           MOBILE          =FACT(statut='f',min=01,max=01,
+             COEF_FNOR       =SIMP(statut='f',typ='R'),  
+             COEF_VTAN       =SIMP(statut='f',typ='R'),  
+             COEF_USURE      =SIMP(statut='f',typ='R'),  
+             COEF_K          =SIMP(statut='f',typ='R',defaut=5.0E+0),  
+             COEF_C          =SIMP(statut='f',typ='R',defaut=10.0E+0),  
+           ),   
+           OBSTACLE        =FACT(statut='f',min=01,max=01,
+             COEF_FNOR       =SIMP(statut='f',typ='R' ),  
+             COEF_VTAN       =SIMP(statut='f',typ='R' ),  
+             COEF_USURE      =SIMP(statut='o',typ='R'), 
+             COEF_K          =SIMP(statut='f',typ='R',defaut=5.0E+0),  
+             COEF_C          =SIMP(statut='f',typ='R',defaut=10.0E+0),  
+           ),   
+           MATER_USURE     =SIMP(statut='f',typ='TXM'),  
+           USURE_OBST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           FNOR_MAXI       =SIMP(statut='f',typ='R' ),  
+           VTAN_MAXI       =SIMP(statut='f',typ='R' ),  
+         ),
+         b_edf_mz          =BLOC(condition = "LOI_USURE == 'EDF_MZ'",
+           regles=(UN_PARMI('MOBILE','MATER_USURE'), 
+                   EXCLUS('MATER_USURE','OBSTACLE'),
+                   EXCLUS('MOBILE','USURE_OBST'),),
+           MOBILE          =FACT(statut='f',min=01,max=01,
+             COEF_USURE      =SIMP(statut='f',typ='R',defaut=1.0E-13),  
+             COEF_B          =SIMP(statut='f',typ='R',defaut=1.2E+0),  
+             COEF_N          =SIMP(statut='f',typ='R',defaut=2.44E-8),  
+             COEF_S          =SIMP(statut='f',typ='R',defaut=1.14E-16),  
+           ),   
+           OBSTACLE        =FACT(statut='f',min=01,max=01,
+             COEF_USURE      =SIMP(statut='o',typ='R',defaut=1.0E-13), 
+             COEF_B          =SIMP(statut='f',typ='R',defaut=1.2E+0),  
+             COEF_N          =SIMP(statut='f',typ='R',defaut=2.44E-8),  
+             COEF_S          =SIMP(statut='f',typ='R',defaut=1.14E-16),  
+           ),   
+           MATER_USURE     =SIMP(statut='f',typ='TXM'),  
+           USURE_OBST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         ),
+         SECTEUR         =FACT(statut='f',min=01,max='**',
+           CONTACT         =SIMP(statut='f',typ='TXM',into=("TUBE_BAV","TUBE_ALESAGE","TUBE_4_ENCO",  
+                                                            "GRAPPE_ALESAGE","TUBE_3_ENCO","TUBE_TUBE", 
+                                                            "GRAPPE_1_ENCO","GRAPPE_2_ENCO")),
+           COEF_USUR_MOBILE=SIMP(statut='f',typ='R'),  
+           COEF_USUR_OBST  =SIMP(statut='f',typ='R'),  
+           ANGL_INIT       =SIMP(statut='f',typ='R'),  
+           ANGL_FIN        =SIMP(statut='f',typ='R'),  
+         ),
+         CONTACT         =SIMP(statut='f',typ='TXM',into=("TUBE_BAV","TUBE_ALESAGE","TUBE_4_ENCO",    
+                                                          "GRAPPE_ALESAGE","TUBE_3_ENCO","TUBE_TUBE",        
+                                                          "GRAPPE_1_ENCO","GRAPPE_2_ENCO")),
+         RAYON_MOBILE    =SIMP(statut='f',typ='R'),  
+         RAYON_OBST      =SIMP(statut='f',typ='R'),  
+         LARGEUR_OBST    =SIMP(statut='f',typ='R'),  
+         ANGL_INCLI      =SIMP(statut='f',typ='R'),  
+         ANGL_ISTHME     =SIMP(statut='f',typ='R'),  
+         ANGL_IMPACT     =SIMP(statut='f',typ='R'),  
+         INST            =SIMP(statut='f',typ='R',max='**'),  
+         LIST_INST       =SIMP(statut='f',typ=listr8),
+         COEF_INST       =SIMP(statut='f',typ='R',defaut=1.0E+0),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POST_ZAC=OPER(nom="POST_ZAC",op= 175,sd_prod=mult_elas,docu="U4.83.21-b",reentrant='n',
+              fr="Donne l'état adapté ou accommodé d'une structure sous chargement cyclique élastique affine ou non",
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         EXCIT           =FACT(statut='o',min=01,max='**',
+           CHARGE          =SIMP(statut='o',typ=char_meca),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",into=("FIXE_CSTE",)),
+         ),
+         EVOL_ELAS       =SIMP(statut='o',typ=evol_elas),
+         b_evol_elas     =BLOC(condition="EVOL_ELAS != None",
+           regles=(UN_PARMI('NUME_ORDRE','LIST_INST','INST'),),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),  
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           INST            =SIMP(statut='f',typ='R',max='**'),  
+         ),
+         TEMP_ZAC        =SIMP(statut='f',typ='R',defaut=0.0E+0),  
+         EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+         b_evol_noli     =BLOC(condition="EVOL_NOLI != None",
+           INST_MAX        =SIMP(statut='o',typ='R'),  
+         ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),  
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+POURSUITE=MACRO(nom="POURSUITE",op=0,repetable='n',fr="Poursuite d une étude",
+                docu="U4.11.03-f1",sd_prod = ops.POURSUITE,
+                op_init = ops.POURSUITE_context,fichier_ini = 1,
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+                           into=("OUI","NON"),defaut="OUI"),
+         BASE            =FACT(fr="définition des parmètres associés aux bases JEVEUX",
+                               statut='f',min=1,max=3,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           CAS             =SIMP(statut='f',typ='TXM'),
+           NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+           LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+           LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+         ),
+         IMPRESSION      =FACT(statut='f',min=1,max=3,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='o',typ='I'),
+         ),
+         CATALOGUE       =FACT(statut='f',min=1,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+         DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
+                               statut='f',min=1,max=1,
+           JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+                                 statut='f',typ='TXM',into=('TES',)),
+         ),
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=1,max=1,
+           GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
+           TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
+           TAILLE          =SIMP(statut='f',typ='I'),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut=800.),
+           PARTITION       =SIMP(statut='f',typ='R' ),
+         ),
+         CODE            =FACT("définition d un nom pour l'esemble d'une étude",
+                               statut='f',min=1,max=1,
+           NOM             =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I',defaut=15),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+PRE_CHAR_IDEAS=PROC(nom="PRE_CHAR_IDEAS",op=100,docu="U7.01.02-e",
+                    fr="Conversion de conditions aux limites et chargements IDEAS en commandes Aster",
+         UNITE_IDEAS     =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_ASTER     =SIMP(statut='f',typ='I',defaut=21),  
+         MODELE          =SIMP(statut='o',typ=modele),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+PRE_GIBI=PROC(nom="PRE_GIBI",op=49,docu="U7.01.11-f",
+              fr="Conversion d un fichier de maillage GIBI",
+         UNITE_GIBI      =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
+)  ;
+#& MODIF COMMANDE  DATE 17/09/2001   AUTEUR CIBHHGB G.BERTRAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+PRE_GMSH=PROC(nom="PRE_GMSH",op=47,docu="U7.01.01-f",
+               fr="Conversion d un fichier universel GMSH au format Aster",
+         UNITE_GMSH      =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47,docu="U7.01.01-f",
+               fr="Conversion d un fichier universel IDEAS-SUPERTAB au format Aster",
+         UNITE_IDEAS     =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+PROCEDURE=PROC(nom="PROCEDURE",op=-3, docu="U4.13.03-e",
+          fr="Nommer le fichier de commandes secondaires",
+          NOM  =SIMP(statut='f',typ='TXM',defaut=" "),
+) ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def prod_matr_cham_prod(MATR_ASSE,**args):
+  if AsType(MATR_ASSE) == matr_asse_depl_r : return cham_no_depl_r
+  if AsType(MATR_ASSE) == matr_asse_depl_c : return cham_no_depl_c
+  if AsType(MATR_ASSE) == matr_asse_temp_r : return cham_no_temp_r
+  if AsType(MATR_ASSE) == matr_asse_pres_c : return cham_no_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=prod_matr_cham_prod,
+                    fr="Effectuer le produit d une matrice par un vecteur",
+                    docu="U4.72.06-b",reentrant='n',
+         MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_pres_c ) ),
+         CHAM_NO         =SIMP(statut='o',typ=(cham_no_depl_r,cham_no_depl_c,cham_no_temp_r,cham_no_pres_c ) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 12/09/2001   AUTEUR MCOURTOI M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def proj_champ_prod(RESULTAT=None,CHAM_NO_REFE=None,**args ):
+    if AsType(RESULTAT)     == evol_ther      : return evol_ther
+    if AsType(RESULTAT)     == evol_elas      : return evol_elas
+    if AsType(RESULTAT)     == evol_noli      : return evol_noli
+    if AsType(RESULTAT)     == evol_char      : return evol_char
+    if AsType(CHAM_NO_REFE) == cham_no_depl_r : return cham_no_depl_r
+    if AsType(CHAM_NO_REFE) == cham_no_depl_c : return cham_no_depl_c
+    if AsType(CHAM_NO_REFE) == cham_no_pres_c : return cham_no_pres_c
+    if AsType(CHAM_NO_REFE) == cham_no_temp_r : return cham_no_temp_r
+    if AsType(CHAM_NO_REFE) == cham_no_epsi_r : return cham_no_epsi_r
+    if AsType(CHAM_NO_REFE) == cham_no_sief_r : return cham_no_sief_r
+    if AsType(CHAM_NO_REFE) == cham_no_flux_r : return cham_no_flux_r
+    raise AsException("type de concept resultat non prevu")
+
+PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,docu="U4.72.05-c1",reentrant='n',
+                fr="Projection d un champ aux noeuds sur les noeuds d un autre maillage",
+#
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="NUAGE_DEG_1",
+                               into=("NUAGE_DEG_0","NUAGE_DEG_1","ELEM",) ),
+         b_nuage         =BLOC(condition="(METHODE=='NUAGE_DEG_1') or (METHODE=='NUAGE_DEG_0')",
+                               fr="Lissage d un nuage de points",
+           CHAM_NO         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_depl_c,cham_no_pres_c,cham_no_temp_r,
+                                                 cham_no_epsi_r,cham_no_sief_r,cham_no_flux_r)),
+           CHAM_NO_REFE    =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_depl_c,cham_no_pres_c,cham_no_temp_r,
+                                                 cham_no_epsi_r,cham_no_sief_r,cham_no_flux_r)),
+         ),
+         b_elem          =BLOC(condition="METHODE=='ELEM'",
+                              fr="Utilisation des fonctions de forme",
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','LIST_INST','LIST_FREQ','LIST_ORDRE'), ),
+           RESULTAT        =SIMP(statut='f',typ=(evol_ther,evol_elas,evol_noli,evol_char) ),
+           MODELE_1        =SIMP(statut='f',typ=modele),
+           MODELE_2        =SIMP(statut='f',typ=modele),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           FREQ            =SIMP(statut='f',typ='R',max='**' ),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8),
+         ),
+
+         VIS_A_VIS       =FACT(statut='f',min=01,max='**',
+           regles=(AU_MOINS_UN('TOUT_1','GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   AU_MOINS_UN('TOUT_2','GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),),
+           TOUT_1          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           TOUT_2          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+)  ;
+#& MODIF COMMANDE  DATE 26/09/2001   AUTEUR CIBHHPD D.NUNEZ 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def matr_asse_gene_prod(MATR_ASSE,MATR_ASSE_GENE,**args):
+  if AsType(MATR_ASSE) == matr_asse_depl_r  : return matr_asse_gene_r
+  if AsType(MATR_ASSE_GENE) == matr_asse_gene_r  : return matr_asse_gene_r
+  if AsType(MATR_ASSE) == matr_asse_depl_c  : return matr_asse_gene_c
+  if AsType(MATR_ASSE_GENE) == matr_asse_gene_c  : return matr_asse_gene_c
+  raise AsException("type de concept resultat non prevu")
+
+PROJ_MATR_BASE=OPER(nom="PROJ_MATR_BASE",op=  71,sd_prod=matr_asse_gene_prod,
+                    fr="Projection d une matrice assemblée sur une base (modale ou de RITZ)",
+                    docu="U4.63.12-e",reentrant='n',
+         regles=(UN_PARMI('MATR_ASSE','MATR_ASSE_GENE'),),            
+         BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene ) ),
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999 ),
+         MATR_ASSE       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c) ),
+         MATR_ASSE_GENE  =SIMP(statut='f',typ=(matr_asse_gene_r,matr_asse_gene_c) ),
+)  ;
+
+#& MODIF COMMANDE  DATE 19/12/2001   AUTEUR CIBHHAB N.RAHNI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def proj_mesu_modal_prod(MESURE,**args):
+     vale=MESURE['NOM_PARA']
+     if  vale == 'INST'   : return tran_gene
+     raise AsException("type de concept resultat non prevu")
+
+PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,
+                     sd_prod=proj_mesu_modal_prod,
+                     docu="U4.73.01-a",reentrant='n',
+                     fr="Extrapolation de resultats experimentaux sur un modele numerique en dynamique",
+
+# commentaire C. Durand-13/10/2000 :
+#le mot cle NOM_PARA, par construction, vaut tjs INST : donc on retourne TRAN_GENE a chaque fois
+#def proj_mesu_modal_prod(**args):
+#     vale=args['MESURE'].get_child('NOM_PARA').get_valeur()
+#     if  vale == 'INST'   : return tran_gene
+#     raise AsException("type de concept resultat non prevu")
+#PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,sd_prod=proj_mesu_modal_prod,)
+
+         MODELE          =SIMP(statut='f',typ=(modele) ),
+         MASS_GENE       =SIMP(statut='o',typ=(matr_asse_gene_r) ),
+         RIGI_GENE       =SIMP(statut='o',typ=(matr_asse_gene_r) ),
+         MESURE          =FACT(statut='o',min=01,max=01,
+           MODELE          =SIMP(statut='o',typ=(modele) ),
+           MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
+           CARA_ELEM       =SIMP(statut='o',typ=(cara_elem) ),
+           UNITE           =SIMP(statut='f',typ='I',defaut= 33 ),  
+           NOM_PARA        =SIMP(statut='f',typ='TXM',defaut="INST",into=("INST",) ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","SIGM_NOEU_DEPL","EPSI_NOEU_DEPL",) ),
+                         ),
+         REGULARISATION  =FACT(statut='f',min=01,max=01,
+      regles=(UN_PARMI('COEF_PONDER','COEF_PONDER_F', ),),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="TIKHONOV",into=("TIKHONOV",) ),
+           NORM_MIN        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+           COEF_PONDER     =SIMP(statut='f',typ='R',max='**' ),  
+           COEF_PONDER_F   =SIMP(statut='f',typ=(fonction),max='**' ),
+                         ),
+                       )  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=tabl_intsp,docu="U4.63.14-c",reentrant='n',
+                    fr="Projection d un ou plusieurs spectres de turbulenc sur un ensemble de bases modales ",
+      regles=(UN_PARMI('BASE_ELAS_FLUI','MODE_MECA','CHAM_NO'),
+              ENSEMBLE('FREQ_INIT','FREQ_FIN','NB_POIN'),),
+         SPEC_TURB       =SIMP(statut='o',typ=spectre,max='**' ),
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         CHAM_NO         =SIMP(statut='f',typ=cham_no_depl_r ),
+         FREQ_INIT       =SIMP(statut='f',typ='R',val_min=0.E+0 ),  
+         FREQ_FIN        =SIMP(statut='f',typ='R',val_min=0.E+0 ),  
+         NB_POIN         =SIMP(statut='f',typ='I' ),  
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG")),
+         GROUP_MA        =SIMP(statut='f',typ=grma),
+#  Quel est le type attendu derriere  MODELE_INTERFACE         
+         MODELE_INTERFACE=SIMP(statut='f',typ=modele),
+         VECT_X          =SIMP(statut='f',typ='R',min=3,max=3 ),  
+         VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3 ),  
+         ORIG_AXE        =SIMP(statut='f',typ='R',min=3,max=3 ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op=  72,sd_prod=vect_asse_gene,
+                    fr="Projection d un vecteur assemblé sur une base (modale ou de RITZ)",
+                    docu="U4.63.13-e",reentrant='n',
+         regles=(UN_PARMI('VECT_ASSE','VECT_ASSE_GENE'),),              
+         BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene ) ),
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999 ),
+         TYPE_VECT       =SIMP(statut='f',typ='TXM',defaut="FORC"),
+         VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+         VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=tabl_reca_weib,
+                     fr=" ",docu="U4.82.06-a",reentrant='n',
+         LIST_PARA       =SIMP(statut='o',typ='TXM',max='**',into=("SIGM_REFE","M",) ),
+         RESU            =FACT(statut='o',min=01,max='**',
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST',),
+                   AU_MOINS_UN('TOUT','GROUP_MA','MAILLE', ),),
+           EVOL_NOLI       =SIMP(statut='o',typ=(evol_noli) ),
+           MODELE          =SIMP(statut='o',typ=(modele) ),
+           CHAM_MATER      =SIMP(statut='o',typ=(cham_mater) ),
+           TEMPE           =SIMP(statut='f',typ='R' ),
+           LIST_INST_RUPT  =SIMP(statut='o',typ='R',max='**' ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.E0 ),
+                         ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="SIGM_ELGA",into=("SIGM_ELGA","SIGM_ELMOY",) ),
+         CORR_PLAST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MAXI_VRAI",into=("MAXI_VRAI","REGR_LINE",) ),
+         INCO_GLOB_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
+                       )  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE MCOURTOI M.COURTOIS
+def recu_fonction_prod(RESULTAT=None,TABLE=None,OBSTACLE=None,
+                       RESU_GENE=None,BASE_ELAS_FLUI=None,CHAM_GD=None,
+                       TYPE_RESU=None,**args):
+  if AsType(RESULTAT) == dyna_harmo : return fonction_c
+#  On ne sait pas interpreter les deux conditions suivantes
+  if TABLE != None :
+     if TYPE_RESU != None :
+        if TYPE_RESU == "FONCTION_C" : return fonction_c
+        if TYPE_RESU == "FONCTION"   : return fonction
+     else:
+        return fonction
+  if RESU_GENE      != None         : return fonction
+  if BASE_ELAS_FLUI != None         : return fonction
+  if RESULTAT       != None         : return fonction
+  if CHAM_GD        != None         : return fonction
+  if OBSTACLE       != None         : return fonction
+  raise AsException("type de concept resultat non prevu")
+
+RECU_FONCTION=OPER(nom="RECU_FONCTION",op=  90,sd_prod=recu_fonction_prod,
+                   fr="Extraire sous forme d une fonction, l évolution temporelle d une composante d un champ ou d une table",
+                   docu="U4.32.03-e1",reentrant='n',
+         regles=(UN_PARMI('CHAM_GD','RESULTAT','RESU_GENE','TABLE','BASE_ELAS_FLUI','OBSTACLE'),),
+
+         CHAM_GD         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_temp_r,cham_no_pres_r,cham_elem_sief_r,
+                                               cham_elem_vari_r,cham_elem_epsi_r,cham_elem_flux_r,
+                                               cham_elem_pres_r,cham_elem_meta_r ) ),
+         RESULTAT        =SIMP(statut='f',typ=(evol_elas,dyna_trans,evol_noli,evol_ther,dyna_harmo ) ),
+         RESU_GENE       =SIMP(statut='f',typ=tran_gene),
+#  concept table à créer
+         TABLE           =SIMP(statut='f',typ=table),
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu),
+         REPERE          =SIMP(statut='f',typ='TXM',into=("POLAIRE","GLOBAL") ),
+         OBSTACLE        =SIMP(statut='f',typ=obstacle),
+
+         b_tran_gene = BLOC ( condition = "RESU_GENE != None",
+                              fr="Récupération de la fonction concernant les chocs à partir d un concept TRAN_GENE",
+            regles=(PRESENT_PRESENT('SOUS_STRUC','INTITULE'),
+                    PRESENT_ABSENT('MULT_APPUI','CORR_STAT'),),
+             MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+             CORR_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+             ACCE_MONO_APPUI =SIMP(statut='f',typ=fonction),
+             PARA_X          =SIMP(statut='f',typ='TXM' ),
+             PARA_Y          =SIMP(statut='f',typ='TXM' ),
+             SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+             LIST_PARA       =SIMP(statut='f',typ=listr8 ),
+             INTITULE        =SIMP(statut='f',typ='TXM' ),
+         ),
+         b_base_elas_flui = BLOC ( condition = "BASE_ELAS_FLUI != None",
+                                   fr="Récupération de la fonction à partir d un concept melasflu",
+           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE'),),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           NUME_MODE       =SIMP(statut='o',typ='I' ),
+           PARA_X          =SIMP(statut='o',typ='TXM',into=("VITE_FLU",) ),
+           PARA_Y          =SIMP(statut='o',typ='TXM',into=("FREQ","AMOR") ),
+         ),
+         b_table = BLOC ( condition = "TABLE != None",fr="Récupération de la fonction à partir d un concept table",
+           regles=(UN_PARMI('PARA_X','NOM_PARA_TABL'),
+                   PRESENT_PRESENT('PARA_X','PARA_Y'),),
+           PARA_X          =SIMP(statut='f',typ='TXM',
+                                 fr="1ère colonne de la table qui définit la fonction à récupérer", ),
+           PARA_Y          =SIMP(statut='f',typ='TXM',
+                                 fr="2ème colonne de la table qui définit la fonction à récupérer", ),
+           NOM_PARA_TABL   =SIMP(statut='f',typ='TXM',into=("FONCTION",),
+                                 fr="Nom du paramètre de la table à qui est associé la fonction" ),
+           b_nom_para_tabl = BLOC (condition = "NOM_PARA_TABL != None",
+             TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="FONCTION",into=("FONCTION","FONCTION_C") ),
+           ),
+
+           FILTRE          =FACT(statut='f',min=1,max='**',
+              NOM_PARA        =SIMP(statut='o',typ='TXM' ),
+              CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",
+                                    into=("EQ","LT","GT","NE","LE","GE","VIDE",
+                                          "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI") ),
+              b_vale          =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+                 regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+                 VALE            =SIMP(statut='f',typ='R' ),
+                 VALE_I          =SIMP(statut='f',typ='I' ),
+                 VALE_C          =SIMP(statut='f',typ='C' ),
+                 VALE_K          =SIMP(statut='f',typ='TXM' ),),
+
+              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),
+         ),
+# RESULTAT
+         b_resu = BLOC ( condition = "RESULTAT != None", fr="Opérandes en cas de RESULTAT",
+           regles=(
+#    A voir par Mathieu Courtois : il existe de tests (SDNX300B) qui ne satisfont pas ce UN_PARMI
+#           UN_PARMI('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','TOUT_INST','LIST_INST','FREQ','LIST_FREQ'),
+                   AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD','NOEUD_CHOC','GROUP_NO_CHOC','NOM_PARA_RESU'),
+                   PRESENT_PRESENT('MAILLE','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_MA','NOM_CMP'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                   PRESENT_PRESENT('POINT','NOM_CMP'),
+                   EXCLUS('POINT','NOEUD'),
+                   EXCLUS('GROUP_MA','MAILLE'),
+                   EXCLUS('GROUP_NO','NOEUD'),
+                   EXCLUS('NOEUD_CHOC','GROUP_NO_CHOC'),
+                   UN_PARMI('NOM_CHAM','NOM_PARA_RESU'),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM' ),
+           NOM_PARA_RESU   =SIMP(statut='f',typ='TXM' ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+           TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+           b_prec = BLOC ( condition = "(INST != None) or (LIST_INST != None) or (FREQ != None) or (LIST_FREQ != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             INTERP_NUME     =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN") ),
+           ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+
+           MAILLE          =SIMP(statut='f',typ=ma),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+           POINT           =SIMP(statut='f',typ='I' ),
+           SOUS_POINT      =SIMP(statut='f',typ='I' ),
+           NOEUD_CHOC      =SIMP(statut='f',typ=no),
+           GROUP_NO_CHOC   =SIMP(statut='f',typ=grno),
+         ),
+# RESU_GENE
+         b_resu_gene = BLOC ( condition = "RESU_GENE != None", fr="Opérandes en cas de RESU_GENE",
+#    A voir par Mathieu Courtois : il existe de tests (SDNX300B) qui ne satisfont pas ce UN_PARMI
+#           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','TOUT_INST','LIST_INST','FREQ','LIST_FREQ'),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE","PTEM") ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis ),
+           TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8 ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+           b_prec = BLOC ( condition = "(INST != None) or (LIST_INST != None) or (FREQ != None) or (LIST_FREQ != None)",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             INTERP_NUME     =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN") ),
+           ),
+           b_local_cham = BLOC ( condition = "NOM_CHAM!='PTEM'", fr="Opérandes de localisation du champ",
+             regles=(AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD','NOEUD_CHOC','GROUP_NO_CHOC'),
+                     PRESENT_PRESENT('MAILLE','NOM_CMP'),
+                     PRESENT_PRESENT('GROUP_MA','NOM_CMP'),
+                     PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                     PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                     PRESENT_PRESENT('POINT','NOM_CMP'),
+                     EXCLUS('POINT','NOEUD'),
+                     EXCLUS('GROUP_MA','MAILLE'),
+                     EXCLUS('GROUP_NO','NOEUD'),
+                     EXCLUS('NOEUD_CHOC','GROUP_NO_CHOC'),),
+             NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+
+             MAILLE          =SIMP(statut='f',typ=ma),
+             GROUP_MA        =SIMP(statut='f',typ=grma),
+             NOEUD           =SIMP(statut='f',typ=no),
+             GROUP_NO        =SIMP(statut='f',typ=grno),
+             POINT           =SIMP(statut='f',typ='I' ),
+             SOUS_POINT      =SIMP(statut='f',typ='I' ),
+             NOEUD_CHOC      =SIMP(statut='f',typ=no),
+             GROUP_NO_CHOC   =SIMP(statut='f',typ=grno),
+           ),
+         ),
+# CHAM_GD
+         b_cham_gd = BLOC ( condition = "(CHAM_GD != None)", fr="Opérandes en cas de CHAM_GD",
+
+           regles=(AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD','NOEUD_CHOC','GROUP_NO_CHOC'),
+                   PRESENT_PRESENT('MAILLE','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_MA','NOM_CMP'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                   PRESENT_PRESENT('POINT','NOM_CMP'),
+                   EXCLUS('POINT','NOEUD'),
+                   EXCLUS('GROUP_MA','MAILLE'),
+                   EXCLUS('GROUP_NO','NOEUD'),
+                   EXCLUS('NOEUD_CHOC','GROUP_NO_CHOC'),),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+
+           MAILLE          =SIMP(statut='f',typ=ma),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+           POINT           =SIMP(statut='f',typ='I' ),
+           SOUS_POINT      =SIMP(statut='f',typ='I' ),
+           NOEUD_CHOC      =SIMP(statut='f',typ=no),
+           GROUP_NO_CHOC   =SIMP(statut='f',typ=grno),
+         ),
+###
+         NOM_PARA        =SIMP(statut='f',typ='TXM',
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC") ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+RECU_GENE=OPER(nom="RECU_GENE",op=  76,sd_prod=vect_asse_gene,docu="U4.71.03-e",reentrant='n',
+               fr="Récupération d un champ de grandeur à partir d un résultat en coordonnées généralisées",
+         RESU_GENE       =SIMP(statut='o',typ=tran_gene ),
+         INST            =SIMP(statut='o',typ='R' ),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE") ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF" ,into=("ABSOLU","RELATIF") ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+)  ;
+#& MODIF COMMANDE  DATE 19/12/2001   AUTEUR PBBHHPB P.BADEL 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+RECU_TABLE=OPER(nom="RECU_TABLE",op= 174,sd_prod=table,
+                fr=" ",docu="U4.71.02-a1",reentrant='n',
+         CO              =SIMP(statut='o',typ=assd),
+         regles=(PRESENT_ABSENT('NOM_TABLE','NOM_PARA')),
+         NOM_TABLE       =SIMP(statut='f',typ='TXM' ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM' ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def reso_grad_prod(MATR_ASSE,**args ):
+  if AsType(MATR_ASSE) == matr_asse_depl_r : return cham_no_depl_r
+  if AsType(MATR_ASSE) == matr_asse_temp_r : return cham_no_temp_r
+  if AsType(MATR_ASSE) == matr_asse_pres_r : return cham_no_pres_r
+  raise AsException("type de concept resultat non prevu")
+
+RESO_GRAD=OPER(nom="RESO_GRAD",op=  84,sd_prod=reso_grad_prod,
+               fr="Résolution par la méthode du gradient conjugué préconditionné",
+               docu="U4.55.04-e",reentrant='f',
+         MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+         CHAM_NO         =SIMP(statut='o',typ=(cham_no_depl_r,cham_no_temp_r,cham_no_pres_r ) ),
+         CHAM_CINE       =SIMP(statut='f',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_r ) ),
+         MATR_FACT       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+         NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),  
+         REPRISE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1E-6 ),  
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+def reso_ldlt_prod(CHAM_NO,**args ):
+  if AsType(CHAM_NO) == cham_no_temp_r : return cham_no_temp_r
+  if AsType(CHAM_NO) == cham_no_depl_r : return cham_no_depl_r
+  if AsType(CHAM_NO) == cham_no_pres_r : return cham_no_pres_r
+  if AsType(CHAM_NO) == cham_no_temp_c : return cham_no_temp_c
+  if AsType(CHAM_NO) == cham_no_depl_c : return cham_no_depl_c
+  if AsType(CHAM_NO) == cham_no_pres_c : return cham_no_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+RESO_LDLT=OPER(nom="RESO_LDLT",op=15,sd_prod=reso_ldlt_prod,reentrant='f',
+               fr="Résolution en place ou hors place d un système factorisé",docu="U4.55.02-f",
+         MATR_FACT       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,
+                                               matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ),
+         CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_r,
+                                               cham_no_temp_c,cham_no_depl_c,cham_no_pres_c) ),
+         CHAM_CINE       =SIMP(statut='f',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_c) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+def rest_base_phys_prod(RESU_GENE,RESULTAT,**args ):
+  if AsType(RESU_GENE) == tran_gene : return dyna_trans
+  if AsType(RESU_GENE) == mode_gene : return mode_meca
+  if AsType(RESU_GENE) == mode_cycl : return mode_meca
+  if AsType(RESU_GENE) == harm_gene : return dyna_harmo
+  if AsType(RESULTAT)  == mode_meca : return mode_meca
+  raise AsException("type de concept resultat non prevu")
+
+REST_BASE_PHYS=OPER(nom="REST_BASE_PHYS",op=  75,sd_prod=rest_base_phys_prod,
+                    fr="Restituer dans la base physique des résultats en coordonnées généralisées",
+                    docu="U4.63.21-e",reentrant='n',
+        regles=(UN_PARMI('RESU_GENE','RESULTAT'),
+                EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','TOUT_INST'),
+                EXCLUS('TOUT_INST','NUME_ORDRE','INST','LIST_INST','TOUT_ORDRE'),
+#  Doc U à revoir
+                PRESENT_ABSENT('MULT_APPUI','CORR_STAT'),
+                EXCLUS('MULT_APPUI','NOEUD','GROUP_NO'),
+                EXCLUS('CORR_STAT','NOEUD','GROUP_NO'),             
+                EXCLUS('NOEUD','GROUP_NO'), 
+                PRESENT_PRESENT('RESULTAT','SQUELETTE'),
+                PRESENT_PRESENT('ACCE_MONO_APPUI','DIRECTION'),),
+         RESU_GENE       =SIMP(statut='f',typ=(tran_gene,mode_gene,mode_cycl,harm_gene ) ),
+         RESULTAT        =SIMP(statut='f',typ=mode_meca ),
+         
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),  
+         TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         INST            =SIMP(statut='f',typ='R',max='**' ),  
+         LIST_INST       =SIMP(statut='f',typ=listr8 ),
+         FREQ            =SIMP(statut='f',typ='R',max='**' ),  
+         LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
+         b_prec_crit     =BLOC(condition = "INST != None or LIST_INST != None or FREQ != None or LIST_FREQ != None",
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
+         ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+         
+         MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         CORR_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',max=8,defaut="ACCE",   
+                               into=("DEPL","VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO_DEPL","SIPO_ELNO_DEPL",                 
+                                     "SIGM_ELNO_DEPL","FORC_NODA",) ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         NOEUD           =SIMP(statut='f',typ=no,max='**'),
+         ACCE_MONO_APPUI =SIMP(statut='f',typ=fonction),
+         DIRECTION       =SIMP(statut='f',typ='R',max='**' ),
+
+         SQUELETTE       =SIMP(statut='f',typ=squelette ),
+         SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),  
+         SECTEUR         =SIMP(statut='f',typ='I',defaut= 1 ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 28/03/2001   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=tabl_intsp,
+                    docu="U4.63.22-c",reentrant='n',
+         regles=(AU_MOINS_UN('BASE_ELAS_FLUI','MODE_MECA'),),
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         BANDE           =SIMP(statut='f',typ='R',min=02,max=02 ),  
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),  
+         INTE_SPEC_GENE  =SIMP(statut='o',typ=tabl_intsp ),
+         NOEUD           =SIMP(statut='o',typ=no,max='**'),
+         NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',max=07,    
+                               into=("DEPL","VITE","ACCE","EFGE_ELNO_DEPL",      
+                                     "SIPO_ELNO_DEPL","SIGM_ELNO_DEPL","FORC_NODA") ),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc), ),
+         EXCIT           =FACT(statut='f',max=01,
+           NOEUD           =SIMP(statut='o',typ=no,max='**'),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
+         ),
+         MOUVEMENT       =SIMP(statut='f',typ='TXM',defaut="ABSOLU",into=("RELATIF","ABSOLU","DIFFERENTIEL") ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="DIAG_DIAG",    
+                               into=("DIAG_TOUT","DIAG_DIAG","TOUT_TOUT","TOUT_DIAG") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+RETOUR=PROC(nom="RETOUR",op= -2,docu="U4.13.02-e",
+            fr="Retour au fichier de commandes appelant", 
+) ;
+#& MODIF COMMANDE  DATE 30/01/2002   AUTEUR VABHHTS J.TESELET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+#  RESPONSABLE ADBHHVV V.CANO
+STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
+                   fr="Analyse mécanique statique non linéaire",
+                   docu="U4.51.03-e1",reentrant='f',
+         regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS'),),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='o',min=1,max='**',
+           CHARGE          =SIMP(statut='o',typ=char_meca),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
+         ),
+         VARI_COMM           =FACT(statut='f',
+           regles=(AU_MOINS_UN('SECH','IRRA','HYDR'),),
+           IRRA     =SIMP(statut='f',typ=evol_varc),
+           SECH     =SIMP(statut='f',typ=evol_ther),
+           HYDR     =SIMP(statut='f',typ=evol_ther),
+         ),
+         COMP_INCR       =FACT(statut='f',min=1,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="VMIS_ISOT_TRAC",
+                                 into=( "ELAS",
+                                        "VMIS_ISOT_TRAC",
+                                        "VMIS_ISOT_LINE",
+                                        "VMIS_ECMI_TRAC",
+                                        "VMIS_ECMI_LINE",
+                                        "LABORD_1D",
+                                        "ENDO_LOCAL",
+                                        "ENDO_FRAGILE",
+                                        "BETON_ENDO_LOCAL",
+                                        "RUPT_FRAG",
+                                        "PLAS_GRAD_LINE",
+                                        "PLAS_GRAD_TRAC",
+                                        "DURC_GRAD",
+                                        "META_P_IL",
+                                        "META_P_IL_PT",
+                                        "META_P_IL_RE",
+                                        "META_P_IL_PT_RE",
+                                        "META_V_IL",
+                                        "META_V_IL_PT",
+                                        "META_V_IL_RE",
+                                        "META_V_IL_PT_RE",
+                                        "META_P_INL",
+                                        "META_P_INL_PT",
+                                        "META_P_INL_RE",
+                                        "META_P_INL_PT_RE",
+                                        "META_V_INL",
+                                        "META_V_INL_PT",
+                                        "META_V_INL_RE",
+                                        "META_V_INL_PT_RE",
+                                        "META_P_CL",
+                                        "META_P_CL_PT",
+                                        "META_P_CL_RE",
+                                        "META_P_CL_PT_RE",
+                                        "META_V_CL",
+                                        "META_V_CL_PT",
+                                        "META_V_CL_RE",
+                                        "META_V_CL_PT_RE",
+                                        "VMIS_CINE_LINE",
+                                        "VISC_TAHERI",
+                                        "CHABOCHE",
+                                        "VISCOCHAB",
+                                        "VMIS_CIN1_CHAB",
+                                        "VMIS_CIN2_CHAB",
+                                        "POLY_CFC",
+                                        "LMARC",
+                                        "ROUSSELIER",
+                                        "ROUSS_PR",
+                                        "ROUSS_VISC",
+                                        "VMIS_POU_LINE",
+                                        "VMIS_POU_FLEJOU",
+                                        "COULOMB",
+                                        "ARME",
+                                        "ASSE_CORN",
+                                        "NORTON_HOFF",
+                                        "LEMAITRE",
+                                        "ZIRC_CYRA2",
+                                        "ZIRC_EPRI",
+                                        "ASSE_COMBU",
+                                        "VENDOCHAB",
+                                        "NADAI_B",
+                                        "DIS_CONTACT",
+                                        "DIS_CHOC",
+                                        "DIS_GOUJ2E_PLAS",
+                                        "DIS_GOUJ2E_ELAS",
+                                        "GRILLE_ISOT_LINE",
+                                        "GRILLE_CINE_LINE",
+                                        "GRILLE_PINTO_MEN",
+                                        "PINTO_MENEGOTTO",
+                                        "CJS",
+                                        "OHNO",
+                                        "GRANGER_FP",
+                                        "GRANGER_FP_V",
+                                        "BETON_DOUBLE_DP",
+                                        "KIT_HM",
+                                        "KIT_HHM",
+                                        "KIT_THH",
+                                        "KIT_THM",
+                                        "KIT_THHM",
+                                        "VMIS_ASYM_LINE",
+                                        "ELAS_THM",
+                                        "SURF_ETAT_NSAT",
+                                        "SURF_ETAT_SATU",
+                                        "CAM_CLAY_THM",
+                                        "KIT_DDI",
+                                     ) ),
+           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           VMIS_ISOT_LINE  =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           VMIS_ECMI_TRAC  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           VMIS_ECMI_LINE  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           LABORD_1D   =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           ENDO_LOCAL      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ENDO_FRAGILE    =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           BETON_ENDO_LOCAL=SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           RUPT_FRAG       =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           PLAS_GRAD_LINE  =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           PLAS_GRAD_TRAC  =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           DURC_GRAD       =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           META_P_IL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_PT       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_RE       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_PT_RE    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL          =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_PT       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_RE       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_PT_RE    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_PT      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_RE      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_PT_RE   =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_PT      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_RE      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_PT_RE   =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_CL          =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_PT       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_RE       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_PT_RE    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL          =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_PT       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_RE       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_PT_RE    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+           VMIS_CINE_LINE  =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+           CHABOCHE        =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
+           VISCOCHAB       =SIMP(statut='c',typ='I',defaut=28,into=(28,)),
+           VMIS_CIN1_CHAB  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           VMIS_CIN2_CHAB  =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
+           POLY_CFC        =SIMP(statut='c',typ='I',defaut=1688,into=(1688,)),
+           LMARC           =SIMP(statut='c',typ='I',defaut=20,into=(20,)),
+           VISC_TAHERI     =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+           ROUSSELIER      =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+           ROUSS_PR        =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           ROUSS_VISC      =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           VMIS_POU_LINE   =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+           VMIS_POU_FLEJOU =SIMP(statut='c',typ='I',defaut=9 ,into=(9,)),
+           COULOMB         =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           ASSE_CORN       =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           ARME            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           NORTON_HOFF     =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           LEMAITRE        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ZIRC_CYRA2      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ZIRC_EPRI       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           ASSE_COMBU      =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           NADAI_B         =SIMP(statut='c',typ='I',defaut=34,into=(34,)),
+           VENDOCHAB       =SIMP(statut='c',typ='I',defaut=10,into=(10,)),
+           GRILLE_ISOT_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           GRILLE_CINE_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           GRILLE_PINTO_MEN=SIMP(statut='c',typ='I',defaut=16,into=(16,)),
+           DIS_CONTACT     =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+           DIS_CHOC        =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+           DIS_GOUJ2E_PLAS =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           DIS_GOUJ2E_ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           PINTO_MENEGOTTO =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+           CJS             =SIMP(statut='c',typ='I',defaut=16,into=(16,)),
+           OHNO            =SIMP(statut='c',typ='I',defaut=32,into=(32,)),
+           GRANGER_FP      =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
+           GRANGER_FP_V    =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
+           BETON_DOUBLE_DP =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           KIT_HM          =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_HHM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THH         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           KIT_THHM        =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           VMIS_ASYM_LINE  =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+
+           RELATION_KIT    =SIMP(statut='f',typ='TXM',max='**',
+                                 into=(
+# MECA
+                                       "ELAS",
+                                       "CJS",
+                                       "ELAS_THM",
+                                       "SURF_ETAT_NSAT",
+                                       "SURF_ETAT_SATU",
+                                       "CAM_CLAY_THM",
+# THMC
+                                       "GAZ",
+                                       "LIQU_SATU",
+                                       "LIQU_SATU_GAT",
+                                       "LIQU_GAZ_ATM",
+                                       "LIQU_VAPE_GAZ",
+                                       "LIQU_NSAT_GAT",
+                                       "LIQU_GAZ",
+# THER
+                                       "THER_HOMO",
+                                       "THER_POLY",
+# HYDR
+                                       "HYDR_UTIL",
+                                       "HYDR",
+# MECA_META
+                                       "ACIER",
+                                       "ZIRC",
+# MECA KIT_DDI
+                                       "VMIS_ISOT_TRAC",
+                                       "VMIS_ISOT_LINE",
+                                       "VMIS_ISOT_CINE",
+                                       "GRANGER_FP",
+                                       "GRANGER_FP_V",
+                                       "ROUSSELIER",
+                                       "CHABOCHE",
+                                       "OHNO",
+                                       "NADAI_B",
+                                       "BETON_DOUBLE_DP",
+                                       ) ),
+           ELAS_THM        =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           SURF_ETAT_NSAT  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           SURF_ETAT_SATU  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           CAM_CLAY_THM    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+           GAZ             =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           LIQU_SATU       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_SATU_GAT   =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_GAZ_ATM    =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_VAPE_GAZ   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_NSAT_GAT   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_GAZ        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           THER_HOMO       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           THER_POLY       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           HYDR_UTIL       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           HYDR            =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+           ACIER           =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           ZIRC            =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC","SIMO_MIEHE","GREEN_GR","GREEN",)),
+           ALGO_C_PLAN     =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         COMP_ELAS       =FACT(statut='f',min=1,max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
+                                       "ELAS_POUTRE_GR","CABLE")),
+           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_VMIS_LINE  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_POUTRE_GR  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           CABLE           =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GREEN","GREEN_GR",) ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         ETAT_INIT       =FACT(statut='f',min=1,max=1,
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI','VARI_NON_LOCAL',),
+                   EXCLUS('EVOL_NOLI','DEPL',),
+                   EXCLUS('EVOL_NOLI','SIGM',),
+                   EXCLUS('EVOL_NOLI','VARI',),
+                   EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',),
+                   EXCLUS('NUME_ORDRE','INST'), ),
+           DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
+           SIGM            =SIMP(statut='f',typ=(cham_elem_sief_r,carte_sief_r)),
+           VARI            =SIMP(statut='f',typ=cham_elem_vari_r),
+           VARI_NON_LOCAL  =SIMP(statut='f',typ=cham_no_vanl_r),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           NUME_DIDI       =SIMP(statut='f',typ='I'),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),
+         INCREMENT       =FACT(statut='o',min=1,max=1,
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=listr8),
+           EVOLUTION       =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE",
+                                 into=("CHRONOLOGIQUE","RETROGRADE","SANS",) ),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+           SUBD_PAS        =SIMP(statut='f',typ='I',defaut=1),
+           SUBD_PAS_MINI   =SIMP(statut='f',typ='R'),
+           COEF_SUBD_PAS_1 =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+         ),
+         NEWTON          =FACT(statut='d',min=1,max=1,
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),
+           PREDICTION      =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
+           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+           PAS_MINI_ELAS   =SIMP(statut='f',typ='R',defaut=0.0E+0),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut=0),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+         ),
+         RECH_LINEAIRE   =FACT(statut='f',min=1,max=1,
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),
+         ),
+         PILOTAGE        =FACT(statut='f',min=1,max=1,
+           regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TYPE    =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","PRED_ELAS_INCR","DEFORMATION","ANA_LIM") ),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           ETA_PILO_MAX    =SIMP(statut='f',typ='R'),
+           ETA_PILO_MIN    =SIMP(statut='f',typ='R'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),
+                         ),
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
+           ITER_GLOB_ELAS  =SIMP(statut='f',typ='I',defaut=25),
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R'
+                                ,defaut= 1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+           TYPE_MATR_COMP  =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+         PARM_THETA      =SIMP(statut='f',typ='R'
+                              ,defaut= 1. ),
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","DECOUPE") ),
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
+           regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
+                   EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+           ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',into=("DEPL","SIEF_ELGA","VARI_ELGA",
+                                                                     "VARI_NON_LOCAL","LANL_ELGA")),
+         ),
+         OBSERVATION     =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO','MAILLE'),
+                   PRESENT_PRESENT('MAILLE','POINT'),),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',into=("DEPL","VITE","ACCE","SIEF_ELGA",
+                                              "VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU")),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),
+           LIST_ARCH       =SIMP(statut='f',typ=listis),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PAS_OBSE        =SIMP(statut='f',typ='I'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           POINT           =SIMP(statut='f',typ='I',max='**'),
+         ),
+         MODELE_NON_LOCAL=SIMP(statut='f',typ=modele ),
+         b_non_local = BLOC ( condition = "MODELE_NON_LOCAL != None",
+                              fr="Données spécifiques au modèle non local",
+           SOLV_NON_LOCAL  =FACT(statut='f',min=1,max=1,
+             METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+             b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+               RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+             ),
+             b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+               RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             ),
+             b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                    fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+               NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+               STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+             ),
+             b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+               PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+               NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+               RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+               NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+             ),
+             EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           LAGR_NON_LOCAL  =FACT(statut='f',max=1,
+             ITER_DUAL_MAXI  =SIMP(statut='f',typ='I',defaut= 50),
+             RESI_DUAL_ABSO  =SIMP(statut='o',typ='R'),
+             RESI_PRIM_ABSO  =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='f',typ='R',defaut= 1000.),
+             ITER_PRIM_MAXI  =SIMP(statut='f',typ='I',defaut= 10),
+           ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+ )  ;
+#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE MCOURTOI M.COURTOIS
+TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135,fr="Extraction d une valeur numérique ou d un attribut de fonction",
+                   docu="U4.92.02-e1",
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+         TEST_NOOK       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         VALEUR          =FACT(statut='f',min=01,max='**',
+                               fr="Tester la valeur d une fonction ou d une nappe",
+           regles=(UN_PARMI('VALE_REFE','VALE_REFE_C', ),),
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',max=2),
+           VALE_PARA       =SIMP(statut='o',typ='R',max=2),
+           VALE_REFE       =SIMP(statut='f',typ='R' ),
+           VALE_REFE_C     =SIMP(statut='f',typ='C' ),
+           CRITERE         =SIMP(statut='f',typ='TXM',fr="Critère de comparaison avec la solution de référence",
+                                 defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',fr="Ecart maximal autorisé avec la solution de référence",
+                                 defaut= 1.E-3 ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',
+                                 into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+           b_version = BLOC (condition = "REFERENCE == 'NON_REGRESSION'", 
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+           ),
+         ),
+         ATTRIBUT        =FACT(statut='f',min=01,max='**',
+                               fr="Tester la valeur d un attribut d une fonction ou d''une nappe",
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           PARA            =SIMP(statut='f',typ='R' ),
+           CRIT_PARA       =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PREC_PARA       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ATTR            =SIMP(statut='o',typ='TXM',
+                                 into=("NOM_PARA","NOM_RESU","PROL_DROITE","PROL_GAUCHE","INTERPOL",
+                                       "PROL_GAUCHE_FONC","PROL_DROITE_FONC","INTERPOL_FONC","NOM_PARA_FONC") ),
+           ATTR_REFE       =SIMP(statut='o',typ='TXM' ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',
+                                 into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+           b_version       =BLOC(condition = "REFERENCE == 'NON_REGRESSION'", 
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+           ),
+         ),
+         TABL_INTSP      =FACT(statut='f',min=01,max='**',
+                               fr="Tester la valeur d une fonction contenue dans une table interspectrale",
+           regles=(UN_PARMI('NUME_ORDRE_I','NOEUD_I'),),
+           INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
+           NOEUD_I         =SIMP(statut='f',typ=no),
+           NUME_ORDRE_I    =SIMP(statut='f',typ='I' ),
+           b_nume_ordre_i = BLOC (condition = "NUME_ORDRE_I != None", 
+             NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           ),
+           b_noeud_i = BLOC (condition = "NOEUD_I != None",             
+             NOEUD_J         =SIMP(statut='o',typ=no),
+             NOM_CMP_I       =SIMP(statut='o',typ='TXM' ),
+             NOM_CMP_J       =SIMP(statut='o',typ='TXM' ),
+           ),
+           NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+           VALE_PARA       =SIMP(statut='o',typ='R' ),
+           VALE_REFE_C     =SIMP(statut='o',typ='C' ),
+           CRITERE         =SIMP(statut='f',typ='TXM',fr="Critère de comparaison avec la solution de référence",
+                                 defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',fr="Ecart maximal autorisé avec la solution de référence",
+                                 defaut= 1.E-3 ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',
+                                 into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+           b_version       =BLOC(condition = "REFERENCE == 'NON_REGRESSION'", 
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+           ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 22/11/2001   AUTEUR VABHHTS J.PELLET 
+# RESPONSABLE VABHHTS J.PELLET
+TEST_RESU=PROC(nom="TEST_RESU",op=23,docu="U4.92.01-f1",
+         fr="Extraction d une valeur et comparaison à une valeur de référence",
+         regles=(AU_MOINS_UN('CHAM_NO','CHAM_ELEM','RESU','OBJET')),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+
+         CHAM_NO         =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO','TYPE_TEST'),
+                   EXCLUS('NOEUD','GROUP_NO'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT( 'GROUP_NO','NOM_CMP'),
+                   UN_PARMI('VALE','VALE_I','VALE_C'),),
+           CHAM_GD         =SIMP(statut='o',typ=cham_no),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN")),
+           VALE            =SIMP(statut='f',typ='R'),
+           VALE_I          =SIMP(statut='f',typ='I'),
+           VALE_C          =SIMP(statut='f',typ='C'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER")),
+           VERSION         =SIMP(statut='f',typ='TXM'),
+         ),
+
+         CHAM_ELEM       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','TYPE_TEST',),
+                   EXCLUS('NOEUD','GROUP_NO','POINT'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                   PRESENT_PRESENT('POINT','NOM_CMP'),
+                   UN_PARMI('VALE','VALE_I','VALE_C'), ),
+           CHAM_GD         =SIMP(statut='o',typ=cham_elem),# CO()
+           MAILLE          =SIMP(statut='f',typ=ma),# CO()
+           POINT           =SIMP(statut='f',typ='I' ),
+           SOUS_POINT      =SIMP(statut='f',typ='I'),
+           NOEUD           =SIMP(statut='f',typ=no),# CO()
+           GROUP_NO        =SIMP(statut='f',typ=grno),# CO()
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN") ),
+           VALE            =SIMP(statut='f',typ='R' ),
+           VALE_I          =SIMP(statut='f',typ='I' ),
+           VALE_C          =SIMP(statut='f',typ='C' ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER") ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),
+         ),
+
+         RESU            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP','NOM_CAS','ANGL'),
+                   UN_PARMI('NOM_CHAM','PARA'),
+                   PRESENT_ABSENT('PARA','NOEUD','GROUP_NO','POINT','NOM_CMP','TYPE_TEST'),
+                   PRESENT_PRESENT('NOM_CMP','NOM_CHAM'),
+                   EXCLUS('NOEUD','GROUP_NO','POINT','TYPE_TEST'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                   PRESENT_PRESENT('POINT','NOM_CMP'),
+                   UN_PARMI('VALE','VALE_I','VALE_C') ,),
+           RESULTAT        =SIMP(statut='o',typ=resultat),
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
+                                 fr="Liste des paramètres de sensibilité.",
+                                 ang="List of sensitivity parameters"),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           FREQ            =SIMP(statut='f',typ='R'),
+           NUME_MODE       =SIMP(statut='f',typ='I'),
+           NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**' ),
+           NOM_CAS         =SIMP(statut='f',typ='TXM'),
+           ANGL            =SIMP(statut='f',typ='R'),
+           PARA            =SIMP(statut='f',typ='TXM'),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           POINT           =SIMP(statut='f',typ='I'),
+           SOUS_POINT      =SIMP(statut='f',typ='I'),
+           TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN")),
+           VALE            =SIMP(statut='f',typ='R'),
+           VALE_I          =SIMP(statut='f',typ='I'),
+           VALE_C          =SIMP(statut='f',typ='C'),
+           CRITERE         =SIMP(statut='f',typ='TXM',into=("RELATIF","ABSOLU"),max=02),
+           PRECISION       =SIMP(statut='f',typ='R',max=02),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER",) ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),
+         ),
+
+         OBJET           =FACT(statut='f',max='**',
+           regles=(UN_PARMI('INDICE','S_I','S_R','RESUME',),
+                 UN_PARMI('VALE','VALE_I','VALE_C','RESUME','S_R','S_I'),),
+           NOM             =SIMP(statut='o',typ='TXM'),
+           INDICE          =SIMP(statut='f',typ='I'),
+           NUM_OBJ         =SIMP(statut='f',typ='I'),
+           S_R             =SIMP(statut='f',typ='R'),
+           S_I             =SIMP(statut='f',typ='I'),
+           RESUME          =SIMP(statut='f',typ='I'),
+           VALE            =SIMP(statut='f',typ='R'),
+           VALE_I          =SIMP(statut='f',typ='I'),
+           VALE_C          =SIMP(statut='f',typ='C'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER",) ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
+                docu="U4.92.03-b1",
+         regles=(UN_PARMI('VALE','VALE_I','VALE_C', ),),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
+#  concept table à créer
+         TABLE           =SIMP(statut='o',typ=table),
+
+         FILTRE          =FACT(statut='f',min=1,max='**',
+           NOM_PARA        =SIMP(statut='o',typ='TXM' ),
+           CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",
+                                 into=("EQ","LT","GT","NE","LE","GE","VIDE",
+                                       "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI") ),
+           b_vale          =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+              regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+              VALE            =SIMP(statut='f',typ='R' ),
+              VALE_I          =SIMP(statut='f',typ='I' ),
+              VALE_C          =SIMP(statut='f',typ='C' ),
+              VALE_K          =SIMP(statut='f',typ='TXM' ),),
+
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+         ),
+         TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN") ),
+         NOM_PARA        =SIMP(statut='o',typ='TXM' ),
+         VALE            =SIMP(statut='f',typ='R' ),
+         VALE_I          =SIMP(statut='f',typ='I' ),
+         VALE_C          =SIMP(statut='f',typ='C' ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.2E-3 ),
+         REFERENCE       =SIMP(statut='f',typ='TXM',
+                               into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+         b_version       =BLOC(condition = "REFERENCE == 'NON_REGRESSION'",
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 04/12/2001   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,docu="U4.54.01-f1",reentrant='f',
+                   fr="Analyse thermique linéaire stationnaire ou transitoire",
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='o',min=1,max='**',
+           CHARGE          =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+         INCREMENT       =FACT(statut='f',min=1,max=1,
+           LIST_INST       =SIMP(statut='o',typ=listr8 ),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           NUME_FIN        =SIMP(statut='f',typ='I'),
+         ),
+         TEMP_INIT       =FACT(statut='f',min=1,max=1,
+           regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),),
+           STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther),
+           CHAM_NO         =SIMP(statut='f',typ=cham_no_temp_r),
+           VALE            =SIMP(statut='f',typ='R'),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+         ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters",
+         ),
+           SENS_INIT       =FACT(statut='f',min=1,max=1,
+             regles=(EXCLUS('STATIONNAIRE','EVOL_THER', ),),
+             STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             EVOL_THER       =SIMP(statut='f',typ=evol_ther),
+             NUME_INIT       =SIMP(statut='f',typ='I'),
+           ),
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut= 400. ),
+           ),
+           b_ldlt_mult      =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+         PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57),
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH','LIST_INST','INST'),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis),
+           LIST_INST       =SIMP(statut='f',typ=listr8),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
+                                 into=("RELATIF","ABSOLU")),
+           PAS_ARCH        =SIMP(statut='f',typ='I'),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',into=("VARI",)),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,docu="U4.54.02-d",reentrant='f',
+                   fr="Analyse thermique non linéaire stationnaire ou transitoire" ,
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         CHAM_MATER      =SIMP(statut='o',typ=(cham_mater) ),
+         CARA_ELEM       =SIMP(statut='c',typ=(cara_elem) ),
+         COMP_THER_NL    =FACT(statut='d',min=1,max='**',
+           RELATION        =SIMP(statut='f',typ='TXM',defaut="THER_NL",
+                                 into=("THER_NL",
+                                       "THER_HYDR",
+                                       "SECH_GRANGER",
+                                       "SECH_MENSI",
+                                       "SECH_BAZANT",
+                                       "SECH_NAPPE"
+                                       ) ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         ),
+         EVOL_THER_SECH  =SIMP(statut='f',typ=evol_ther),
+         EXCIT           =FACT(statut='o',min=1,max='**',
+           CHARGE          =SIMP(statut='o',typ=char_ther),
+           FONC_MULT       =SIMP(statut='f',typ=fonction),
+         ),
+         INCREMENT       =FACT(statut='f',min=1,max=1,
+           LIST_INST       =SIMP(statut='o',typ=listr8),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           NUME_FIN        =SIMP(statut='f',typ='I'),
+         ),
+         TEMP_INIT       =FACT(statut='f',min=1,max=1,
+           regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),),
+           STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther),
+           CHAM_NO         =SIMP(statut='f',typ=cham_no_temp_r),
+           VALE            =SIMP(statut='f',typ='R'),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+         ),
+         NEWTON          =FACT(statut='d',min=1,max=1,
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+         ),
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Parametres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Parametres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Parametres relatifs a la non inversibilité de la matrice a factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Parametres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+#  A quoi sert eps
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         ),
+         PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57 ),
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH','LIST_INST','INST', ),),
+           LIST_ARCH       =SIMP(statut='f',typ=(listis) ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8) ),
+           INST            =SIMP(statut='f',typ='R',max='**'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+           PAS_ARCH        =SIMP(statut='f',typ='I'),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',into=("VARI",)),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         OPTION          =SIMP(statut='f',typ='TXM',max='**',
+                               into=("FLUX_ELGA_TEMP","FLUX_ELNO_TEMP") ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther,
+                     fr="Thermique non lineaire en repere mobile",
+                     docu="U4.54.03-b",reentrant='f',
+         MODELE          =SIMP(statut='o',typ=modele ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='c',typ=cara_elem ),
+         EXCIT           =FACT(statut='o',min=1,max='**',
+           CHARGE          =SIMP(statut='o',typ=char_ther ),
+           FONC_MULT       =SIMP(statut='c',typ=fonction ),
+         ),
+         TEMP_INIT       =FACT(statut='f',min=1,max=1,
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther ),
+           NUME_INIT       =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
+           CRIT_TEMP_RELA  =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRIT_ENTH_RELA  =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ARRET           =SIMP(statut='c',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","SANS","DIAG") ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+
+
+
diff --git a/Aster/Cata/ops.py b/Aster/Cata/ops.py
new file mode 100644 (file)
index 0000000..7a515fe
--- /dev/null
@@ -0,0 +1,224 @@
+
+# Modules Python
+import types
+import string,linecache,os,traceback,re
+
+# Modules Eficas
+import Accas
+from Accas import ASSD
+
+try:
+   import aster
+   # Si le module aster est présent, on le connecte
+   # au JDC
+   import Build.B_CODE
+   Build.B_CODE.CODE.codex=aster
+except:
+   pass
+
+def DEBUT(self,PAR_LOT,**args):
+   """
+       Fonction sdprod de la macro DEBUT
+   """
+   self.jdc.set_par_lot(PAR_LOT)
+
+def POURSUITE(self,PAR_LOT,**args):
+   """
+       Fonction sdprod de la macro POURSUITE
+   """
+   self.jdc.set_par_lot(PAR_LOT)
+   if self.codex and os.path.isfile("glob.1"):
+     # Le module d'execution est accessible et glob.1 est present
+     if hasattr(self,'fichier_init'):return
+     self.fichier_init='glob.1'
+     self.jdc.initexec()
+     lot,ier,lonuti,concepts=self.codex.poursu(self,1)
+     self.icmd=lonuti
+     #print "Fin de debut",ier,lot,lonuti
+     pos=0
+     d={}
+     while pos+80 < len(concepts)+1:
+       nomres=concepts[pos:pos+8]
+       concep=concepts[pos+8:pos+24]
+       nomcmd=concepts[pos+24:pos+40]
+       statut=concepts[pos+40:pos+48]
+       if nomres[0] not in (' ','.','&') and statut != '&DETRUIT':
+          exec nomres+'='+string.lower(concep)+'()' in self.parent.g_context,d
+       pos=pos+80
+     for k,v in d.items():
+       self.parent.NommerSdprod(v,k)
+     self.g_context=d
+     return
+   else:
+     # Si le module d'execution n est pas accessible ou glob.1 absent on 
+     # demande un fichier (EFICAS)
+     # Il faut éviter de réinterpréter le fichier à chaque appel de
+     # POURSUITE
+     if hasattr(self,'fichier_init'):
+        return
+     self.make_poursuite()
+
+def POURSUITE_context(self,d):
+   """
+       Fonction op_init de la macro POURSUITE
+   """
+   # self représente la macro POURSUITE ...
+   d.update(self.g_context)
+   # Une commande POURSUITE n'est possible qu'au niveau le plus haut
+   # On ajoute directement les concepts dans le contexte du jdc
+   # XXX est ce que les concepts ne sont pas ajoutés plusieurs fois ??
+   for v in self.g_context.values():
+      if isinstance(v,ASSD) : self.jdc.sds.append(v)
+
+def INCLUDE(self,UNITE,**args):
+   """ 
+       Fonction sd_prod pour la macro INCLUDE
+   """
+   if hasattr(self,'unite'):return
+   self.unite=UNITE
+
+   if self.jdc and self.jdc.par_lot == 'NON':
+      # On est en mode commande par commande
+      # On teste la validite de la commande avec interruption eventuelle
+      cr=self.report()
+      self.parent.cr.add(cr)
+      if not cr.estvide():
+         raise EOFError
+
+   self.make_include(unite=UNITE)
+
+def INCLUDE_context(self,d):
+   """ 
+       Fonction op_init pour macro INCLUDE
+   """
+   for k,v in self.g_context.items():
+      d[k]=v
+
+def detruire(self,d):
+   """
+       Cette fonction est la fonction op_init de la PROC DETRUIRE
+   """
+   sd=[]
+   for mc in self["CONCEPT"]:
+     mcs=mc["NOM"]
+     if type(mcs) == types.ListType or type(mcs) == types.TupleType:
+       for e in mcs:
+         if isinstance(e,ASSD):
+           sd.append(e)
+           e=e.nom
+         if d.has_key(e):del d[e]
+     else:
+       if isinstance(mcs,ASSD):
+         sd.append(mcs)
+         mcs=mcs.nom
+       if d.has_key(mcs):del d[mcs]
+   for s in sd:
+     # On signale au parent que le concept s n'existe plus apres l'étape self
+     self.parent.delete_concept_after_etape(self,s)
+
+def subst_materiau(text,NOM_MATER,EXTRACTION):
+   """
+       Cette fonction retourne un texte obtenu à partir du texte passé en argument (text)
+       en substituant le nom du materiau par NOM_MATER 
+       et en réalisant les extractions spéciifées dans EXTRACTION
+   """
+   lines=string.split(text,'\n')
+   if EXTRACTION:
+     ll=[]
+     regmcf=re.compile(r" *(.*) *= *_F\( *## +(.*) +(.*)")
+     regmcs=re.compile(r" *(.*) *= *([^ ,]*) *, *## +([^ ]*) *([^ ]*)")
+     regfin=re.compile(r" *\) *")
+     temps={};lmcf=[]
+     for e in EXTRACTION:
+       mcf=e['COMPOR']
+       lmcf.append(mcf)
+       temps[mcf]=e['TEMP_EVAL']
+     FLAG=0
+     for l in lines:
+       m=regmcf.match(l)
+       if m: # On a trouve un mot cle facteur "commentarise"
+         if m.group(2) == "SUBST": # il est de plus substituable
+           if temps.has_key(m.group(3)): # Il est a substituer
+             ll.append(" "+m.group(3)+"=_F(")
+             mcf=m.group(3)
+             TEMP=temps[mcf]
+             FLAG=1 # Indique que l'on est en cours de substitution
+           else: # Il n est pas a substituer car il n est pas dans la liste demandee
+             ll.append(l)
+         else: # Mot cle facteur commentarise non substituable
+           ll.append(l)
+       else:  # La ligne ne contient pas un mot cle facteur commentarise
+         if FLAG == 0: # On n est pas en cours de substitution
+           ll.append(l)
+         else: # On est en cours de substitution. On cherche les mots cles simples commentarises
+           m=regmcs.match(l)
+           if m: # On a trouve un mot cle simple commentarise
+             if m.group(3) == "EVAL":
+               ll.append("  "+m.group(1)+' = EVAL("'+m.group(4)+"("+str(TEMP)+')"),')
+             elif m.group(3) == "SUPPR":
+              pass
+             else:
+              ll.append(l)
+           else: # On cherche la fin du mot cle facteur en cours de substitution
+             m=regfin.match(l)
+             if m: # On l a trouve. On le supprime de la liste
+               FLAG=0
+               del temps[mcf]
+             ll.append(l)
+   else:
+     ll=lines
+
+   for l in ll:
+     print l
+   lines=ll
+   ll=[]
+   for l in lines:
+     l=re.sub(" *MAT *= *",NOM_MATER+" = ",l,1)
+     ll.append(l)
+   text=string.join(ll,'\n')
+   return text
+
+def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER,
+                    EXTRACTION,INFO,**args):
+  """ 
+      Fonction sd_prod pour la macro INCLUDE_MATERIAU
+  """
+  mat=string.join((NOM_AFNOR,'_',TYPE_MODELE,'_',VARIANTE,'.',TYPE_VALE),'')
+  if not hasattr(self,'mat') or self.mat != mat:
+    self.mat=mat
+    # On récupère le répertoire des matériaux dans les arguments 
+    # supplémentaires du JDC
+    rep_mat=self.jdc.args["rep_mat"]
+    f=os.path.join(rep_mat,mat)
+    if not os.path.isfile(f):
+       raise "Erreur sur le fichier materiau: "+f
+    # Les materiaux sont uniquement disponibles en syntaxe Python
+    # On lit le fichier et on supprime les éventuels \r
+    text=string.replace(open(f).read(),'\r\n','\n')
+    # On effectue les substitutions necessaires
+    self.prefix=NOM_MATER
+    self.text= subst_materiau(text,NOM_MATER,EXTRACTION)
+    if INFO == 2:
+      print "INCLUDE_MATERIAU: ", self.mat,' ',NOM_MATER,'\n'
+      print self.text
+    # on execute le texte fourni dans le contexte forme par
+    # le contexte de l etape pere (global au sens Python)
+    # et le contexte de l etape (local au sens Python)
+    # Il faut auparavant l'enregistrer aupres du module linecache (utile pour nommage.py)
+    linecache.cache[f]=0,0,string.split(self.text,'\n'),f
+    code=compile(self.text,f,'exec')
+    if self.jdc.par_lot == 'NON':
+      # On est en mode commande par commande
+      # On teste la validite de la commande avec interruption eventuelle
+      cr=self.report()
+      self.parent.cr.add(cr)
+      if not cr.estvide():
+        raise EOFError
+      # Et en plus il faut executer la fonction ops014 avant les sous
+      # commandes car le prefixe PRFXCO doit etre initialise dans le Fortran
+      self.codex.opsexe(self,0,-1,-self.definition.op)  
+
+    d={}
+    self.g_context = d
+    self.contexte_fichier_init = d
+    exec code in self.parent.g_context,d
diff --git a/Aster/__init__.py b/Aster/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Aster/ahlv100a.comm b/Aster/ahlv100a.comm
new file mode 100755 (executable)
index 0000000..2cb6159
--- /dev/null
@@ -0,0 +1,354 @@
+# MODIF  DATE 11/12/2001   AUTEUR DURAND C.DURAND 
+# TITRE GUIDE D'ONDE A SORTIE ANECHOIQUE (ONDES PLANES) E.F. CLASSIQUES
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+#  MODELISATION 'ACOUSTIQUE' AVEC ELEMENTS HEXA20 ET FACE8
+#  GUIDE D'ONDE ACOUSTIQUE EN E.F. CLASSIQUES
+#
+
+DEBUT(CODE=_F( NOM = 'AHLV100A')  )
+
+F=500.
+
+MAIL=LIRE_MAILLAGE( )
+
+AIR=DEFI_MATERIAU( FLUIDE=_F( RHO = 1.3, CELE_C = ('RI',343.,0.,)))
+
+CHAMPMAT=AFFE_MATERIAU(  MAILLAGE=MAIL,
+                                 AFFE=_F( TOUT = 'OUI',  MATER = AIR) )
+
+GUIDE=AFFE_MODELE(  MAILLAGE=MAIL,     VERIF='MAILLE',
+                            AFFE=_F( TOUT = 'OUI', MODELISATION = '3D',
+                                     PHENOMENE = 'ACOUSTIQUE') )
+
+CHARACOU=AFFE_CHAR_ACOU(      MODELE=GUIDE,
+                 VITE_FACE=_F( GROUP_MA = 'ENTREE', VNOR = ('RI',0.014,0.,)))
+
+IMPEACOU=AFFE_CHAR_ACOU(      MODELE=GUIDE,
+                 IMPE_FACE=_F( GROUP_MA = 'SORTIE', IMPE = ('RI',445.9,0.,)))
+
+MACRO_MATR_ASSE(
+                      MODELE=GUIDE,         CHARGE=IMPEACOU,
+                      CHAM_MATER=CHAMPMAT,
+                      NUME_DDL=CO("NUM"),MATR_ASSE=(
+                      _F(  MATRICE = CO("MATASK"), OPTION = 'RIGI_ACOU'),
+                                _F(  MATRICE = CO("MATASM"), OPTION = 'MASS_ACOU'),
+                                _F(  MATRICE = CO("MATASI"), OPTION = 'AMOR_ACOU'))
+                   )
+
+#
+
+VECTELEM=CALC_VECT_ELEM(   OPTION='CHAR_ACOU',  CHAM_MATER=CHAMPMAT,
+                                CHARGE=CHARACOU )
+
+#
+# IMPRESSION DU VECT_ELEM COMPLEXE VECTELEM SELON LE GRAIN MAILLE
+# 
+
+IMPR_MATRICE(   MATR_ELEM=_F(  MATRICE = VECTELEM,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'MAILLE'))
+
+VECTASS=ASSE_VECTEUR(  VECT_ELEM=VECTELEM,   NUME_DDL=NUM )
+
+#
+#  ____________________CALCUL DES MODES_________________________________
+#
+
+MATASKR=COMB_MATR_ASSE(    COMB_R=_F( MATR_ASSE = MATASK,  PARTIE = 'REEL', COEF_R = 1.))
+
+MATASMR=COMB_MATR_ASSE(    COMB_R=_F( MATR_ASSE = MATASM,  PARTIE = 'REEL', COEF_R = 1.))
+
+#
+
+MODES=MODE_ITER_SIMULT(      MATR_A=MATASKR,
+                                     MATR_B=MATASMR,
+                                  CALC_FREQ=_F( OPTION = 'BANDE',
+                                             FREQ = ( 1., 1000.,))
+                               )
+
+TEST_RESU(RESU=(_F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-4,
+                    NUME_ORDRE = 1,  VALE = 171.5),
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-4,
+                    NUME_ORDRE = 2,  VALE = 343.), 
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-3,
+                    NUME_ORDRE = 3,  VALE = 514.5),
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-2,
+                    NUME_ORDRE = 4,  VALE = 686.),            
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-3,
+                    NUME_ORDRE = 5,  VALE = 857.5),     
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 6,  VALE = 857.5),      
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 7,  VALE = 874.482),      
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 8,  VALE = 923.556))
+             )
+
+#  ----------------------CALCUL DECOMPOSE-------------------------------
+#
+
+MATRES=COMB_MATR_ASSE( COMB_C=(   _F( MATR_ASSE = MATASK,
+                                        COEF_R = 1.),
+                                       _F( MATR_ASSE = MATASM,
+                                        COEF_R = -9869604.4),
+                                       _F( MATR_ASSE = MATASI,
+                                        COEF_C = ('RI',0.,3141.5926,)))
+                            )
+
+#
+# IMPRESSION DE LA MATRICE COMPLEXE MATRES SELON LE GRAIN NOEUD
+# 
+
+IMPR_MATRICE(   MATR_ASSE=_F(  MATRICE = MATRES,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'NOEUD',
+                               OPTION = 'LIGNE'))
+
+#
+# IMPRESSION DE LA MATRICE COMPLEXE MATRES SELON LE GRAIN VALEUR
+# 
+
+IMPR_MATRICE(   MATR_ASSE=_F(  MATRICE = MATRES,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'VALEUR',
+                               OPTION = 'LIGNE'))
+
+VECRES=COMB_CHAM_NO(    COMB_C=_F( CHAM_NO = VECTASS,
+                                      COEF_C = ('RI',0.,-3141.5926,))
+                            )
+
+MATRES=FACT_LDLT( reuse=MATRES,  MATR_ASSE=MATRES )
+
+VECRES=RESO_LDLT( reuse=VECRES,  MATR_FACT=MATRES,
+                             CHAM_NO=VECRES
+                        )
+
+TEST_RESU(CHAM_NO=(
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO763', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)))
+             )
+
+CHNODBEL=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_DBEL'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'DB',  VALE = 109.9))
+             )
+
+#
+
+PREEL=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_REEL'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE = -6.2426),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE = -6.2426),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE = 6.02368),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'PRES', VALE = 6.02368))
+             )
+
+PIMAG=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_IMAG'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE = 0.,
+            CRITERE = 'ABSOLU'),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'PRES', VALE = 0.,
+            CRITERE = 'ABSOLU'),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA57',
+            NOEUD = 'NO751', NOM_CMP = 'PRES', VALE = 1.6387, PRECISION = 3.3E-3),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA57',
+            NOEUD = 'NO763', NOM_CMP = 'PRES', VALE = 1.6387, PRECISION = 3.3E-3))
+             )
+
+#-----------------------CALCUL HARMONIQUE-------------------------------
+
+
+PRESHARM=DYNA_LINE_HARM( MATR_MASS=MATASM,  MATR_RIGI=MATASK,
+                             MATR_AMOR=MATASI,
+                               FREQ=F,
+                             EXCIT=_F( VECT_ASSE = VECTASS,  COEF_MULT = -1.,
+                                    PUIS_PULS = 1,  PHAS_DEG = 90.))
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO1',  NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO763',  NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='INTE_ELNO_ACTI'
+           )
+
+TEST_RESU(RESU=(
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',  NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA57',
+            NOEUD = 'NO751', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA57',
+            NOEUD = 'NO763', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='INTE_ELNO_REAC'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_DBEL'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',  NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'DB',  VALE = 109.9))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_REEL'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'PRES',  VALE = -6.2426),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'PRES',  VALE = -6.2426),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'PRES',  VALE = 6.02368),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'PRES',  VALE = 6.02368))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_IMAG'
+           )
+
+TEST_RESU(RESU=(
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',  NOM_CMP = 'PRES',  VALE = 0.,
+                                     CRITERE = 'ABSOLU'),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'PRES',  VALE = 0.,
+                                     CRITERE = 'ABSOLU'),
+          _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+           MAILLE = 'MA57',
+           NOEUD = 'NO751', NOM_CMP = 'PRES',  VALE = 1.6387, PRECISION = 3.3E-3,
+                                     CRITERE = 'RELATIF'),
+          _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+           MAILLE = 'MA57',
+           NOEUD = 'NO763',  NOM_CMP = 'PRES',  VALE = 1.6387, PRECISION = 3.3E-3))
+             )
+
+FIN()
+#
+#
diff --git a/Aster/editeur.ini b/Aster/editeur.ini
new file mode 100644 (file)
index 0000000..e86dc06
--- /dev/null
@@ -0,0 +1,22 @@
+import os
+
+import prefs
+
+rep_cata = os.path.join(prefs.REPINI,'Cata')
+
+# Accès à la documentation Aster
+path_doc              = os.path.join(rep_cata,'..','Doc')
+exec_acrobat    =       "/usr/bin/acroread"
+# Utilisateur/Développeur
+isdeveloppeur   =       "NON"
+path_cata_dev   =       "/tmp/cata"
+# Répertoire temporaire
+rep_travail     =   "/tmp"
+
+# Choix des catalogues
+rep_mat="bidon"
+
+catalogues = (('ASTER','v5',os.path.join(rep_cata,'cata_STA5.py'),'asterv5'),
+              ('ASTER','v6',os.path.join(rep_cata,'cata_STA6.py'),'python','defaut'),
+             )
+
diff --git a/Aster/eficas_aster.py b/Aster/eficas_aster.py
new file mode 100755 (executable)
index 0000000..2debb64
--- /dev/null
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+"""
+    Ce module sert à lancer EFICAS configuré pour Code_Aster
+"""
+# Modules Python
+import sys
+
+# Modules Eficas
+import prefs
+sys.path[:0]=[prefs.INSTALLDIR]
+
+import Editeur
+from Editeur import eficas_go
+
+if len(sys.argv) > 1 :
+    # on veut ouvrir un fichier directement au lancement d'Eficas
+    eficas_go.lance_eficas(code='ASTER',fichier = sys.argv[1])
+else:
+    # on veut ouvrir Eficas 'vide'
+    eficas_go.lance_eficas(code='ASTER')
+
diff --git a/Aster/prefs.py b/Aster/prefs.py
new file mode 100644 (file)
index 0000000..f3d82ae
--- /dev/null
@@ -0,0 +1,21 @@
+import os
+
+# REPINI sert à localiser le fichier editeur.ini
+# Obligatoire
+REPINI=os.path.dirname(os.path.abspath(__file__))
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+# Obligatoire
+INSTALLDIR=os.path.join(REPINI,'..')
+
+# CODE_PATH sert à localiser Noyau et Validation éventuellement
+# non contenus dans la distribution EFICAS
+# Par défaut on utilise les modules de INSTALLDIR
+# Peut valoir None (defaut)
+CODE_PATH = None
+#CODE_PATH = os.path.join(REPINI,'../../Superv')
+
+# ICONDIR sert à localiser le répertoire contenant les icones
+# Par défaut on utilise le répertoire icons dans Editeur
+ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
+
diff --git a/Aster/totalmod.comm b/Aster/totalmod.comm
new file mode 100755 (executable)
index 0000000..31b448d
--- /dev/null
@@ -0,0 +1,1798 @@
+DEBUT();
+% LECTURE DES PARAMETRES 
+%
+
+    
+% LECTURE DES TEMPS 
+
+%cycle 1
+
+
+% LECTURE DU MAILLAGE ET DEFINITIONS DES PROPRIETES ELEMENTS FINIS
+
+PRE_GIBI ();
+%
+ ma1 = LIRE_MAILLAGE ();
+%
+&ma1 = DEFI_GROUP ( MAILLAGE : ma1
+                   CREA_GROUP_NO : (GROUP_MA : ( fixati
+                                                 appui
+                                                 lias_1
+                                                 lias_2
+                                                 ebguide   
+                                                 maintien
+                                                 main_sup
+                                                 embo_sup
+                                                 tub_guid
+                                                 grilles
+                                                 embo_inf
+                                                 pieds
+                                                 crayons ))
+                  ) ;
+%
+% AFFECTATION DU MODELE
+%
+ mo1 = AFFE_MODELE ( Maillage: ma1
+           % crayons combustibles
+                    AFFE : ( GROUP_MA :     crayons
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'POU_D_E'
+                            )
+           % tubes guides
+                    AFFE : ( GROUP_MA :     tub_guid
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'POU_D_E'
+                            )
+           % embouts
+                    AFFE : ( GROUP_MA :     (embo_sup, embo_inf)
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'DKT'
+                            )
+          % pieds
+
+                    AFFE : ( GROUP_MA :    pieds
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'POU_D_E'
+                            )
+
+           % grilles
+                    AFFE : ( GROUP_MA :     grilles
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'POU_D_E'
+                            )
+           % liaison grille crayon
+                    AFFE : ( GROUP_MA :     li_gr_cr
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'DIS_TR'
+                            )
+           % liaison grille tube
+                    AFFE : ( GROUP_MA :     li_gr_gu
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'DIS_TR'
+                            )
+           % systeme de maintien
+                    AFFE : ( GROUP_MA :     maintien
+                             PHENOMENE:'MECANIQUE',
+                             MODELISATION:'POU_D_E'
+                           % MODELISATION:'POU_D_T'
+                            )
+                   );
+%
+% AFFECTATION DES CARACTERISTIQUES GEOMETRIQUES ELEMENTAIRES
+%
+ cara1 = AFFE_CARA_ELEM ( MODELE :  mo1
+
+% Famille assemblage : numero_fam
+%
+           % crayons
+                        POUTRE : ( GROUP_MA : cray 
+                                   SECTION : 'CERCLE'
+                                   CARA    : ( 'R','EP' )
+                                   VALE    : ( 3.   3. )
+                                  )
+           % tube guide partie courante
+                        POUTRE : ( GROUP_MA : guid 
+                                   SECTION : 'CERCLE'
+                                   CARA    : ( 'R','EP' )
+                                   VALE    : ( 3.   3. )
+                                  )
+           % tube guide partie retrecie
+                        POUTRE : ( GROUP_MA : retre 
+                                   SECTION : 'CERCLE'
+                                   CARA    : ( 'R','EP' )
+                                   VALE    : ( 3.   3. )
+                                  )  
+           % grilles
+                        POUTRE :  ( GROUP_MA : ( gril_i        )
+                                    SECTION : 'RECTANGLE'
+                                    CARA    : ( 'HY','HZ' )
+                                    VALE    : ( 3.   3.   )
+                                  )
+                        POUTRE :  ( GROUP_MA : ( gril_e  )
+                                    SECTION : 'RECTANGLE'
+                                    CARA    : ( 'HY','HZ' )
+                                    VALE    : ( 3.   3.   )
+                                  )
+                        ORIENTATION : ( GROUP_MA : (gril_i  , gril_e )
+                                        CARA : 'VECT_Y'
+                                        VALE : (1. 0. 0.)
+                                      )
+           % systeme de maintien
+                        POUTRE : ( GROUP_MA : (mainti_y , mainti_z )
+                                   SECTION : 'RECTANGLE'
+                                   CARA    : ( 'HY','HZ' )
+                                   VALE    : ( 3.   3. )
+                                  )
+                        ORIENTATION : ( GROUP_MA : (mainti_y )
+                                        CARA : 'VECT_Y'
+                                        VALE : (0. 1. 0.)
+                                      )
+                        ORIENTATION : ( GROUP_MA : (mainti_z )
+                                        CARA : 'VECT_Y'
+                                        VALE : (0. 0. 1.)
+                                      )
+           % embout inferieur
+                        COQUE : ( GROUP_MA : eboinf 
+                                  EPAIS : 2.
+                                  ANGL_REP : 90.
+                                  )
+          % pieds
+                     POUTRE :  ( GROUP_MA : pi_ple 
+                                          SECTION : 'GENERALE'
+                     CARA : ( 'A' , 'IZ' , 'IY' , 'JX' )
+                    VALE : (1. 2. 3. 4.)
+                                      )
+                     POUTRE :  ( GROUP_MA : pi_tro 
+                                          SECTION : 'GENERALE'
+                     CARA : ( 'A' , 'IZ' , 'IY' , 'JX' )
+                    VALE : (1. 2. 3. 4. )
+                                )
+                        ORIENTATION : ( GROUP_MA : (pi_ple  pi_tro )
+                                        CARA : 'VECT_Y'
+                                        VALE : (0. 1. 0.)
+                                      )
+
+           % embout superieur
+                        COQUE : ( GROUP_MA  : ebosup 
+                                  EPAIS : 3.
+                                  ANGL_REP : 90.
+                                  )
+
+           % liaison grille/crayon
+                        DISCRET : ( GROUP_MA : elasti 
+                                    CARA : 'K_TR_D_L'
+                                    VALE : ( 1.
+                                             2.
+                                             3.
+                                             4.
+                                             5.
+                                             6.
+                                           )
+                                    REPERE : 'LOCAL'
+                                  )
+           % liaison grille/tube guide
+                        DISCRET : ( GROUP_MA : rigid 
+                                    CARA : 'K_TR_D_L'
+                                    VALE : ( 1.
+                                             2.
+                                             3.
+                                             4.
+                                             5.
+                                             6.
+                                           )
+                                    REPERE : 'LOCAL'
+                                  )
+
+                        ORIENTATION : ( GROUP_MA : (elasti  
+                                                    rigid        )
+                                        CARA : 'VECT_Y'
+                                        VALE : (1. 0. 0.) )
+  
+    );
+%
+% DEFINITION DES CHARGES ET CONDITIONS LIMITES
+% DEFINITION DES TEMPERATURES NODALES EVOLUTIVES
+%
+ f_tp1_1 = DEFI_FONCTION ( NOM_PARA: 'X'
+                            NOM_RESU : 'TEMP'
+                            PROL_DROIT: 'CONSTANT'
+                            PROL_GAUCHE: 'CONSTANT'
+                            VALE : ( 0. 1.
+                                     5. 4.  )
+                         );
+ f_tp2_1 = DEFI_FONCTION ( NOM_PARA: 'X'
+                          NOM_RESU : 'TEMP'
+                          PROL_DROIT: 'CONSTANT'
+                          PROL_GAUCHE: 'CONSTANT'
+                          VALE : ( 0. 1.
+                                   5. 4. )
+                         );
+ f_tp3_1 = DEFI_FONCTION ( NOM_PARA: 'X'
+                          NOM_RESU : 'TEMP'
+                          PROL_DROIT: 'CONSTANT'
+                          PROL_GAUCHE: 'CONSTANT'
+                          VALE : ( 0. 1.
+                                   5. 4. )
+                         );
+  
+ chtem1_1 = AFFE_CHAM_NO ( MAILLAGE : ma1
+                         GRANDEUR : 'TEMP_F'
+                         AFFE : ( GROUP_NO: (maintien, pieds
+                                             tub_guid, grilles
+                                             crayons)
+                                  NOM_CMP : 'TEMP'
+                                  FONCTION : f_tp1_1 )
+                         AFFE : ( GROUP_NO: (embo_sup, embo_inf)
+                                  NOM_CMP : ('TEMP_INF' 'TEMP'
+                                             'TEMP_SUP')
+                                  FONCTION :(f_tp1_1,f_tp1_1,f_tp1_1))
+                        );
+
+ chtem2_1 = AFFE_CHAM_NO ( MAILLAGE : ma1
+                         GRANDEUR : 'TEMP_F'
+                         AFFE : ( GROUP_NO: (maintien, pieds
+                                             tub_guid, grilles
+                                             crayons)
+                                  NOM_CMP : 'TEMP'
+                                  FONCTION : f_tp2_1 )
+                         AFFE : ( GROUP_NO: (embo_sup, embo_inf)
+                                  NOM_CMP : ('TEMP_INF' 'TEMP'
+                                             'TEMP_SUP')
+                                  FONCTION :(f_tp2_1,f_tp2_1,f_tp2_1))
+                        );
+                        
+ chtem3_1 = AFFE_CHAM_NO ( MAILLAGE : ma1
+                         GRANDEUR : 'TEMP_F'
+                         AFFE : ( GROUP_NO: (maintien, pieds
+                                             tub_guid, grilles)
+                                  NOM_CMP : 'TEMP'
+                                  FONCTION : f_tp3_1 )
+                         AFFE : ( GROUP_NO: (embo_sup, embo_inf)
+                                  NOM_CMP : ('TEMP_INF' 'TEMP'
+                                             'TEMP_SUP')
+                                  FONCTION : (f_tp3_1,f_tp3_1,f_tp3_1))
+                         AFFE : ( GROUP_NO: crayons
+                                  NOM_CMP : 'TEMP'
+                                  FONCTION :f_tp3_1 )
+                        );  
+                                                                       
+ chth_1 = CREA_RESU ( TYPE_RESU : 'EVOL_THER'
+                    NOM_CHAM : 'TEMP'
+                    CHAM_GD : ( CHAM_NO : chtem1_1
+                                INST : 0. )
+                    CHAM_GD : ( CHAM_NO : chtem1_1
+                                INST : 1000. )
+                    CHAM_GD : ( CHAM_NO : chtem2_1
+                                INST :2000.  )
+                    CHAM_GD : ( CHAM_NO : chtem3_1
+                                INST : 3000.  )
+                    CHAM_GD : ( CHAM_NO : chtem3_1
+                                INST : 4000.    )
+                    CHAM_GD : ( CHAM_NO : chtem2_1
+                                INST : 5000.   )
+                    CHAM_GD : ( CHAM_NO : chtem1_1
+                                INST : 6000.   )
+                    CHAM_GD : ( CHAM_NO : chtem1_1
+                                INST : 7000.    )
+                       );
+                       
+% Chargement: charges thermo-mecaniques
+% ----------------------------------------
+
+ therm_1 = AFFE_CHAR_MECA ( MODELE: mo1
+                             TEMP_CALCULEE : chth_1
+                             );                       
+                       
+                       
+
+% DEFINITION DES CONDITIONS LIMITES
+%            DES CONDITIONS DE CONTACT
+%
+% Chargement: pesanteur
+%
+ pesant_1 = AFFE_CHAR_MECA ( MODELE : mo1
+                             PESANTEUR : (9.81 -1. 0. 0. )
+                            );
+
+%
+% Conditions aux limites
+%
+ cl_per_1 = AFFE_CHAR_MECA ( MODELE : mo1
+                % embout inferieur encastrement
+                         DDL_IMPO : ( GROUP_NO : fixati
+                                      DX : 0.  DY:0.    DZ : 0.
+                                      DRX : 0. DRY : 0. DRZ : 0.
+                                    )
+                % embout inferieur appui simple
+                         DDL_IMPO : ( GROUP_NO : appui
+                                      DX : 0.
+                                    )
+                % embout superieur liaison guidee
+                         DDL_IMPO : ( GROUP_NO : ebguide
+                                      DY:0. DZ : 0.
+                                      DRX : 0. DRY : 0. DRZ : 0.
+                                    )
+                % liaison systeme de maintien embout superieur
+                         DDL_IMPO : ( GROUP_NO : (lias_1, lias_2)
+                                      DRX : 0.
+                                    )
+                % liaison systeme de maintien embout superieur
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DX' DDL_2 : 'DX'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DY' DDL_2 : 'DY'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DZ' DDL_2 : 'DZ'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DRY' DDL_2 : 'DRY'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DRZ' DDL_2 : 'DRZ'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                            );
+%
+ cl_ctc = AFFE_CHAR_MECA ( MODELE : mo1
+                                   
+                                           
+                         CONTACT : ( APPARIEMENT : 'NODAL'
+                                     GROUP_MA_1 : eboinf
+                                     GROUP_MA_2 : mcrbas 
+                                     VECT_NORM_2 : (-1. 0. 0.)
+                                     ) 
+                                     INFO : 1                  
+                         );
+%                            
+% Deplacement du systeme de maintien
+%
+cldi_f1 = DEFI_FONCTION ( NOM_PARA   : 'INST'
+                           PROL_DROIT : 'CONSTANT'
+                           PROL_GAUCHE: 'CONSTANT'
+                           VALE : ( 0.     0.  
+                                    1000.  0.1
+                                    2000.  0.2
+                                    3000.  0.2
+                                    4000.  0.2
+                                    5000.  0.2
+                                    6000.  0.1     
+                                    7000.  0.1      )
+                         );
+
+ cl_di_1  = AFFE_CHAR_MECA ( MODELE : mo1
+                % deplacement du systeme de maintien
+                         DDL_IMPO : ( GROUP_NO : main_sup
+                                      DX : -1.     
+                                    )
+                            );
+                                                        
+% DEFINITION DES FORCES EXTERIEURES
+%
+% Fonction multiplicative de la force hydrodynamique normee
+%
+hydr_f1  = DEFI_FONCTION ( NOM_PARA    : 'INST'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0.     0.      
+                                            1000.  0.1
+                                            2000.  0.2
+                                            3000.  0.2
+                                            4000.  0.2
+                                            5000.  0.2
+                                            6000.  0.1
+                                            7000.  0.1  )
+                          );
+%
+% Profil des forces hydrodynamiques tubes guides a froid
+%
+
+
+ hyfrtu_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : ( 0. 1.
+                               5. 2. )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );
+%
+% Profil des forces hydrodynamiques crayon a froid
+%
+
+
+ hyfrcr_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : (0. 1.
+                              5. 2. )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );
+%
+
+% Chargement : Forces hydrodynamiques 
+%
+ hydr_1   = AFFE_CHAR_MECA ( MODELE : mo1
+             % embout superieur
+                          FORCE_COQUE  : ( GROUP_MA : ebosup
+                                         FX : 10. )
+             % embout inferieur
+                          FORCE_COQUE  : ( GROUP_MA : eboinf
+                                         FX : 10.  )
+             % grille superieure
+                          FORCE_POUTRE : ( GROUP_MA : (gril10 )
+                                         FX : 10.   )
+             % grille inferieure
+                          FORCE_POUTRE : ( GROUP_MA : (gril1 )
+                                         FX : 10.    )
+             % grille de melange
+                          FORCE_POUTRE : ( GROUP_MA : (gril2 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril3 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril4 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril5 )
+                                         FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril6 )
+                                         FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril7 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril8 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril9 )
+                                         FX : 10.    )
+                          );
+ toto_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : ( 0. 10. 
+                               5. 10.  )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );                          
+%                         
+ fohydr_1 = AFFE_CHAR_MECA_F ( MODELE : mo1
+             % tubes guides et tube d'instrumentation
+                          FORCE_POUTRE : ( GROUP_MA : (guid        )
+                                           FX : toto_1  )
+             % crayons
+                          FORCE_POUTRE : ( GROUP_MA : cray
+                                           FX :  toto_1  )
+                            );
+%
+% Profil des forces d'Archimede tube guide 
+%
+
+
+ arfrtu_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : ( 0. 10. 
+                               5. 10.  )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );
+%
+% Profil des forces d'Archimede crayon 
+%
+
+
+ arfrcr_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : ( 0. 10.
+                               5. 10. )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );
+%
+% Fonction multiplicative de la force d'Archimede
+%
+arch_f1  = DEFI_FONCTION ( NOM_PARA    : 'INST'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0.     0.
+                                            1000.  0.1
+                                            2000.  0.2
+                                            3000.  0.2
+                                            4000.  0.2
+                                            5000.  0.2
+                                            6000.  0.1
+                                            7000.  0.1 )
+                          );
+%
+
+%
+% Chargement : Forces d'Archimede 
+% ----------------------------------------
+%
+   arch_1 = AFFE_CHAR_MECA ( MODELE : mo1
+             % systeme de maintien
+                     FORCE_POUTRE : ( GROUP_MA : maintien
+                               FX : 10. )
+             % embout superieur
+                          FORCE_COQUE  : ( GROUP_MA : ebosup
+                                    FX : 10. )
+             % embout inferieur
+                          FORCE_COQUE  : ( GROUP_MA : eboinf
+                                    FX : 10. )
+             % grille superieure
+                          FORCE_POUTRE : ( GROUP_MA : (gril10  )
+                                    FX : 10.  )
+             % grille inferieure
+                          FORCE_POUTRE : ( GROUP_MA : (gril1 )
+                                           FX : 10.  )
+             % grille de melange
+                          FORCE_POUTRE : ( GROUP_MA : (gril2 )
+                                           FX : 10.  )
+                          FORCE_POUTRE : ( GROUP_MA : (gril3 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril4 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril5 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril6 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril7 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril8 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril9 )
+                                           FX : 10.  )
+                          );
+ foarch_1 = AFFE_CHAR_MECA_F ( MODELE : mo1
+
+             % tubes guides et tube d'instrumentation
+                          FORCE_POUTRE : ( GROUP_MA : guid 
+                                           FX : arch_f1  )
+             % crayons
+                          FORCE_POUTRE : ( GROUP_MA : cray
+                                           FX :arch_f1  )
+                            );
+%
+% 
+% FORCE DE SERRAGE DE LA LIAISON GRILLE - CRAYON 
+%
+%
+
+%
+%
+%
+% definition de la liste d'instants
+%
+  l_frig   = DEFI_LIST_REEL( Debut: 0.0
+                             Intervalle : (Jusqu_a: 1000. Nombre: 100)
+                           );
+%
+% Inrterpretation des fonctions
+%
+f1=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f2=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f3=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f4=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f5=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f6=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f7=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f8=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f9=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f10=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+                         
+ frig1 = CALC_FONC_INTERP ( FONCTION    : f1
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig2 = CALC_FONC_INTERP ( FONCTION    : f2
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig3 = CALC_FONC_INTERP ( FONCTION    : f3
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig4 = CALC_FONC_INTERP ( FONCTION    : f4
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig5 = CALC_FONC_INTERP ( FONCTION    : f5
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                             INTERPOL    : 'LIN'
+                           );
+ frig6 = CALC_FONC_INTERP ( FONCTION    : f6
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig7 = CALC_FONC_INTERP ( FONCTION    : f7
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig8 = CALC_FONC_INTERP ( FONCTION    : f8
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig9 = CALC_FONC_INTERP ( FONCTION    : f9
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig10= CALC_FONC_INTERP ( FONCTION    : f10
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+%
+% DEFINITION DU FLUX NEUTRONIQUE RADIAL
+
+flux_f1=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00
+                         9.74520E+05   4.53280E+05   
+                         2.63880E+06   2.07785E+06
+                         4.08780E+06   3.51279E+06   
+                         5.42844E+06   4.85677E+06
+                         7.24500E+06   6.67627E+06   
+                         8.85348E+06   8.27977E+06
+                         1.04609E+07   9.87261E+06   
+                         1.22029E+07   1.15869E+07
+                         1.39446E+07   1.32952E+07   
+                         1.41437E+07   1.34902E+07
+                         1.55632E+07   1.48753E+07   
+                         1.72361E+07   1.65069E+07
+                         1.79482E+07   1.71992E+07   
+                         1.81901E+07   1.74334E+07
+                         1.81937E+07   1.74352E+07   
+                         1.81973E+07   1.74352E+07
+                         1.82009E+07   1.74352E+07
+                                )
+                       ) ;
+% Definition du flux axial pour le cycle 1
+
+fluxax1 = LIRE_FONCTION ( UNITE       : 60
+                           PROL_GAUCHE : 'CONSTANT'
+                           PROL_DROIT  : 'CONSTANT'
+                         );
+
+ fly_1_1  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    3.8032834757835D-07
+                -8.8200000000000D-02    3.8083689458689D-07
+                -7.5600000000000D-02    3.8296082621083D-07
+                -6.3000000000000D-02    3.8584009971510D-07
+                -5.0400000000000D-02    3.8946100427350D-07
+                -3.7800000000000D-02    3.9259455128205D-07
+                -2.5200000000000D-02    3.9258457977208D-07
+                -1.2600000000000D-02    3.9294106125356D-07
+               0.    3.9399554843305D-07
+                 1.2600000000000D-02    3.9293233618234D-07
+                 2.5200000000000D-02    3.9256712962963D-07
+                 3.7800000000000D-02    3.9256712962963D-07
+                 5.0400000000000D-02    3.8942610398860D-07
+                 6.3000000000000D-02    3.8579522792023D-07
+                 7.5600000000000D-02    3.8290972222222D-07
+                 8.8200000000000D-02    3.8077706552707D-07
+                 1.0080000000000D-01    3.8026103988604D-07
+                     ) ) ; 
+           
+ fly_1_2  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    4.3595566239316D-07
+                -8.8200000000000D-02    4.3866542022792D-07
+                -7.5600000000000D-02    4.4331463675214D-07
+                -6.3000000000000D-02    4.4911556267806D-07
+                -5.0400000000000D-02    4.5750658831909D-07
+                -3.7800000000000D-02    4.6647222222222D-07
+                -2.5200000000000D-02    4.6002938034188D-07
+                -1.2600000000000D-02    4.6004309116809D-07
+               0.    4.6686235754986D-07
+                 1.2600000000000D-02    4.6003311965812D-07
+                 2.5200000000000D-02    4.6000943732194D-07
+                 3.7800000000000D-02    4.6643981481481D-07
+                 5.0400000000000D-02    4.5746420940171D-07
+                 6.3000000000000D-02    4.4906445868946D-07
+                 7.5600000000000D-02    4.4325356125356D-07
+                 8.8200000000000D-02    4.3859686609687D-07
+                 1.0080000000000D-01    4.3587838319088D-07
+                     ) ) ; 
+           
+ fly_1_3  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    4.9431891025641D-07
+                -8.8200000000000D-02    5.0005128205128D-07
+                -7.5600000000000D-02    5.1337197293447D-07
+                -6.3000000000000D-02    5.2915313390313D-07
+                -5.0400000000000D-02    5.3788069800570D-07
+                -3.7800000000000D-02    5.3504629629630D-07
+                -2.5200000000000D-02    5.3221189458689D-07
+                -1.2600000000000D-02    5.3136431623932D-07
+               0.    5.3135870726496D-07
+                 1.2600000000000D-02    5.3135309829060D-07
+                 2.5200000000000D-02    5.3218696581197D-07
+                 3.7800000000000D-02    5.3500827991453D-07
+                 5.0400000000000D-02    5.3782959401709D-07
+                 6.3000000000000D-02    5.2909205840456D-07
+                 7.5600000000000D-02    5.1330217236467D-07
+                 8.8200000000000D-02    4.9997150997151D-07
+                 1.0080000000000D-01    4.9423165954416D-07
+                     ) ) ; 
+           
+ fly_1_4  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    5.5489957264957D-07
+                -8.8200000000000D-02    5.6477884615385D-07
+                -7.5600000000000D-02    5.9007781339031D-07
+                -6.3000000000000D-02    5.9726415598291D-07
+                -5.0400000000000D-02    6.0445049857550D-07
+                -3.7800000000000D-02    5.9840776353276D-07
+                -2.5200000000000D-02    5.8440651709402D-07
+                -1.2600000000000D-02    5.8263906695157D-07
+               0.    5.9153240740741D-07
+                 1.2600000000000D-02    5.8262660256410D-07
+                 2.5200000000000D-02    5.8438034188034D-07
+                 3.7800000000000D-02    5.9836663105413D-07
+                 5.0400000000000D-02    6.0439316239316D-07
+                 6.3000000000000D-02    5.9719497863248D-07
+                 7.5600000000000D-02    5.8999679487179D-07
+                 8.8200000000000D-02    5.6469159544160D-07
+                 1.0080000000000D-01    5.5480110398860D-07
+                     ) ) ; 
+           
+ fly_1_5  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    6.1267200854701D-07
+                -8.8200000000000D-02    6.2962357549858D-07
+                -7.5600000000000D-02    6.5655413105413D-07
+                -6.3000000000000D-02    6.6164583333333D-07
+                -5.0400000000000D-02    6.5190242165242D-07
+                -3.7800000000000D-02    6.5212678062678D-07
+                -2.5200000000000D-02    6.3746616809117D-07
+                -1.2600000000000D-02    6.3547435897436D-07
+               0.    6.4509686609687D-07
+                 1.2600000000000D-02    6.3546064814815D-07
+                 2.5200000000000D-02    6.3743625356125D-07
+                 3.7800000000000D-02    6.5207941595442D-07
+                 5.0400000000000D-02    6.5183885327635D-07
+                 6.3000000000000D-02    6.6156980056980D-07
+                 7.5600000000000D-02    6.5646563390313D-07
+                 8.8200000000000D-02    6.2952386039886D-07
+                 1.0080000000000D-01    6.1256356837607D-07
+                     ) ) ; 
+           
+ fly_1_6  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    6.5755128205128D-07
+                -8.8200000000000D-02    6.8336253561254D-07
+                -7.5600000000000D-02    6.9012072649573D-07
+                -6.3000000000000D-02    6.9687891737892D-07
+                -5.0400000000000D-02    6.9362571225071D-07
+                -3.7800000000000D-02    6.9074768518519D-07
+                -2.5200000000000D-02    6.8786965811966D-07
+                -1.2600000000000D-02    6.8586413817664D-07
+               0.    6.8585603632479D-07
+                 1.2600000000000D-02    6.8584793447293D-07
+                 2.5200000000000D-02    6.8783600427350D-07
+                 3.7800000000000D-02    6.9069720441595D-07
+                 5.0400000000000D-02    6.9355840455840D-07
+                 6.3000000000000D-02    6.9679789886040D-07
+                 7.5600000000000D-02    6.9002412749288D-07
+                 8.8200000000000D-02    6.8325035612536D-07
+                 1.0080000000000D-01    6.5743162393162D-07
+                     ) ) ; 
+           
+ fly_1_7  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    6.9684526353276D-07
+                -8.8200000000000D-02    7.1406606125356D-07
+                -7.5600000000000D-02    7.3236502849003D-07
+                -6.3000000000000D-02    7.2076442307692D-07
+                -5.0400000000000D-02    7.1793500712251D-07
+                -3.7800000000000D-02    7.2835648148148D-07
+                -2.5200000000000D-02    7.1444747150997D-07
+                -1.2600000000000D-02    7.1130893874644D-07
+               0.    7.2107727920228D-07
+                 1.2600000000000D-02    7.1129398148148D-07
+                 2.5200000000000D-02    7.1441257122507D-07
+                 3.7800000000000D-02    7.2830288461538D-07
+                 5.0400000000000D-02    7.1786396011396D-07
+                 6.3000000000000D-02    7.2067841880342D-07
+                 7.5600000000000D-02    7.3226157407407D-07
+                 8.8200000000000D-02    7.1395138888889D-07
+                 1.0080000000000D-01    6.9671812678063D-07
+                     ) ) ; 
+           
+ fly_1_8  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    7.3679362535613D-07
+                -8.8200000000000D-02    7.5423130341880D-07
+                -7.5600000000000D-02    7.7215633903134D-07
+                -6.3000000000000D-02    7.5865740740741D-07
+                -5.0400000000000D-02    7.5547774216524D-07
+                -3.7800000000000D-02    7.6662464387464D-07
+                -2.5200000000000D-02    7.5088461538462D-07
+                -1.2600000000000D-02    7.4313924501424D-07
+               0.    7.4863230056980D-07
+                 1.2600000000000D-02    7.4312054843305D-07
+                 2.5200000000000D-02    7.5084722222222D-07
+                 3.7800000000000D-02    7.6656730769231D-07
+                 5.0400000000000D-02    7.5540170940171D-07
+                 6.3000000000000D-02    7.5856267806268D-07
+                 7.5600000000000D-02    7.7204415954416D-07
+                 8.8200000000000D-02    7.5410790598291D-07
+                 1.0080000000000D-01    7.3665776353276D-07
+                     ) ) ; 
+           
+ fly_1_9  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    7.7370940170940D-07
+                -8.8200000000000D-02    8.0144764957265D-07
+                -7.5600000000000D-02    8.0374358974359D-07
+                -6.3000000000000D-02    8.0603952991453D-07
+                -5.0400000000000D-02    8.0238372507123D-07
+                -3.7800000000000D-02    7.9936672008547D-07
+                -2.5200000000000D-02    7.9634971509972D-07
+                -1.2600000000000D-02    7.8317361111111D-07
+               0.    7.8316426282051D-07
+                 1.2600000000000D-02    7.8315491452991D-07
+                 2.5200000000000D-02    7.9631107549858D-07
+                 3.7800000000000D-02    7.9930689102564D-07
+                 5.0400000000000D-02    8.0230270655271D-07
+                 6.3000000000000D-02    8.0593856837607D-07
+                 7.5600000000000D-02    8.0362580128205D-07
+                 8.8200000000000D-02    8.0131303418803D-07
+                 1.0080000000000D-01    7.7356356837607D-07
+                     ) ) ; 
+           
+ fly_1_10 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    7.9424198717949D-07
+                -8.8200000000000D-02    8.1225925925926D-07
+                -7.5600000000000D-02    8.3075516381766D-07
+                -6.3000000000000D-02    8.1540651709402D-07
+                -5.0400000000000D-02    8.1131071937322D-07
+                -3.7800000000000D-02    8.2297489316239D-07
+                -2.5200000000000D-02    8.0577403846154D-07
+                -1.2600000000000D-02    7.9717236467236D-07
+               0.    8.0284615384615D-07
+                 1.2600000000000D-02    7.9715117521368D-07
+                 2.5200000000000D-02    8.0573165954416D-07
+                 3.7800000000000D-02    8.2291257122507D-07
+                 5.0400000000000D-02    8.1122845441595D-07
+                 6.3000000000000D-02    8.1530306267806D-07
+                 7.5600000000000D-02    8.3063051994302D-07
+                 8.8200000000000D-02    8.1211841168091D-07
+                 1.0080000000000D-01    7.9408742877493D-07
+                     ) ) ; 
+           
+ fly_1_11 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.1647845441595D-07
+                -8.8200000000000D-02    8.3510648148148D-07
+                -7.5600000000000D-02    8.5487873931624D-07
+                -6.3000000000000D-02    8.3969088319088D-07
+                -5.0400000000000D-02    8.3502920227920D-07
+                -3.7800000000000D-02    8.4651014957265D-07
+                -2.5200000000000D-02    8.2973931623932D-07
+                -1.2600000000000D-02    8.2549269943020D-07
+               0.    8.3637909544160D-07
+                 1.2600000000000D-02    8.2547275641026D-07
+                 2.5200000000000D-02    8.2969319800570D-07
+                 3.7800000000000D-02    8.4644408831909D-07
+                 5.0400000000000D-02    8.3493945868946D-07
+                 6.3000000000000D-02    8.3957995014245D-07
+                 7.5600000000000D-02    8.5474786324786D-07
+                 8.8200000000000D-02    8.3495690883191D-07
+                 1.0080000000000D-01    8.1631641737892D-07
+                     ) ) ; 
+           
+ fly_1_12 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.3948272792023D-07
+                -8.8200000000000D-02    8.7002546296296D-07
+                -7.5600000000000D-02    8.7608564814815D-07
+                -6.3000000000000D-02    8.8214583333333D-07
+                -5.0400000000000D-02    8.7589245014245D-07
+                -3.7800000000000D-02    8.7128872863248D-07
+                -2.5200000000000D-02    8.6668500712251D-07
+                -1.2600000000000D-02    8.6321616809117D-07
+               0.    8.6320432692308D-07
+                 1.2600000000000D-02    8.6319248575499D-07
+                 2.5200000000000D-02    8.6663764245014D-07
+                 3.7800000000000D-02    8.7121705840456D-07
+                 5.0400000000000D-02    8.7579647435897D-07
+                 6.3000000000000D-02    8.8202617521368D-07
+                 7.5600000000000D-02    8.7594667022792D-07
+                 8.8200000000000D-02    8.6986716524217D-07
+                 1.0080000000000D-01    8.3931196581197D-07
+                     ) ) ; 
+           
+ fly_1_13 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.5508315527066D-07
+                -8.8200000000000D-02    8.7546616809117D-07
+                -7.5600000000000D-02    9.0944533475783D-07
+                -6.3000000000000D-02    9.1292663817664D-07
+                -5.0400000000000D-02    8.9653721509972D-07
+                -3.7800000000000D-02    8.9547275641026D-07
+                -2.5200000000000D-02    8.7405644586895D-07
+                -1.2600000000000D-02    8.7004789886040D-07
+               0.    8.8226549145299D-07
+                 1.2600000000000D-02    8.7002546296296D-07
+                 2.5200000000000D-02    8.7400534188034D-07
+                 3.7800000000000D-02    8.9539672364672D-07
+                 5.0400000000000D-02    8.9643376068376D-07
+                 6.3000000000000D-02    9.1279825498576D-07
+                 7.5600000000000D-02    9.0929576210826D-07
+                 8.8200000000000D-02    8.7530288461538D-07
+                 1.0080000000000D-01    8.5490491452991D-07
+                     ) ) ; 
+           
+ fly_1_14 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.5798237179487D-07
+                -8.8200000000000D-02    8.6880893874644D-07
+                -7.5600000000000D-02    9.0299750712251D-07
+                -6.3000000000000D-02    9.0948646723647D-07
+                -5.0400000000000D-02    9.1597542735043D-07
+                -3.7800000000000D-02    9.0500302706553D-07
+                -2.5200000000000D-02    8.8214084757835D-07
+                -1.2600000000000D-02    8.7779825498575D-07
+               0.    8.8993732193732D-07
+                 1.2600000000000D-02    8.7777207977208D-07
+                 2.5200000000000D-02    8.8208974358974D-07
+                 3.7800000000000D-02    9.0492325498576D-07
+                 5.0400000000000D-02    9.1586574074074D-07
+                 6.3000000000000D-02    9.0935434472934D-07
+                 7.5600000000000D-02    9.0284294871795D-07
+                 8.8200000000000D-02    8.6864066951567D-07
+                 1.0080000000000D-01    8.5779665242165D-07
+                     ) ) ; 
+           
+ fly_1_15 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.5773557692308D-07
+                -8.8200000000000D-02    8.6180893874644D-07
+                -7.5600000000000D-02    8.7862838319088D-07
+                -6.3000000000000D-02    8.9924074074074D-07
+                -5.0400000000000D-02    9.0872489316239D-07
+                -3.7800000000000D-02    9.0174545940171D-07
+                -2.5200000000000D-02    8.9476602564103D-07
+                -1.2600000000000D-02    8.9122364672365D-07
+               0.    8.9120993589744D-07
+                 1.2600000000000D-02    8.9119622507123D-07
+                 2.5200000000000D-02    8.9471118233618D-07
+                 3.7800000000000D-02    9.0166132478632D-07
+                 5.0400000000000D-02    9.0861146723647D-07
+                 6.3000000000000D-02    8.9910363247863D-07
+                 7.5600000000000D-02    8.7847257834758D-07
+                 8.8200000000000D-02    8.6163693019943D-07
+                 1.0080000000000D-01    8.5754362535613D-07
+                     ) ) ; 
+           
+ fly_1_16 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.5903935185185D-07
+                -8.8200000000000D-02    8.5690046296296D-07
+                -7.5600000000000D-02    8.5831018518519D-07
+                -6.3000000000000D-02    8.6167307692308D-07
+                -5.0400000000000D-02    8.7125320512821D-07
+                -3.7800000000000D-02    8.8563586182336D-07
+                -2.5200000000000D-02    8.7089298433048D-07
+                -1.2600000000000D-02    8.6842877492877D-07
+               0.    8.7942111823362D-07
+                 1.2600000000000D-02    8.6840135327635D-07
+                 2.5200000000000D-02    8.7083814102564D-07
+                 3.7800000000000D-02    8.8554985754986D-07
+                 5.0400000000000D-02    8.7113977920228D-07
+                 6.3000000000000D-02    8.6153846153846D-07
+                 7.5600000000000D-02    8.5815313390313D-07
+                 8.8200000000000D-02    8.5672471509972D-07
+                 1.0080000000000D-01    8.5884116809117D-07
+                     ) ) ; 
+           
+ fly_1_17 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.6388675213675D-07
+                -8.8200000000000D-02    8.5563782051282D-07
+                -7.5600000000000D-02    8.5087019230769D-07
+                -6.3000000000000D-02    8.4755965099715D-07
+                -5.0400000000000D-02    8.4761698717949D-07
+                -3.7800000000000D-02    8.5133636039886D-07
+                -2.5200000000000D-02    8.4844088319088D-07
+                -1.2600000000000D-02    8.4633689458689D-07
+               0.    8.4644658119658D-07
+                 1.2600000000000D-02    8.4630947293447D-07
+                 2.5200000000000D-02    8.4838479344729D-07
+                 3.7800000000000D-02    8.5125160256410D-07
+                 5.0400000000000D-02    8.4750480769231D-07
+                 6.3000000000000D-02    8.4742378917379D-07
+                 7.5600000000000D-02    8.5071064814815D-07
+                 8.8200000000000D-02    8.5545584045584D-07
+                 1.0080000000000D-01    8.6368108974359D-07
+                     ) ) ; 
+           
+ fluxrd1 = DEFI_NAPPE ( 
+                     NOM_PARA : 'Z'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                PARA : ( 
+                         -1.0080000000000D-01
+                         -8.8200000000000D-02
+                         -7.5600000000000D-02
+                         -6.3000000000000D-02
+                         -5.0400000000000D-02
+                         -3.7800000000000D-02
+                         -2.5200000000000D-02
+                         -1.2600000000000D-02
+                        0.
+                          1.2600000000000D-02
+                          2.5200000000000D-02
+                          3.7800000000000D-02
+                          5.0400000000000D-02
+                          6.3000000000000D-02
+                          7.5600000000000D-02
+                          8.8200000000000D-02
+                          1.0080000000000D-01
+                ) 
+                FONCTION : ( 
+                      fly_1_1 
+                      fly_1_2 
+                      fly_1_3 
+                      fly_1_4 
+                      fly_1_5 
+                      fly_1_6 
+                      fly_1_7 
+                      fly_1_8 
+                      fly_1_9 
+                      fly_1_10
+                      fly_1_11
+                      fly_1_12
+                      fly_1_13
+                      fly_1_14
+                      fly_1_15
+                      fly_1_16
+                      fly_1_17
+                ) 
+                ); 
+%
+% DEFINITION DES MATERIAUX ET AFFECTATIONS
+%
+%           **** DEFINITION DES MATERIAUX SANS FLUX NEUTRONIQUE ****
+%
+%
+
+
+% Famille assemblage : numero_fam
+%
+% Embout superieur
+
+e_es  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.   )
+                          );
+nu_es  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.     )
+                          );
+al_es  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.  )
+                          );
+ mt_es  = DEFI_MATERIAU ( ELAS_FO : (    E  : e_es
+                                         NU : nu_es
+                                      ALPHA : al_es
+                                        RHO : 7800.
+                                   )
+                          );
+% Embout inferieur
+
+e_ei  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.  )
+                          );
+nu_ei = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.    )
+                          );
+al_ei = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3. )
+                          );
+ mt_ei  = DEFI_MATERIAU ( ELAS_FO : (    E     : e_ei
+                                         NU    : nu_ei
+                                         ALPHA : al_ei
+                                         RHO   : 12.
+                                   )
+                          );
+ mt_rig  = DEFI_MATERIAU ( ELAS : (   E     : 1.
+                                      NU    : 0.
+                                      ALPHA : 0. 
+                                      RHO   : 0.)
+                         );
+% Fonction couple en fonction de drz pour la liaison grille/crayon
+
+ fotrac= DEFI_FONCTION ( NOM_PARA   : 'DRZ'
+                           VALE       : ( 1. 1.
+                                          0. 0.
+                                          0. 0.
+                                          0. 0.
+                                         )
+                         PROL_DROIT : 'LINEAIRE'
+                         PROL_GAUCHE: 'LINEAIRE' );
+
+
+ mt_re1 = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                            RELA_MZ  : fotrac
+                                            RIGI_N_FO:frig1
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re2 = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB      : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig2
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re3  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig3
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re4  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig4
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re5  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig5
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re6  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig6
+                                     EFFO_N_INIT :-35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re7  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig7
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re8  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig8
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re9  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   :frig9
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re10 = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig10
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+
+
+% Systeme de maintien
+ e_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                              PROL_DROIT  : 'CONSTANT'
+                              PROL_GAUCHE : 'CONSTANT'
+                              VALE        : ( 0. 1.
+                                              5. 2. )
+                            );
+                            
+ nu_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                               PROL_DROIT  : 'CONSTANT'
+                               PROL_GAUCHE : 'CONSTANT'
+                               VALE        : ( 0. 1.
+                                               5. 2.   )
+                             );
+                             
+ al_ma    = DEFI_CONSTANTE (  VALE        :  0.3  );
+                          
+ sy_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                              PROL_DROIT  : 'CONSTANT'
+                               PROL_GAUCHE : 'CONSTANT'
+                               VALE        : ( 0. 1.
+                                               5. 2. )
+                              );
+                          
+ ds_ma    = DEFI_CONSTANTE (  VALE        :  0.3 );
+                          
+ np_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                               PROL_DROIT  : 'CONSTANT'
+                               PROL_GAUCHE : 'CONSTANT'
+                               VALE        : ( 0. 1.
+                                               5. 2. )
+                              ); 
+                               
+ mey_ma  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                               PROL_DROIT  : 'CONSTANT'
+                                PROL_GAUCHE : 'CONSTANT'
+                                VALE        : ( 0. 1.
+                                                5. 2.  )
+                              );
+                              
+ mpy_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                                PROL_DROIT  : 'CONSTANT'
+                                PROL_GAUCHE : 'CONSTANT'
+                                VALE        : ( 0. 1.
+                                                5. 2.  )
+                              );
+                              
+ mez_ma     = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                                PROL_DROIT  : 'CONSTANT'
+                                PROL_GAUCHE : 'CONSTANT'
+                                VALE        : ( 0. 1.
+                                                5. 2.  )
+                               );
+                               
+ mpz_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                               PROL_DROIT  : 'CONSTANT'
+                               PROL_GAUCHE : 'CONSTANT'
+                               VALE        : (0. 1.
+                                              5. 2.  )
+                             );
+                             
+ cay_ma    = DEFI_CONSTANTE (  VALE        :  0.3 );
+
+ cby_ma    = DEFI_CONSTANTE (  VALE        :   0.3  );
+
+ caz_ma    = DEFI_CONSTANTE (  VALE        :   0.3 );
+
+ cbz_ma    = DEFI_CONSTANTE (  VALE        :   0.3 ); 
+
+ mpx_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.  )
+                          ); 
+                           
+mt_ma     = DEFI_MATERIAU ( ELAS_FO : (  E       : e_ma 
+                                            NU    : nu_ma 
+                                            ALPHA : al_ma 
+                                            RHO   : 7800. )
+                            ECRO_LINE_FO:   ( D_SIGM_EPSI:ds_ma
+                                              SY : sy_ma   )
+                            VMIS_POUTRE_FO: ( NP : np_ma
+                                              MEY: mey_ma
+                                              MPY: mpy_ma
+                                              CAY: cay_ma
+                                              CBY: cby_ma
+                                              MEZ: mez_ma
+                                              MPZ: mpz_ma
+                                              CAZ: caz_ma
+                                              CBZ: cbz_ma
+                                              MPX: mpx_ma )
+                          );
+               
+%
+%           **** DEFINITION DES MATERIAUX AVEC FLUX NEUTRONIQUE ****
+%
+%
+
+% Grille
+
+
+
+e_gre     = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.   )
+                          );
+         
+e_grm     = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.   )
+                          );
+                          
+nu_gre    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.       )
+                          );
+                          
+nu_grm    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.      )
+                          );
+                          
+al_gre    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.  )
+                          );
+                         
+al_grm    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.  )
+                          ); 
+                                                                                                 
+% Tube guide
+
+e_tu     = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.
+                                          )
+                          );
+
+nu_tu    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.     )
+                          );
+                          
+al_tu    = DEFI_FONCTION (  NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.  )
+                          );
+
+
+
+
+% Crayon
+
+e_cr     = DEFI_FONCTION (  NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.
+                                          )
+                          );
+                         
+nu_cr    = DEFI_FONCTION (  NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.    )
+                          );
+
+al_cr    = DEFI_FONCTION (  NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.  )
+                          );
+
+
+% GRANDISSEMENT DES GRILLES
+
+
+
+% Grilles extremes 1 et 10
+
+mt_gre1  = DEFI_MATERIAU ( ELAS_FO : ( E     : e_gre
+                                        NU    : nu_gre
+                                        ALPHA : al_gre
+                                        RHO   : 7800. )
+                                          GRAN_IRRA:( FLUX_L   :fluxax1
+                                        FLUX_TN  :fluxrd1
+                                        FONC_MULT:flux_f1
+                                        A        : 0.
+                                        S        : 1. )
+                            LEMAITRE :( N        : 0.
+                                        UN_SUR_K : 0.
+                                        UN_SUR_M : 0.
+                                        QSR_K    : 1.  )
+                          );          
+                          
+% Grilles de melange       
+mt_grm1= DEFI_MATERIAU ( ELAS_FO : ( E        : e_grm
+                                      NU       : nu_grm
+                                      ALPHA    : al_grm
+                                      RHO      : 7800.  )
+                           GRAN_IRRA: ( FLUX_L  :fluxax1
+                                       FLUX_TN  :fluxrd1
+                                       FONC_MULT:flux_f1
+                                       A        : 0.
+                                       S        : 1. )
+                           LEMAITRE : (N        : 0.
+                                       UN_SUR_K : 0.
+                                       UN_SUR_M : 0.
+                                       QSR_K    : 2. )
+                          );
+
+% Definition des materiaux viscoplastiques ( tubes et crayons )
+
+
+mt_tu1  = DEFI_MATERIAU ( ELAS_FO : ( E         : e_tu
+                                        NU       : nu_tu
+                                        ALPHA    : al_tu
+                                        RHO      : 7800. )
+                           GRAN_IRRA: ( FLUX_L   : fluxax1
+                                        FLUX_TN  : fluxrd1
+                                        FONC_MULT: flux_f1
+                                        A        : 0.
+                                        S        : 1.)
+                           LEMAITRE : ( N        : 0.
+                                        UN_SUR_K : 0.
+                                        UN_SUR_M : 0.
+                                        QSR_K    : 2.)
+                          );
+
+
+ mt_cr1  = DEFI_MATERIAU (ELAS_FO : ( E        : e_cr
+                                        NU       : nu_cr
+                                        ALPHA    : al_cr
+                                        RHO      :7800.  )
+                           GRAN_IRRA: ( FLUX_L   : fluxax1
+                                        FLUX_TN  : fluxrd1
+                                        FONC_MULT: flux_f1
+                                        A        : 0.
+                                        S        : 1.)
+                                         LEMAITRE : ( N        : 0.
+                                        UN_SUR_K : 0.
+                                        UN_SUR_M : 0.
+                                        QSR_K    : 2.)         
+                           
+                                    );
+
+%
+%           AFFECTATION DES MATERIAUX A CHAUD - CYCLE  
+%
+%
+ a_mat_1  = AFFE_MATERIAU ( MAILLAGE : ma1
+          
+  % systeme de maintien
+                         AFFE : ( GROUP_MA : (mainti_y, mainti_z)
+                                  MATER : mt_ma
+                                  TEMP_REF: 100.
+                                ) 
+           % grilles de melange
+                         AFFE : ( GROUP_MA : gril_i
+                                  MATER : mt_grm1
+                                  TEMP_REF: 100.
+                                ) 
+           % grilles de extremes
+                         AFFE : ( GROUP_MA : gril_e 
+                                  MATER : mt_gre1
+                                  TEMP_REF: 100.
+                                ) 
+           % crayons combustibles
+                         AFFE : ( GROUP_MA : cray
+                                  MATER : mt_cr1
+                                  TEMP_REF: 100.
+                                )
+           % tubes guides
+                         AFFE : ( GROUP_MA : guid
+                                  MATER : mt_tu1
+                                  TEMP_REF: 100.
+                                )
+           % embout inferieur
+                         AFFE : ( GROUP_MA : eboinf
+                                  MATER : mt_ei
+                                  TEMP_REF: 100.
+                                )
+           %pieds
+                         AFFE : ( GROUP_MA :(pi_ple, pi_tro)
+                                  MATER : mt_ei
+                                 TEMP_REF: 100.
+                                )
+
+           % embout superieur
+                         AFFE : ( GROUP_MA : ebosup
+                                  MATER : mt_es
+                                  TEMP_REF: 100.
+                                )
+           % liaison grille tubes guides
+                         AFFE : ( GROUP_MA : rigid
+                                  MATER : mt_rig
+                                  TEMP_REF: 100.
+                                )
+          
+           % liaison grille crayon
+                         AFFE : ( GROUP_MA : ela1
+                                  MATER : mt_re1
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela2
+                                  MATER : mt_re2
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela3
+                                  MATER : mt_re3
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela4
+                                  MATER : mt_re4
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela5
+                                  MATER : mt_re5
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela6
+                                  MATER : mt_re6
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela7
+                                  MATER : mt_re7
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela8
+                                  MATER : mt_re8
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela9
+                                  MATER : mt_re9
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela10
+                                  MATER : mt_re10
+                                  TEMP_REF: 100.
+                                )
+                     );
+%
+
+
+ L_INST_1 = DEFI_LIST_REEL(
+                         DEBUT: 0.0
+                         INTERVALLE : (JUSQU_A: 0.5    NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 1000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 2000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 3000.  NOMBRE: 5   )
+                         INTERVALLE : (JUSQU_A: 4000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 5000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 6000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 7000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 8000.  NOMBRE: 1   ));
+                         
+ L_ARCH_1 = DEFI_LIST_REEL(
+                         DEBUT: 0.0
+                         INTERVALLE : (JUSQU_A: 0.5     NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 1000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 2000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 3000.   NOMBRE: 5  )
+                         INTERVALLE : (JUSQU_A: 4000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 5000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 6000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 7000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 8000.   NOMBRE: 1  ));
+                         
+%
+% CALCUL PHASE I A V DU CYCLE 1
+%
+
+  RESU = STAT_NON_LINE( MODELE     : mo1
+                        CHAM_MATER : a_mat_1
+                        CARA_ELEM  : cara1
+                        EXCIT :( CHARGE : arch_1   FONC_MULT: arch_f1 )
+                        EXCIT :( CHARGE : foarch_1 FONC_MULT: arch_f1 )
+                        EXCIT :( CHARGE : hydr_1   FONC_MULT: hydr_f1 )
+                        EXCIT :( CHARGE : fohydr_1 FONC_MULT: hydr_f1 )
+                        EXCIT :( CHARGE : cl_di_1  FONC_MULT: cldi_f1 )
+                        EXCIT :( CHARGE : cl_per_1 )
+                        EXCIT :( CHARGE : cl_ctc   )
+                        EXCIT :( CHARGE : pesant_1 )
+                        EXCIT :( CHARGE : therm_1  )
+                        COMP_INCR :(RELATION :'VMIS_POU_LINE'
+                                    GROUP_MA : maintien)
+                        COMP_INCR :(RELATION :'ASSE_COMBU'
+                                    GROUP_MA : (crayons tub_guid     ))
+                        COMP_INCR :( RELATION :'DIS_CONTACT'
+                                     GROUP_MA : li_gr_cr)
+                        COMP_INCR :(RELATION :'ELAS'
+                                    COQUE_NCOU : 1
+                                    GROUP_MA :(embo_inf embo_sup pieds 
+                                               grilles li_gr_gu ))
+                     
+                        INCREMENT :( LIST_INST : l_inst_1
+                                     NUME_INST_FIN  :  20  
+                                   )
+                        
+                        NEWTON : ( MATRICE       : 'TANGENTE'
+                                   REAC_ITER    : 1          )
+                        RECH_LINEAIRE : (ITER_LINE_MAXI: 3)
+                        CONVERGENCE : (RESI_GLOB_RELA: 1.E-4
+                                       ITER_GLOB_MAXI: 50 
+                                       ITER_INTE_MAXI: 500
+                                       ARRET         : 'OUI' )
+                        SOLVEUR : ( METHODE : 'MULT_FRONT'
+                                    RENUM   : 'MD' )
+                        PARM_THETA : 0.5
+                        ARCHIVAGE : ( LIST_INST : l_arch_1)
+                      );
+                      
+fin();
diff --git a/Editeur/Interp.py b/Editeur/Interp.py
new file mode 100644 (file)
index 0000000..5b320e1
--- /dev/null
@@ -0,0 +1,139 @@
+#@ MODIF Interp Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+
+import Tkinter,ScrolledText
+import os, sys, string, traceback 
+import code
+
+sys.ps1 = ">>> "
+sys.ps2 = "... "
+
+class PythonInterpreter( code.InteractiveConsole):
+    def __init__( self, text, namespace = None):
+        code.InteractiveConsole.__init__( self, namespace)
+        self.text = text
+
+    def showtraceback( self):
+        start = self.text.pos + " - 1 lines"
+        code.InteractiveConsole.showtraceback( self)
+        end = self.text.pos
+        self.text.tag_add( "exception", start, end)
+
+class InterpWindow(Tkinter.Toplevel):
+    def __init__(self,namespace, parent=None):
+        Tkinter.Toplevel.__init__(self,parent)
+        self._initTkWidgets()
+        self.stdout = self.stderr = self
+        self.pos = '1.0'
+        self.history = [ '' ]
+        self.hpos = 0
+        self.tabCount = 0
+        self.shell = PythonInterpreter( self,namespace)
+        self.write("Python %s on %s\n%s\n(%s)\n" %
+                       (sys.version, sys.platform, sys.copyright,
+                        self.__class__.__name__))
+        self.write( sys.ps1)
+        self.text.focus_set()
+
+    def _initTkWidgets( self):
+        self.text = ScrolledText.ScrolledText( self, bg = "white",fg="black", wrap="word")
+        self.text.pack( fill='both', expand = 1)
+        self.text.bind( '<KeyPress>', self.clearMsg)
+        self.text.bind( '<Return>', self.inputhandler)
+        self.text.bind( '<Up>', self.uphistory)
+        self.text.bind( '<Down>', self.downhistory)
+        self.text.bind( '<Control-a>', self.goto_sol)
+        self.text.bind( '<Control-d>', self.sendeof)
+        self.text.tag_config("exception", foreground = "red")
+
+    def swapStdFiles(self):
+        sys.stdout,self.stdout = self.stdout,sys.stdout
+        sys.stderr,self.stderr = self.stderr,sys.stderr
+
+    def write(self, data):
+        self.text.insert("end", data)
+        self.pos = self.text.index("end - 1 char")
+        self.text.yview_pickplace("end")
+
+    def tag_add( self, tag, start, end):
+        self.text.tag_add( tag, start, end)
+
+    def inputhandler(self, *args):
+        # Remove any extraneous stuff
+        self.text.delete( self.pos + " lineend", "end")
+        # Now get the line
+        line = self.text.get(self.pos, "end - 1 char")
+        self.text.insert("end", "\n")
+        self.pos = self.text.index("end")
+        self.addHistory( line)
+        self.swapStdFiles()
+        if self.shell.push( line):
+            self.write(sys.ps2)
+        else:
+            self.write(sys.ps1)
+        self.swapStdFiles()
+        self.text.mark_set("insert", "end")
+        return "break"
+
+    def addHistory( self, line):
+        if line:
+            self.history.insert( len( self.history) - 1, line)
+            self.hpos = len( self.history) - 1
+
+    def sendeof(self, *args):
+        self.destroy()
+        return "break"
+
+    def uphistory(self, event=None):
+        if not self.history: return "break"
+
+        if self.hpos > 0:
+            self.hpos = self.hpos - 1
+
+        line = self.history[ self.hpos]
+        self.text.delete( self.pos, "end")
+        self.text.insert( self.pos, line)
+
+        return "break"
+
+    def downhistory( self, event=None):
+        if not self.history: return "break"
+
+        if self.hpos < (len( self.history) - 1):
+            self.hpos = self.hpos + 1
+
+        line = self.history[ self.hpos]
+        self.text.delete( self.pos, "end")
+        self.text.insert( self.pos, line)
+
+        return "break"
+
+    def goto_sol( self, event=None):
+        """
+        Met en mode edition la ligne courante
+        """
+        self.text.mark_set( 'insert', 'insert linestart + 4 chars')
+        return "break"
+        
+    def clearMsg( self, event=None):
+        index = self.text.index( "insert")
+        self.text.delete( "insert lineend", "end")
+        self.tabCount = 0
+
+if __name__ == "__main__":
+    app = Tkinter.Tk()
+    d={'a':1}
+
+    def go():
+      InterpWindow(d,parent=app)
+
+    Tkinter.Button(app,text="Interp",command=go).pack()
+    Tkinter.Button(app,text="Quit",command=app.destroy).pack()
+
+    app.mainloop()
+
diff --git a/Editeur/Objecttreeitem.py b/Editeur/Objecttreeitem.py
new file mode 100644 (file)
index 0000000..7e9ff7d
--- /dev/null
@@ -0,0 +1,459 @@
+"""
+"""
+# import généraux
+import types,string,os,glob,imp,sys
+from repr import Repr
+from copy import copy,deepcopy
+
+myrepr = Repr()
+myrepr.maxstring = 100
+myrepr.maxother = 100
+
+class TreeItem:
+
+    """Abstract class representing tree items.
+
+    Methods should typically be overridden, otherwise a default action
+    is used.
+
+    """
+
+    def __init__(self):
+        """Constructor.  Do whatever you need to do."""
+
+    def GetText(self):
+        """Return text string to display."""
+
+    def GetLabelText(self):
+        """Return label text string to display in front of text (if any)."""
+
+    expandable = None
+
+    def _IsExpandable(self):
+        """Do not override!  Called by TreeNode."""
+        if self.expandable is None:
+            self.expandable = self.IsExpandable()
+        return self.expandable
+
+    def IsExpandable(self):
+        """Return whether there are subitems."""
+        return 1
+
+    def _GetSubList(self):
+        """Do not override!  Called by TreeNode."""
+        if not self.IsExpandable():
+            return []
+        sublist = self.GetSubList()
+        if not sublist:
+            self.expandable = 0
+        return sublist
+
+    def IsEditable(self):
+        """Return whether the item's text may be edited."""
+
+    def SetText(self, text):
+        """Change the item's text (if it is editable)."""
+
+    def GetIconName(self):
+        """Return name of icon to be displayed normally."""
+
+    def GetSelectedIconName(self):
+        """Return name of icon to be displayed when selected."""
+
+    def GetSubList(self):
+        """Return list of items forming sublist."""
+
+    def OnDoubleClick(self):
+        """Called on a double-click on the item."""
+
+class Delegate:
+    def __init__(self, delegate=None):
+        self.object = delegate
+        self.__cache = {}
+
+    def setdelegate(self, delegate):
+        self.resetcache()
+        self.object = delegate
+
+    def getdelegate(self):
+        return self.object
+
+    def __getattr__(self, name):
+        attr = getattr(self.object, name) # May raise AttributeError
+        setattr(self, name, attr)
+        self.__cache[name] = attr
+        return attr
+
+    def resetcache(self):
+        for key in self.__cache.keys():
+            try:
+                delattr(self, key)
+            except AttributeError:
+                pass
+        self.__cache.clear()
+
+    def cachereport(self):
+        keys = self.__cache.keys()
+        keys.sort()
+        print keys
+
+
+class ObjectTreeItem(TreeItem,Delegate):
+    def __init__(self, appli, labeltext, object, setfunction=None):
+        self.labeltext = labeltext
+        self.appli = appli
+        Delegate.__init__(self,object)
+        #self.object = object
+        self.setfunction = setfunction
+        self.expandable = 1
+        self.init()
+
+    def init(self):
+        return
+
+    def copy(self):
+        """
+        Crée un item copie de self
+        """
+        object = self.object.copy()
+        appli = copy(self.appli)
+        labeltext = copy(self.labeltext)
+        fonction = deepcopy(self.setfunction)
+        item = make_objecttreeitem(appli,labeltext,object,fonction)
+        return item
+    
+    def isactif(self):
+        if hasattr(self.object,'actif'):
+            return self.object.actif
+        else:
+            return 1
+    
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        # None --> fonte et couleur par défaut
+        return self.labeltext,None,None
+
+    #def get_attribut(self,nom_attribut) :
+    #    """ 
+    #       Retourne l'attribut de nom nom_attribut de l'objet sur lequel
+    #       pointe self s'il existe, None sinon
+    #    """
+    #    return self.object.get_attribut(nom_attribut)
+
+    def get_nature(self) :
+        """ 
+            Retourne la nature de l'item et de l'objet
+        """ 
+        return self.object.nature
+
+    def get_regles(self):
+        """ retourne les règles de l'objet pointé par self """
+        return self.object.get_regles()
+    
+    def get_liste_mc_presents(self):
+        """ Retourne la liste des mots-clés fils de l'objet pointé par self """
+        return self.object.liste_mc_presents()
+    
+    def get_val(self):
+        """ Retourne le nom de la valeur de l'objet pointé par self dans le cas
+            où celle-ci est un objet (ASSD) """
+        return self.object.getval()
+    
+    def get_definition(self):
+        """ 
+           Retourne l'objet definition de l'objet pointé par self 
+        """
+        return self.object.definition
+
+    def get_liste_mc_ordonnee(self,liste,dico):
+        """ retourne la liste ordonnée (suivant le catalogue) brute des mots-clés
+            d'une entité composée dont le chemin complet est donné sous forme
+            d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
+            il faut encore réarranger cette liste (certains mots-clés déjà
+            présents ne doivent plus être proposés, règles ...)"""
+        return self.object.get_liste_mc_ordonnee(liste,dico)
+
+    def get_liste_mc_ordonnee_brute(self,liste,dico):
+        """
+        retourne la liste ordonnée (suivant le catalogue) BRUTE des mots-clés
+        d'une entité composée dont le chemin complet est donné sous forme
+        d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
+        """
+        return self.object.get_liste_mc_ordonnee_brute(liste,dico)
+   
+    def get_genealogie(self):
+        """
+        Retourne la liste des noms des ascendants (noms de MCSIMP,MCFACT,MCBLOC ou ETAPE)
+        de l'objet pointé par self
+        """
+        return self.object.get_genealogie()
+
+    def get_index_child(self,nom_fils):
+        """
+        Retourne l'index dans la liste des fils de self du nouveau fils de nom nom_fils
+        Nécessaire pour savoir à quelle position dans la liste des fils il faut ajouter
+        le nouveau mot-clé
+        """
+        liste_noms_mc_ordonnee = self.get_liste_mc_ordonnee_brute(self.get_genealogie(),self.get_jdc().cata_ordonne_dico)
+        liste_noms_mc_presents = self.object.liste_mc_presents()
+        l=[]
+        for nom in liste_noms_mc_ordonnee:
+            if nom in liste_noms_mc_presents or nom == nom_fils:
+                l.append(nom)
+        # l contient les anciens mots-clés + le nouveau dans l'ordre
+        return l.index(nom_fils)
+        
+    def get_nom_etape(self):
+        """Retourne le nom de self """
+        return self.object.get_nom_etape()
+
+    def get_copie_objet(self):
+        """ Retourne une copie de l'objet pointé par self """
+        return self.object.copy()
+    
+    def get_position(self):
+        """ Retourne la valeur de l'attribut position de l'objet pointé par self """
+        definition = self.get_definition()
+        try:
+            return getattr(definition,'position')
+        except AttributeError:
+            return 'local'
+        
+    def get_nom(self):
+        """ Retourne le nom de l'objet pointé par self """
+        return self.object.nom
+
+    def get_jdc(self):
+        """ Retourne le jdc auquel appartient l'objet pointé par self """
+        return self.object.jdc
+        #return self.object.get_attribut('jdc')
+    
+    def get_valeur(self):
+        """ Retourne la valeur de l'objet pointé par self """
+        return self.object.valeur
+
+    def get_cr(self):
+        """ Retourne le compte-rendu CR de self """
+        return self.object.report()
+
+    def get_objet_commentarise(self):
+        """
+        Cette méthode retourne un objet commentarisé
+        représentatif de self.object
+        --> à surcharger par les différents items
+        """
+        pass
+        
+    def isvalid(self):
+        """ Retourne 1 si l'objet pointé par self est valide, 0 sinon"""
+        return self.object.isvalid()
+
+    def iscopiable(self):
+        """
+        Retourne 1 si l'objet est copiable, 0 sinon
+        Par défaut retourne 0
+        """
+        return 0
+    
+    def isMCList(self):
+        """ Retourne 1 si l'objet pointé par self est une MClist, 0 sinon"""
+        #if isinstance(self.object,MCList) :
+        if self.object.__class__.__name__ == 'MCList':
+            return 1
+        else :
+            return 0
+
+    def isCommande(self):
+        """
+        Retourne 1 si l'objet pointé par self est une Commande, 0 sinon
+        """
+        return 0
+
+    def isJdc(self):
+        """
+        Retourne 1 si l'objet pointé par self est un JDC, 0 sinon
+        """
+        return 0
+
+    def isMCFact(self):
+        """
+        Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
+        """
+        return 0
+    
+    def get_mc_presents(self):
+        """ Retourne le dictionnaire des mots-clés présents de l'objet pointé par self """
+        return self.object.dict_mc_presents()
+
+    def verif_condition_regles(self,l_mc_presents):
+        return self.object.verif_condition_regles(l_mc_presents)
+
+    def get_fr(self):
+        """ Retourne le fr de l'objet pointé par self """
+        try:
+           return self.object.get_fr()
+        except:
+           return ''
+
+    def get_docu(self):
+        """ Retourne la clé de doc de l'objet pointé par self """
+        return self.object.get_docu()
+
+    def set_valeur(self,new_valeur,evaluation='oui'):
+        """ Remplace la valeur de l'objet pointé par self par new_valeur """
+        return self.object.set_valeur(new_valeur,evaluation=evaluation)
+        
+    def GetText(self):
+        return myrepr.repr(self.object)
+    
+    def GetIconName(self):
+        if not self.IsExpandable():
+            return "python"
+
+    def IsEditable(self):
+        return self.setfunction is not None
+
+    def SetText(self, text):
+        try:
+            value = eval(text)
+            self.setfunction(value)
+        except:
+            pass
+# Modif de ma part CCar : je ne comprend pas a quoi ca sert
+# ca parait meme incorrect
+      #  else:
+      #      self.object = value
+
+    def IsExpandable(self):
+        return 1
+        
+    def GetSubList(self):
+        keys = dir(self.object)
+        sublist = []
+        for key in keys:
+            try:
+                value = getattr(self.object, key)
+            except AttributeError:
+                continue
+            item = make_objecttreeitem(
+                self.appli,
+                str(key) + " =",
+                value,
+                lambda value, key=key, object=self.object:
+                    setattr(object, key, value))
+            sublist.append(item)
+        return sublist
+
+    def wait_fichier_init(self):
+        """ Retourne 1 si l'object pointé par self attend un fichier d'initialisation
+        (ex: macros POURSUITE et INCLUDE de Code_Aster), 0 SINON """
+        return self.object.definition.fichier_ini
+
+    def make_objecttreeitem(self,appli,labeltext, object, setfunction=None):
+        """
+           Cette methode, globale pour les objets de type item, permet de construire et de retourner un objet
+           de type item associé à l'object passé en argument.
+        """
+        c = gettreeitem(object)
+        return c(appli,labeltext, object, setfunction)
+
+class AtomicObjectTreeItem(ObjectTreeItem):
+    def IsExpandable(self):
+        return 0
+
+class SequenceTreeItem(ObjectTreeItem):
+    def IsExpandable(self):
+        return len(self.object) > 0
+
+    def __len__(self) :
+        return len(self.object)
+   
+    def keys(self):
+        return range(len(self.object))
+
+    def GetIconName(self):
+        if self.object.isvalid():
+          return "ast-green-los"
+        elif self.object.isoblig():
+          return "ast-red-los"
+        else:
+          return "ast-yel-los"
+
+    def ajout_possible(self):
+        return self.object.ajout_possible()
+
+    def get_index(self,child):
+        """ Retourne le numéro de child dans la liste des enfants de self """
+        return self.object.get_index(child.object)
+
+    def GetText(self):
+      return  "    "
+
+    def suppitem(self,item):
+        if not self.object.isMCList():return 1
+        try :
+            self.object.remove(item.object)
+            # la liste peut être retournée vide !
+            message = "Mot-clé " + item.object.nom + " supprimé"
+            self.appli.affiche_infos(message)
+            return 1
+        except:
+            return 0
+
+    def GetSubList(self):
+        sublist = []
+        for obj in self.object.data:
+            def setfunction(value, object=obj):
+                object = value
+            item = make_objecttreeitem(self.appli, obj.nom + ":", obj, setfunction)
+            sublist.append(item)
+        return sublist
+
+def gettreeitem(object):
+    """
+       Cette fonction retourne la classe item associée à l'objet object.
+       Cette classe item dépend bien sûr de la nature de object, d'où
+       l'interrogation du dictionnaire composants
+    """
+    if type(object) == types.InstanceType:
+      # On cherche d abord dans les composants (plugins)
+      try:
+        return composants[object.__class__]
+      except:
+        # On cherche une eventuelle classe heritee (aleatoire car sans ordre)
+        for e in composants.keys():
+          if isinstance(object,e):return composants[e]
+    # On n'a rien trouve dans les composants
+    return ObjectTreeItem
+
+def charger_composants():
+    """
+        Cette fonction a pour but de charger tous les modules composants graphiques
+        (fichiers compo*.py dans le même répertoire que ce module )
+        et de remplir le dictionnaire composants utilisé par make_objecttreeitem
+    """
+    composants={}
+    repertoire=os.path.dirname(__file__)
+    listfich=glob.glob(os.path.join(repertoire, "compo*.py"))
+    for fichier in listfich:
+        m= os.path.basename(fichier)[:-3]
+        module=__import__(m,globals(),locals())
+        composants[module.objet]=module.treeitem
+    return composants
+
+def make_objecttreeitem(appli,labeltext, object, setfunction=None):
+    """
+       Cette fonction permet de construire et de retourner un objet
+       de type item associé à l'object passé en argument.
+    """
+    c = gettreeitem(object)
+    return c(appli,labeltext, object, setfunction)
+
+# Dictionnaire {object : item} permettant d'associer un item à un object
+# Ce dictionnaire est renseigné par la méthode charger_composants 
+composants = charger_composants()
+
diff --git a/Editeur/__init__.py b/Editeur/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Editeur/analyse_catalogue.py b/Editeur/analyse_catalogue.py
new file mode 100644 (file)
index 0000000..b52a564
--- /dev/null
@@ -0,0 +1,304 @@
+#@ MODIF analyse_catalogue Accas  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+from string import split,strip,lowercase,uppercase
+import re,string,cPickle,os
+
+from Noyau.N_CR import CR
+
+#
+__Id__="$Id: analyse_catalogue.py,v 1.13.18.3 2001/06/19 12:24:48 iliade Exp $"
+__version__="$Name: FR_28_06_10_00 $"
+#
+l_noms_commandes = ['OPER','PROC','MACRO','FORM']
+l_noms_composes=['FACT','BLOC','NUPL','FORM']
+l_noms_simples=['SIMP',]
+l_noms=l_noms_composes+l_noms_simples
+
+def elimine_commentaires(text):
+       """ Elimine les lignes de commentaires dans text
+       Attention : supprime sauvagement tous les caractères entre # et le retour chariot ..."""
+       comments = re.compile(r'#[^\n]*')
+       return comments.sub('',text)
+
+def cherche_nom(text):
+       Whitespace = r'[ \f\t]*'
+       Name = r'[a-zA-Z_]\w*'
+       myexpr = '('+Name+')'+Whitespace+'='+Whitespace+'$'
+       a=re.search(myexpr,text)
+       return a.group(1)
+
+def cherche_args(text):
+       text = strip(text)
+       longueur = len(text)
+       if text[0] != '(':
+               return 'erreur !'
+       else :
+               nbpar = 1
+               for i in range(1,longueur) :
+                       if text[i] =='(':
+                               nbpar = nbpar + 1
+                       elif text[i] == ')':
+                               nbpar = nbpar - 1
+                       else :
+                               continue
+                       if nbpar == 0:
+                               break
+               if nbpar != 0 :
+                       return 'erreur !','erreur !'
+               else :
+                       try :
+                               return text[1:i],text[i+1:] # on enlève les première et dernière parenthèses
+                       except :
+                               return text[1:i],''
+
+class ENTITE :
+       def cherche_enfants(self):
+               try :
+                       self.text = strip(self.text)
+                       liste = re.split('=',self.text,1)
+                       if len(liste)>1 :
+                               arg1=liste[0]
+                               reste=liste[1]
+                               reste = strip(reste)
+                               if reste[0:4] in l_noms :
+                                       nom_mc = cherche_nom(arg1+'=')
+                                       arg_mc, self.text = cherche_args(reste[4:])
+                                       self.cree_mc(nom_mc,arg_mc,reste[0:4])
+                               else :
+                                       self.text = reste
+                               self.cherche_enfants()
+                       else :
+                               # pas de = rencontré
+                               return
+               except Exception,e:
+                       self.cr.fatal("Erreur rencontrée dans recherche_enfants :%s" %str(e))
+               
+       def cree_mc(self,nom_mc,arg_mc,test):
+               if test in l_noms_composes :
+                       mc = FACT_CATA(nom_mc,arg_mc,self)
+                       self.children.append(mc)
+               elif test in l_noms_simples :
+                       mc = SIMP_CATA(nom_mc,self)
+                       self.children.append(mc)
+               else :
+                       print 'erreur dans la création du mot-clé :',nom_mc
+
+       def construit_liste_dico(self):
+               l=[]
+               d={}
+               if len(self.children)==0:
+                       self.liste = l
+                       self.dico = d
+                       return
+               try :
+                       for child in self.children:
+                               l.append(child.nom)
+                               d[child.nom]=child
+                       self.liste = l
+                       self.dico = d
+               except:
+                       print 'erreur :',self.nom,self.__class__
+               
+class COMMANDE_CATA(ENTITE) :
+       def __init__(self,nom,args,parent):
+               self.nom = nom
+               self.args = args
+               self.children = []
+               self.text = args
+               self.cr = CR()
+               self.cr.debut = "Début commande %s" %self.nom
+               self.cr.fin = "Fin commande %s" %self.nom
+               self.cherche_enfants()
+               self.construit_liste_dico()
+               parent.cr.add(self.cr)
+
+       def affiche(self):
+               texte_cmd = '\n'
+               texte_cmd = texte_cmd + 'Commande :' + self.nom + '\n'
+               for child in self.children :
+                       texte_cmd = texte_cmd + child.affiche(1)
+               return texte_cmd
+
+class SIMP_CATA :
+       def __init__(self,nom,parent):
+               self.nom = nom
+               self.cr = CR()
+               self.cr.debut = "Début mot-clé simple %s" %self.nom
+               self.cr.fin = "Fin mot-clé simple %s" %self.nom
+               parent.cr.add(self.cr)
+
+       def affiche(self,ind):
+               sep = ' '*5
+               return sep*ind+self.nom+'\n'
+
+class FACT_CATA(ENTITE) :
+       def __init__(self,nom,args,parent):
+               self.nom=nom
+               self.args=args
+               self.children = []
+               self.text=args
+               self.cr = CR()
+               self.cr.debut = "Début mot-clé facteur ou bloc %s" %self.nom
+               self.cr.fin = "Fin mot-clé facteur ou bloc %s" %self.nom
+               self.cherche_enfants()
+               self.construit_liste_dico()
+               parent.cr.add(self.cr)
+
+       def affiche(self,ind):
+               sep = ' '*5
+               text = ''
+               text = text + sep*ind+self.nom+'\n'
+               for child in self.children :
+                       text = text + child.affiche(ind+1)
+               return text
+               
+class CATALOGUE_CATA:
+       def __init__(self,parent,fichier):
+               self.parent = parent
+               self.fichier=fichier
+               self.cr = CR()
+               self.cr.debut = "Début compte-rendu catalogue %s" %self.fichier
+               self.cr.fin = "Fin compte-rendu catalogue %s" %self.fichier
+               self.ouvrir_fichier()
+               self.liste_commandes=[]
+               self.liste_textes_commandes=[]
+
+       def ouvrir_fichier(self):
+               try :
+                       f=open(self.fichier,'r')
+                       self.texte_complet=f.read()
+                       f.close()
+               except e:
+                       print "Impossible d'ouvrir le fichier :",self.fichier
+                       print e
+                       self.cr.fatal("Impossible d'ouvrir le fichier :%s" %self.fichier)
+
+       def constr_list_txt_cmd(self,text):
+               text = elimine_commentaires(text)
+               pattern = '\) *;'
+               liste=re.split(pattern,text)
+               for i in range(0,len(liste)-1):
+                       self.liste_textes_commandes.append(liste[i]+')')
+
+       def analyse_commande_old(self,text):
+               #if strip(text) == '' or strip(text) ==')': return
+               liste = re.split('OPER *\(',text,1)
+               if len(liste) < 2 :
+                       liste = re.split('PROC *\(',text,1)
+               if len(liste) < 2 :
+                       liste = re.split('MACRO *\(',text,1)
+               if len(liste) < 2 :
+                       print "le texte à analyser n'est pas celui d'une commande ou d'un opérateur",text
+                       self.cr.fatal("le texte à analyser n'est pas celui d'une commande ou d'un opérateur :%s" %text)
+                       return
+               debut = liste[0]
+               fin = liste[1]
+               nom_cmd = cherche_nom(debut)
+               if nom_cmd == 'erreur !':
+                       print "Erreur dans la recherche du nom de la commande :",debut
+               args_cmd,toto = cherche_args('('+fin)
+               if args_cmd == 'erreur !':
+                       print "Erreur dans la recherche des args de la commande :",debut
+               cmd=COMMANDE_CATA(nom_cmd,args_cmd,self)
+               self.liste_commandes.append(cmd)
+
+       def analyse_commande(self,text):
+               #if strip(text) == '' or strip(text) ==')': return
+               for nom_cmd in l_noms_commandes:
+                       liste = re.split(nom_cmd+' *\(',text,1)
+                       if len(liste) == 2 : break
+               if len(liste) < 2 :
+                       print "le texte à analyser n'est pas celui d'une commande connue :"+str(l_noms_commandes),text
+                       self.cr.fatal("le texte à analyser n'est pas celui d'une commande ou d'un opérateur :%s" %text)
+                       return
+               debut = liste[0]
+               fin = liste[1]
+               nom_cmd = cherche_nom(debut)
+               if nom_cmd == 'erreur !':
+                       print "Erreur dans la recherche du nom de la commande :",debut
+               args_cmd,toto = cherche_args('('+fin)
+               if args_cmd == 'erreur !':
+                       print "Erreur dans la recherche des args de la commande :",debut
+                        print fin
+               cmd=COMMANDE_CATA(nom_cmd,args_cmd,self)
+               self.liste_commandes.append(cmd)
+               
+       def analyse_texte(self,texte):
+               self.constr_list_txt_cmd(texte)
+               try:
+                       self.parent.configure_barre(len(self.liste_textes_commandes))
+               except:
+                       pass
+               for texte_commande in self.liste_textes_commandes :
+                       try:
+                               self.parent.update_barre()
+                       except:
+                               pass
+                       self.analyse_commande(texte_commande)
+               self.construit_liste_dico()
+
+       def ecrit_lcmd(self):
+               f=open('U:\\EFICAS\\Accas\\cata.txt','w')
+               for cmd in self.liste_commandes :
+                       f.write(cmd.affiche())
+               f.close()
+
+       def construit_liste_dico(self):
+               l=[]
+               d={}
+               for cmd in self.liste_commandes:
+                       l.append(cmd.nom)
+                       d[cmd.nom]=cmd
+               self.liste = l
+               self.dico = d
+
+       def report(self):
+               """ retourne l'objet rapport du catalogue de commande """
+               return self.cr
+
+def analyse_catalogue(parent,nom_cata):
+       cata = CATALOGUE_CATA(parent,nom_cata)
+       cata.analyse_texte(cata.texte_complet)
+       return cata
+
+def analyse_catalogue_commande(parent,nom_cata):
+       cata = CATALOGUE_CATA(parent,nom_cata)
+       cata.analyse_commande(cata.texte_complet)
+       cata.construit_liste_dico()
+       return cata
+
+
+def make_cata_pickle(fic_cata):
+  """
+  Lance l'analyse de l'ordre des mots-clés dans le catalogue dont le nom
+  est passé en argument et sauvegarde ces infos dans le fichier pickle relu
+  par Eficas
+  """
+  fic_cata_p = os.path.splitext(fic_cata)[0]+'_pickled.py'
+  cata_ordonne = analyse_catalogue(None,fic_cata)
+  f = open(fic_cata_p,'w+')
+  p = cPickle.Pickler(f)
+  p.dump(cata_ordonne.dico)
+  f.close()
+  
+if __name__ == "__main__" :
+       import profile
+       profile.run("analyse_catalogue(None,'U:\\EFICAS\\Cata\\cata_saturne.py')")
+
+
+
+
+
+
+
+
+
+
+
+                               
+                               
diff --git a/Editeur/appli.py b/Editeur/appli.py
new file mode 100644 (file)
index 0000000..f8b031f
--- /dev/null
@@ -0,0 +1,173 @@
+"""
+    Ce module contient la classe APPLI qui est la classe mère de
+    l'application EFICAS. Elle prend en charge l'organisation générale
+    des composants graphiques et l'initialisation Tk
+    L'aspect applicatif doit etre pris en charge par la classe dérivée
+"""
+# Modules Python
+import sys
+import Pmw
+import Tkinter
+
+# Modules Eficas
+import splash
+import prefs
+import fontes
+
+class APPLI: 
+  def __init__ (self,master,code='ASTER',fichier=None) :
+      self.top=master
+      self.code=code
+      self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
+      self.top.minsize(900,500)
+      self.top.geometry("900x500")
+      self.top.title('EFICAS v1.1 pour '+self.code)
+      self.top.withdraw()
+      self.initializeTk(master)
+      Pmw.initialise(master)
+      self.lecture_parametres()
+      self.format_fichier = Tkinter.StringVar()
+      self.message=''
+      self.cree_composants_graphiques()
+      self.load_extensions()
+      self.affiche_FAQ()
+      splash.fini_splash()
+
+  def send_message(self,message):
+      self.message=message
+
+  def exitEFICAS(self):
+      self.quit()
+
+  def quit(self):
+      self.top.quit()
+
+  def lecture_parametres(self):
+      """
+          Active la lecture des paramètres standards et utilisateur
+      """
+      splash._splash.configure(text = "Chargement des paramètres utilisateur")
+      import configuration
+      self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
+
+  def cree_composants_graphiques(self):
+      """
+          Cree les constituants de l'application :
+           - menubar
+           - tollbar
+           - bureau
+           - statusbar
+      """
+      splash._splash.configure(text = "Chargement de l'IHM")
+      splash._splash.configure(text = "Chargement de la menubar")
+      import menubar
+      self.menubar=menubar.MENUBAR(self,self.top)
+      splash._splash.configure(text = "Chargement de la toolbar")
+      import toolbar
+      self.toolbar=toolbar.TOOLBAR(self,self.top)
+      splash._splash.configure(text = "Chargement de la statusbar")
+      import statusbar
+      self.statusbar=statusbar.STATUSBAR(self.top)
+
+  def load_extensions(self):
+      splash._splash.configure(text = "Chargement des extensions")
+      for mname in self.extensions:
+         self.load_extension(mname)
+
+  def load_extension(self,mname):
+      module=__import__(mname,globals(),locals())
+      factory=getattr(module,mname.upper())
+      extension=factory(self,self.top)
+      setattr(self,mname,extension)
+      self.fill_menus(extension,extension.menu_defs)
+      self.toolbar.creer_boutons_extension(extension.button_defs,extension)
+
+  def affiche_FAQ(self):
+      import faq
+      faq.affiche(self.top)
+
+  def affiche_infos(self,message):
+      self.statusbar.affiche_infos(message)
+      return
+
+  def  initializeTk(self, root):
+        """
+        Initialize platform specific options
+        """
+        if sys.platform == 'mac':
+            self.initializeTk_mac(root)
+        elif sys.platform == 'win32':
+            self.initializeTk_win32(root)
+        else:
+            self.initializeTk_unix(root)
+
+  def initializeTk_win32(self, root):
+        root.option_add('*Font', fontes.standard)
+        root.option_add('*EntryField.Entry.Font', fontes.standard)
+        root.option_add('*Listbox*Font',fontes.standard)
+
+  def initializeTk_colors_common(self, root):
+        root.option_add('*background', 'grey')
+        root.option_add('*foreground', 'black')
+        root.option_add('*EntryField.Entry.background', 'white')
+        root.option_add('*Listbox*background', 'white')
+        root.option_add('*Listbox*selectBackground', '#00008b')
+        root.option_add('*Listbox*selectForeground', 'white')
+
+  def initializeTk_mac(self, root):
+        self.initializeTk_colors_common(root)
+
+  def initializeTk_unix(self, root):
+      root.option_add('*Font', fontes.standard)
+      root.option_add('*EntryField.Entry.Font',fontes.standard )
+      root.option_add('*Listbox*Font', fontes.standard)
+      self.initializeTk_colors_common(root)
+
+  def get_texte_infos(self):
+      """
+          Retourne un texte d'informations sur la session courante d'EFICAS
+      """
+      texte = 'EFICAS v1.1\n\n'
+      texte = texte + 'EFICAS est un produit développé par \nEDF-Division Stratégie et Développement\n'
+      texte = texte + 'Equipe : MTI/MMN\n\n'
+      texte = texte + 'Code utilisé : %s\n' %self.code
+      return texte
+
+  def efface_aide(self,event):
+      """
+          Efface la bulle d'aide d'un panneau
+      """
+      try:
+          self.aide.destroy()
+      except:
+          pass
+      return
+
+  def affiche_aide(self,event,aide):
+      """
+          Affiche l'aide concernant un panneau
+      """
+      x=event.x
+      y=event.y
+      widget=event.widget
+      self.aide = Tkinter.Label(widget ,text = aide,
+                        bg="yellow",relief="ridge",anchor='w')
+      self.aide.place(in_=widget,
+                      relx=0.5,rely=0.5,anchor='center')
+      print aide
+      return
+
+  def fill_menus(self,extension,defs):
+      menudict=self.menubar.menudict
+      for mname,itemlist in defs:
+          menu=menudict.get(mname)
+          if not menu:continue
+          for item in itemlist:
+             if not item :
+                menu.add_separator()
+             else:
+                label,method=item
+                command=getattr(extension,method)
+                menu.add_command(label=label,command=command)
+                
+      
diff --git a/Editeur/browser.py b/Editeur/browser.py
new file mode 100644 (file)
index 0000000..0553c6e
--- /dev/null
@@ -0,0 +1,46 @@
+"""
+"""
+# Modules Python
+import os,string
+from tkFileDialog import *
+
+# Modules Eficas
+import Interp
+import catabrowser
+import cataediteur
+
+class BROWSER:
+
+   menu_defs=[
+              ('Browsers',[
+                           ('Browser catalogue','browser_catalogue'),
+                           ('Editeur catalogue','edite_catalogue'),
+                           ('Shell','shell'),
+                         ]
+              )
+             ]
+
+   button_defs=[]
+
+   def __init__(self,appli,parent):
+      self.appli=appli
+      self.parent=parent
+      self.cataitem = catabrowser.CATAItem(self,"Catalogue "+self.appli.readercata.code,
+                                           self.appli.readercata.cata,
+                                           objet_cata_ordonne = self.appli.readercata.cata_ordonne_dico)
+
+   def shell(self,event=None):
+      if not hasattr(self.appli.bureau.JDCDisplay_courant,'jdc'):return
+      d={'j':self.appli.bureau.JDCDisplay_courant.jdc}
+      Interp.InterpWindow(d,parent=self.parent)
+
+   def browser_catalogue(self,event=None):
+      catabrowser.CataBrowser(parent=self.parent,appli=self.appli,
+                                cata = self.appli.readercata.cata,
+                                item = self.cataitem)
+
+   def edite_catalogue(self,event=None):
+      cataediteur.CataEditeur(parent=self.parent,appli=self.appli,cata=self.appli.readercata.cata)
+
+
+
diff --git a/Editeur/bureau.py b/Editeur/bureau.py
new file mode 100644 (file)
index 0000000..4184084
--- /dev/null
@@ -0,0 +1,540 @@
+"""
+   Ce module contient la classe BUREAU qui gere les JDC ouverts
+"""
+# Modules Python
+import os,string
+import traceback
+import Pmw
+from tkFileDialog import askopenfilename,asksaveasfilename
+from tkMessageBox import showinfo,askyesno,showerror
+
+# Modules Eficas
+import splash
+import convert
+import generator
+from jdcdisplay import JDCDISPLAY
+from utils import extension,stripPath,save_in_file
+from widgets import Fenetre,Ask_Format_Fichier
+from fenetre_mc_inconnus import fenetre_mc_inconnus
+
+class BUREAU:
+   menu_defs=[
+              ('Fichier',[
+                           ('Nouveau','newJDC'),
+                           ('Ouvrir','openJDC'),
+                           ('Enregistrer','saveJDC'),
+                           ('Enregistrer sous','saveasJDC'),
+                           None,
+                           ('Fermer','closeJDC'),
+                           ('Quitter','exitEFICAS'),
+                         ]
+              ),
+              ('Edition',[
+                           ('Copier','copy'),
+                           ('Couper','cut'),
+                           ('Coller','paste'),
+                         ]
+              ),
+              ('Jeu de commandes',[
+                                   ('Rapport de validation','visuCRJDC'),
+                                   ('Fichier à plat','visu_a_plat'),
+                                   ('Fichier .py','visuJDC_py'),
+                                   ('Fichier source','visu_txt_brut_JDC'),
+                                   ('Paramètres Eficas','affichage_fichier_ini'),
+                                   ('Mots-clés inconnus','mc_inconnus'),
+                                  ]
+              ),
+             ]
+
+   button_defs  =      (('New24',"newJDC","Création d'un nouveau fichier",'always'),
+                        ('Open24',"openJDC","Ouverture d'un fichier existant",'always'),
+                        ('Save24',"saveJDC","Sauvegarde du fichier courant",'always'),
+                        ('Zoom24',"visuJDC","Visualisation du fichier de commandes",'always'),
+                        None,
+                        ('Copy24',"copy","Copie l'objet courant",'jdc'),
+                        ('Cut24',"cut","Coupe l'objet courant",'jdc'),
+                        ('Paste24',"paste","Colle l'objet copié après l'objet courant",'jdc'),
+                        None,
+                        ('Delete24',"delete","Supprime l'objet courant",'jdc'),
+                        ('Help24',"view_doc","Documentation de l'objet courant",'jdc')
+                       )
+
+   def __init__(self,appli,parent):
+      self.parent=parent
+      self.appli=appli
+      splash._splash.configure(text = "Création du bureau")
+      self.nb = Pmw.NoteBook(self.parent,raisecommand=self.selectJDC)
+      self.nb.pack(fill='both',expand=1)
+      self.JDCDisplay_courant=None
+      self.fileName=None
+      self.liste_JDCDisplay=[]
+      self.cree_cataitem()
+
+   def cree_cataitem(self):
+      """
+          On récupère dans l'extension readercata les variables 
+          qui servent par la suite pour la création des JDC
+      """
+      self.cataitem=self.appli.readercata.cataitem
+      self.cata=self.appli.readercata.cata
+      self.cata_ordonne_dico=self.appli.readercata.cata_ordonne_dico
+      self.code=self.appli.readercata.code
+      self.version_code=self.appli.readercata.version_code
+      self.fic_cata=self.appli.readercata.fic_cata
+
+   def selectJDC(self,event=None):
+      """
+          Cette méthode est appelée chaque fois que l'on sélectionne 
+          l'onglet d'un JDC dans le NoteBook des JDC.
+          Elle permet de stocker dans les variable self.JDC et 
+          self.JDCDisplay_courant les valeurs concernant le JDC courant
+      """
+      if len(self.liste_JDCDisplay) == 0 : return
+      #if self.JDCDisplay_courant : self.JDCDisplay_courant.jdc.unset_context()
+      numero_jdc = self.nb.index(self.nb.getcurselection())
+      self.JDCDisplay_courant = self.liste_JDCDisplay[numero_jdc]
+      self.JDC = self.JDCDisplay_courant.jdc
+      #self.JDC.set_context()
+      self.JDCName = self.JDC.nom
+
+   def newJDC(self):
+      """
+          Initialise un nouveau JDC vierge
+      """
+      self.appli.statusbar.reset_affichage_infos()
+
+      CONTEXT.unset_current_step()
+      J=self.cata[0].JdC(cata=self.cata,
+                         cata_ord_dico=self.cata_ordonne_dico,
+                         appli=self.appli)
+      self.JDCName=J.nom
+      self.ShowJDC(J,self.JDCName)
+      self.appli.toolbar.active_boutons()
+
+   def ShowJDC(self,JDC,nom,label_onglet=None):
+      """
+          Lance l'affichage du JDC cad création du JDCDisplay
+          Rajoute le JDCDisplay à la liste des JDCDisplay si label_onglet == None cad si on crée
+          bien un nouveau JDCDisplay et non si on remplace (renommage de l'onglet)
+      """
+      self.JDC=JDC
+      self.JDCName = self.JDC.nom = nom
+      #XXX CCAR: pour le moment mis en commentaire
+      #self.JDC.set_context()
+      if label_onglet == None :
+          label_onglet = self.GetLabelJDC()
+          self.nb.add(label_onglet,tab_text = nom,tab_width=20)
+          new = 'oui'
+      else :
+          new = 'non'
+      self.JDCDisplay_courant=JDCDISPLAY(self.JDC,nom,appli=self.appli,parent=self.nb.page(label_onglet))
+      if new == 'oui':
+          self.liste_JDCDisplay.append(self.JDCDisplay_courant)
+      self.JDCDisplay_courant.modified='n'
+      self.JDCDisplay_courant.fichier=self.fileName
+      self.nb.selectpage(label_onglet)
+      self.nb.setnaturalsize()
+      texte = "Jeu de commandes :" + self.JDCName+" ouvert"
+      self.appli.affiche_infos(texte)
+
+   def closeJDC (self) :
+      """
+      Ferme le JDC courant et détruit l'onglet associé dans le notebook self.nb
+      """
+      if self.JDCDisplay_courant.modified == 'o' :
+          message = "Voulez-vous sauvegarder le jeu de commandes "+self.JDC.nom+" courant ?"
+          reponse = askyesno(title="Sauvegarde du jdc courant",
+                             message=message)
+          if reponse :
+              test = self.saveJDC()
+              if test == 0 :
+                  self.appli.affiche_infos("Sauvegarde impossible")
+                  return
+      self.JDCDisplay_courant.jdc.supprime()
+      self.liste_JDCDisplay.remove(self.JDCDisplay_courant)
+      self.nb.delete(self.nb.getcurselection())
+      #XXX CCAR: pour le moment mis en commentaire
+      #self.JDC.unset_context()
+      self.JDC = None
+      try:
+          index = self.nb.index(self.nb.getcurselection())
+          self.JDCDisplay_courant = self.liste_JDCDisplay[index]
+          self.JDC = self.JDCDisplay_courant.jdc
+      except:
+          self.JDCDisplay_courant = None
+          self.appli.toolbar.inactive_boutons()
+
+   def visuCRJDC(self):
+      return self.visuCR(mode='JDC')
+
+   def visuCR(self,mode):
+      """
+      Méthode permettant l'affichage du rapport de validation
+      """
+      if mode == 'JDC':
+          if not hasattr(self,'JDC') : return
+          titre="rapport de validation du jeu de commandes courant"
+          cr = self.JDC.report()
+      elif mode == 'CATA':
+          from Noyau.N_CR import CR
+          cr = CR()
+          cr.debut = "Début rapport de validation du catalogue"
+          cr.fin = "Fin rapport de validation du catalogue"
+          titre="rapport de validation du catalogue"
+          if hasattr(self,'cata_ordonne_cr') :
+              cr.add(self.cata_ordonne_cr)
+          if hasattr(self,'cata_dev_ordonne_cr') :
+              cr.add(self.cata_dev_ordonne_cr)
+          for cata in self.cata:
+              if hasattr(cata,'JdC'):
+                  cr.add(cata.JdC.report())
+      texte_cr = str(cr)
+      self.visu_texte_cr = Fenetre(self.appli,titre=titre,texte=texte_cr)
+
+   def openJDC(self,file=None):
+      """
+          Demande à l'utilisateur quel JDC existant il veut ouvrir
+      """
+      if self.code == 'ASTER':
+          filetypes = ( ("format "+self.appli.format_fichier.get(), ".comm"),)
+      else:
+          filetypes = ( ("format "+self.appli.format_fichier.get(), ".py"),)
+      if not hasattr(self,'initialdir'):
+         self.initialdir = self.appli.CONFIGURATION.rep_user
+      if not file :
+          file = askopenfilename(title="Ouverture d'un fichier de commandes Aster",
+                                 defaultextension=".comm",
+                                 filetypes = filetypes,
+                                 initialdir = self.initialdir)
+      if file != '':
+          self.fileName = file
+          e=extension(file)
+          self.JDCName=stripPath(file)
+          self.initialdir = os.path.dirname(file)
+      else :
+          return
+      #XXX CCAR: pour le moment mis en commentaire
+      #if self.JDCDisplay_courant:self.JDCDisplay_courant.jdc.unset_context()
+
+      format=self.appli.format_fichier.get()
+      # Il faut convertir le contenu du fichier en fonction du format
+      if convert.plugins.has_key(format):
+         # Le convertisseur existe on l'utilise
+         p=convert.plugins[format]()
+         p.readfile(file)
+         text=p.convert('exec')
+         if not p.cr.estvide(): 
+            self.appli.affiche_infos("Erreur à la conversion")
+            Fenetre(self.appli,
+                    titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier",
+                    texte = str(p.cr)).wait()
+            return
+      else:
+         # Il n'existe pas c'est une erreur
+         self.appli.affiche_infos("Type de fichier non reconnu")
+         showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
+         return
+
+      # On se met dans le repertoire ou se trouve le fichier de commandes
+      # pour trouver les eventuels fichiers include ou autres
+      # localises a cote du fichier de commandes
+      os.chdir(self.initialdir)
+      CONTEXT.unset_current_step()
+      J=self.cata[0].JdC(procedure=text,appli=self.appli,
+                         cata=self.cata,cata_ord_dico=self.cata_ordonne_dico,
+                         nom = self.JDCName)
+      J.analyse()
+      txt_exception = J.cr.get_mess_exception()
+      if txt_exception :
+          # des exceptions ont été levées à la création du JDC 
+          # --> on affiche les erreurs mais pas le JDC
+          self.appli.affiche_infos("Erreur fatale au chargement de %s" %file)
+          showerror("Erreur fatale au chargement d'un fichier",txt_exception)
+      else:
+          self.ShowJDC(J,self.JDCName)
+          self.appli.toolbar.active_boutons()
+         # si le JDC ne contient rien (vide), on retourne ici
+         if len(self.JDC.etapes) == 0 : return
+         # dans le cas où le JDC est invalide, on affiche son CR
+         cr = self.JDC.report()
+         if not cr.estvide() : 
+            self.appli.top.update()
+            self.visuCR(mode='JDC')
+
+
+   def GetLabelJDC(self,nb_jdc = 'absent'):
+      """
+      Retourne le label de l'onglet du NoteBook associé au JDC à afficher
+      """
+      if nb_jdc == 'absent':
+          nb_jdc = len(self.nb.pagenames())
+      nb_jdc = nb_jdc+1
+      label_onglet = 'JDC'+`nb_jdc`
+      if label_onglet not in self.nb.pagenames() :
+          return label_onglet
+      else :
+          return self.GetLabelJDC(nb_jdc)
+
+   def saveasJDC(self):
+      """ 
+           Sauvegarde le JDC courant en demandant impérativement à l'utilisateur de
+           donner le nom du fichier de sauvegarde 
+      """
+      self.saveJDC(echo='oui')
+
+   def saveJDC(self,echo='non'):
+      """ 
+          Sauvegarde le JDC courant.
+          Retourne 1 si la sauvegarde s'est bien faite, 0 sinon.
+          Si echo = 'oui' : interactif (l'utilisateur donne le nom sous lequel il 
+                            veut sauver le JDC
+          Si echo = 'non' : muet (sauvegarde le JDC dans JDC.procedure)
+      """
+      if not hasattr(self,'JDC') : return 0
+      format=self.appli.format_fichier.get()
+      if generator.plugins.has_key(format):
+         # Le generateur existe on l'utilise
+         g=generator.plugins[format]()
+         jdc_formate=g.gener(self.JDC,format='beautifie')
+         if not g.cr.estvide():
+            print g.cr
+            self.appli.affiche_infos("Erreur à la generation")
+            showerror("Erreur à la generation","EFICAS ne sait pas convertir ce JDC")
+            return
+      else:
+         # Il n'existe pas c'est une erreur
+         self.appli.affiche_infos("Format %s non reconnu" % format)
+         showerror("Format %s non reconnu" % format,"EFICAS ne sait pas convertir le JDC")
+         return
+      self.jdc_fini = string.replace(jdc_formate,'\r\n','\n')
+
+      if echo =='oui' or self.JDCDisplay_courant.fichier == None:
+          return self.asknomsauvegardeJDC()
+      elif self.JDCDisplay_courant.fichier != None :
+          # le JDC a déjà un nom : on sauvegarde directement sans demander
+          # un autre nom au développeur
+          if not save_in_file(self.JDCDisplay_courant.fichier,self.jdc_fini) :
+              showinfo("Erreur","Problème à la sauvegarde du fichier :" + `self.JDCDisplay_courant.fichier`)
+              return 0
+          else :
+              self.JDCDisplay_courant.stop_modif()
+              self.appli.affiche_infos("sauvegarde de "+`self.JDCDisplay_courant.fichier`+" effectuée")
+              return 1
+
+   def asknomsauvegardeJDC(self):
+      """ Demande à l'utilsateur le nom sous lequel il veut sauvegarder le JDC courant """
+      titre = "Sauvegarde d'un fichier de commandes "+self.code
+      if self.code == 'ASTER':
+          defext = ".comm"
+          filtyp = ( ("ASTER", ".comm"),)
+      else :
+          defext = ".py"
+          filtyp = ( (self.code, ".py"),)
+      sauvegarde = asksaveasfilename(title=titre,
+                                     defaultextension=defext,
+                                     filetypes = filtyp,
+                                     initialdir = self.appli.CONFIGURATION.rep_user)
+      if sauvegarde != '':
+          if not save_in_file(sauvegarde,self.jdc_fini) :
+              showinfo("Erreur","Problème à la sauvegarde du fichier "+`sauvegarde`)
+              return 0
+          else :
+              self.JDCDisplay_courant.stop_modif()
+              self.appli.affiche_infos("Sauvegarde effectuée")
+              if sauvegarde != self.JDCDisplay_courant.fichier :
+                  # l'utilisateur a sauvegardé le JDC sous un autre nom
+                  self.JDCDisplay_courant.fichier = sauvegarde
+                  self.JDCName = self.JDC.nom = stripPath(sauvegarde)
+                  self.changeNomPage()
+              return 1
+      else :
+          return 0
+
+   def changeNomPage(self):
+      """ Change le nom de l'onglet contenant le JDC courant : en fait détruit l'actuel
+          et recrée un autre onglet à la même place avec le bon nom 
+      """
+      nom = self.JDCName
+      self.JDCDisplay_courant.jdc.nom = nom
+      nom_page = self.nb.getcurselection()
+      num_page = self.nb.index(nom_page)
+      tab = self.nb.tab(num_page)
+      tab.configure(text = nom)
+
+   def exitEFICAS(self):
+      """
+          Permet de sortir d'EFICAS en demandant à l'utilisateur
+          s'il veut sauvegarder les modifications en cours
+      """
+      liste = self.GetListeJDCaSauvegarder()
+      if liste != [] :
+          # Certains fichiers n'ont pas été sauvegardés ...
+          if askyesno("Enregistrer modifications","Enregister les modifications ?") :
+              test = self.saveall(liste)
+              if test != 1 :
+                  return
+      if askyesno ("Quitter","Voulez-vous vraiment quitter l'application ?") :
+          for JDCDisplay in self.liste_JDCDisplay:
+              JDCDisplay.jdc.supprime()
+          self.appli.quit()
+          return
+
+   def GetListeJDCaSauvegarder(self) :
+      """ Retourne parmi la liste de tous les JDC ouverts la liste de ceux qui ont été modifiés """
+      if not self.JDCDisplay_courant : return []
+      if len(self.liste_JDCDisplay) == 0 : return l
+      l = []
+      for JDCDisplay in self.liste_JDCDisplay:
+          if JDCDisplay.modified == 'o' :
+              l.append(JDCDisplay)
+      return l
+
+   def copy(self):
+      """
+          Lance la copie sur le JDC courant
+      """
+      if self.JDCDisplay_courant : self.JDCDisplay_courant.doCopy()
+
+   def paste(self):
+      """
+           Lance le collage sur le JDC courant
+      """
+      if self.JDCDisplay_courant : self.JDCDisplay_courant.doPaste()
+
+   def cut(self):
+      """
+         Lance le cut sur le JDC courant
+      """
+      if self.JDCDisplay_courant: self.JDCDisplay_courant.doCut()
+
+   def delete(self):
+      """
+          Lance la suppression du noeud courant
+      """
+      if not self.JDCDisplay_courant : return
+      try:
+          if self.JDCDisplay_courant.modified == 'n' : 
+             self.JDCDisplay_courant.init_modif()
+          pere = self.JDCDisplay_courant.node_selected.parent
+          self.JDCDisplay_courant.node_selected.delete()
+          pere.select()
+      except AttributeError:
+          pass
+
+   def visuJDC_py(self):
+      """ 
+          Méthode permettant d'afficher dans une fenêtre à part l'écho au 
+            format python du jdc courant 
+      """
+      if not hasattr(self,'JDC') : return
+      jdc_fini = self.get_text_JDC('python')
+      if jdc_fini == None : return
+      Fenetre(self.appli,
+              titre = 'fichier '+ self.JDCName + ' à la syntaxe Python',
+              texte = jdc_fini)
+
+   def visuJDC(self):
+      """ 
+          Méthode permettant d'afficher dans une fenêtre à part l'écho au 
+            format .comm ou .py du jdc courant 
+      """
+      if not hasattr(self,'JDC') : return
+      titre = 'fichier '+ self.JDCName + ' à la syntaxe '+ self.code
+      format=self.appli.format_fichier.get()
+      self.jdc_fini = self.get_text_JDC(format)
+      if self.jdc_fini == None : return
+      self.visu_fichier_cmd = Fenetre(self.appli,titre=titre,texte = self.jdc_fini)
+
+   def get_text_JDC(self,format):
+      if generator.plugins.has_key(format):
+         # Le generateur existe on l'utilise
+         g=generator.plugins[format]()
+         jdc_formate=g.gener(self.JDC,format='beautifie')
+         if not g.cr.estvide():
+            print g.cr
+            self.appli.affiche_infos("Erreur à la generation")
+            showerror("Erreur à la generation","EFICAS ne sait pas convertir ce JDC")
+            return
+         else:
+            return jdc_formate
+      else:
+         # Il n'existe pas c'est une erreur
+         self.appli.affiche_infos("Format %s non reconnu" % format)
+         showerror("Format %s non reconnu" % format,"EFICAS ne sait pas convertir le JDC en format %s "% format)
+         return
+
+   def view_doc(self):
+      """
+          Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader
+          - Ne fonctionne pas sous UNIX (chemin d'accès Acrobat Reader)
+          - indication du chemin d'accès aux fichiers pdf à revoir : trop statique
+      """
+      if not self.JDCDisplay_courant : return
+      try:
+          cle_doc = self.JDCDisplay_courant.node_selected.item.get_docu()
+          if cle_doc == None : return
+          cle_doc = string.replace(cle_doc,'.','')
+          cle_doc = string.replace(cle_doc,'-','')
+          commande = self.appli.CONFIGURATION.exec_acrobat
+          nom_fichier = cle_doc+".pdf"
+          rep_fichier = cle_doc[0:2]
+          fichier = os.path.abspath(os.path.join(self.appli.CONFIGURATION.path_doc,rep_fichier,nom_fichier))
+          if os.name == 'nt':
+              os.spawnv(os.P_NOWAIT,commande,(commande,fichier,))
+          elif os.name == 'posix':
+              script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier)
+              pid = os.system(script)
+      except AttributeError:
+          traceback.print_exc()
+          pass
+
+   def visu_a_plat(self):
+      """ 
+          Méthode permettant d'afficher dans une fenêtre à part l'écho 'à plat' du jdc courant 
+      """
+      if not hasattr(self,'JDC') : return
+      titre = 'fichier '+ self.JDCName + ' à plat '
+      self.jdc_fini = self.get_text_JDC('aplat')
+      if self.jdc_fini == None : return
+      self.visu_fichier_cmd = Fenetre(self.appli,titre=titre,texte = self.jdc_fini)
+
+   def visu_txt_brut_JDC(self):
+      """
+           Méthode permettant d'afficher le jeu de commandes tel qu'il a été passé au JDC
+      """
+      if not hasattr(self,'JDC') : return
+      titre = "fichier de commandes utilisateur"
+      texte = self.JDC.procedure
+      if texte == None:
+            self.appli.affiche_infos("Pas de fichier initial")
+            showerror("Impossible de visualiser le fichier initial","EFICAS ne peut visualiser le fichier \
+                       initial.\nIl s'agit d'un nouveau JDC")
+            return
+      self.visu_texte_JDC = Fenetre(self.appli,titre=titre,texte=texte)
+
+   def affichage_fichier_ini(self):
+      """
+           Affichage des valeurs des paramètres relus par Eficas
+      """
+      self.appli.CONFIGURATION.affichage_fichier_ini()
+
+   def saveall(self,liste):
+      """ 
+           Sauvegarde tous les JDC contenus dans liste 
+      """
+      test = 1
+      for JDCDisplay in liste :
+          self.JDC = JDCDisplay.jdc
+          test = test * self.saveJDC(echo = 'non')
+      return test
+
+
+# ---------------------------------------------------------------------------
+#                      Méthodes liées aux mots-clés inconnus
+# ---------------------------------------------------------------------------
+
+   def mc_inconnus(self):
+      l_mc = self.JDCDisplay_courant.jdc.get_liste_mc_inconnus()
+      o = fenetre_mc_inconnus(l_mc)
+      l = o.wait_new_list()
+
diff --git a/Editeur/catabrowser.py b/Editeur/catabrowser.py
new file mode 100644 (file)
index 0000000..24535cb
--- /dev/null
@@ -0,0 +1,385 @@
+#@ MODIF catabrowser Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# Modules Python
+import os
+import sys
+import types
+import string
+import Pmw
+from Tkinter import *
+
+# Modules Eficas
+import fontes
+from treewidget import Tree
+from Objecttreeitem import TreeItem
+from Accas import AsException
+from Noyau.N_CR import justify_text
+from Accas import OPER,PROC,MACRO,FORM
+from Accas import FACT,BLOC,SIMP
+
+#
+__version__="$Name: V1_1p1 $"
+__Id__="$Id: catabrowser.py,v 1.1.1.1 2001/12/04 15:38:22 eficas Exp $"
+#
+class Tableau:
+  incr = 10
+  def __init__(self,parent,colonnes):
+    self.parent = parent
+    self.colonnes = colonnes
+    self.init()
+
+  def init(self):
+    # recherche du nombre maxi de lignes et de colonnes....
+    for col in self.colonnes :
+      nb_l = 0
+      if len(col) > nb_l : nb_l = len(col)
+    self.nb_lignes = nb_l
+    self.nb_colonnes = len(self.colonnes)
+    # initialisation des coordonnées dans le canvas
+    self.x0 = self.incr
+    self.y0 = self.incr
+    self.x = self.x0 + self.incr
+    self.y = self.y0 + self.incr
+
+  def affiche(self):    
+    self.scrolledcanvas=Pmw.ScrolledCanvas(self.parent,
+                                           hull_width=1.,
+                                           hull_height=1.,
+                                           borderframe=1)
+    Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95')
+    self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both")
+    self.canvas = self.scrolledcanvas.component('canvas')
+    self.affiche_colonnes()
+
+  def affiche_colonnes(self):
+    for i in range(self.nb_lignes):
+      self.affiche_ligne(i)
+    self.aligne_colonnes()
+    self.trace_traits()
+    self.scrolledcanvas.resizescrollregion()
+
+  def get_xy_max(self):
+    try:
+      x0,y0,xmax,ymax = self.canvas.bbox(ALL)
+      return xmax,ymax
+    except:
+      return None,None
+    
+  def trace_traits(self):
+    xmax,ymax = self.get_xy_max()
+    if not xmax : return
+    xmax = xmax+self.incr
+    ymax = ymax+self.incr
+    # trace les traits horizontaux
+    for i in range(self.nb_lignes):
+      tag_lig = 'ligne_'+`i`
+      l_id = self.canvas.find_withtag(tag_lig)
+      x0,y0,x1,y1 = self.bbox(l_id)
+      self.canvas.create_line(x0-self.incr,y0-self.incr,xmax,y0-self.incr)
+    self.canvas.create_line(self.x0,ymax,xmax,ymax)  
+    # trace les traits verticaux
+    for j in range(self.nb_colonnes):
+      tag_col = 'colonne_'+`j`
+      l_id = self.canvas.find_withtag(tag_col)
+      x0,y0,x1,y1 = self.bbox(l_id)
+      self.canvas.create_line(x0-self.incr,y0-self.incr,x0-self.incr,ymax)
+    self.canvas.create_line(xmax,self.y0,xmax,ymax)
+    
+  def bbox(self,l_id):
+    x0,y0,x1,y1 = self.canvas.bbox(l_id[0])
+    for id in l_id[1:]:
+      x2,y2,x3,y3 = self.canvas.bbox(id)
+      x0 = min(x2,x0)
+      y0 = min(y2,y0)
+      x1 = max(x3,x1)
+      y1 = max(y3,y1)
+    return x0,y0,x1,y1
+  
+  def affiche_ligne(self,num_lig):
+    tag_lig = 'ligne_'+`num_lig`
+    num_col = 0
+    for col in self.colonnes:
+      tag_col = 'colonne_'+`num_col`
+      x = 100*num_col+self.x
+      id = self.canvas.create_text(x,self.y,
+                                   text = justify_text(col[num_lig],cesure=60),
+                                   tag=(tag_lig,tag_col),
+                                   anchor='nw',
+                                   font = fontes.canvas)
+      x0,y0,x1,y1 = self.canvas.bbox(id)
+      num_col = num_col+1
+    l_id = self.canvas.find_withtag(tag_lig)
+    x0,y0,x1,y1 = self.bbox(l_id)
+    self.y = y1 + 2*self.incr
+
+  def aligne_colonnes(self):
+    num_col = 0
+    for col in self.colonnes:
+      tag_col = 'colonne_'+`num_col`
+      l_id = self.canvas.find_withtag(tag_col)
+      if not l_id : continue
+      x0,y0,x1,y1 = self.bbox(l_id)
+      self.move(x1+self.incr,self.colonnes[num_col+1:],num_col+1)
+      num_col = num_col+1
+
+  def move(self,x,colonnes,num):
+    num_col = num
+    for col in colonnes:
+      tag_col = 'colonne_'+`num_col`
+      l_id = self.canvas.find_withtag(tag_col)
+      if not l_id : continue
+      x0,y0,x1,y1 = self.canvas.bbox(l_id[0])
+      self.canvas.move(tag_col,x+self.incr-x0,0)
+      num_col = num_col+1
+    
+class CATAPanel(Frame) :
+  """ Classe servant à créer le panneau représentant l'objet sélectionné dans l'arbre"""
+  def __init__(self,parent,panneau,node) :
+    self.parent=parent
+    self.panneau = panneau
+    self.node=node
+    Frame.__init__(self,self.panneau)
+    self.place(x=0,y=0,relheight=1,relwidth=1)
+    self.init()
+
+  def init(self):
+    # création du label initial
+    label = Label(self,
+                  text = 'Attributs de '+self.node.item.labeltext,
+                  font = fontes.standard_gras_souligne)
+    label.pack(side='top',pady=10)
+    # création des listes correspondant aux colonnes du tableau à afficher
+    colonne1,colonne2 = self.get_listes()
+    # affichage du tableau
+    self.tableau = Tableau(self,(colonne1,colonne2))
+    self.tableau.affiche()
+
+  def get_listes(self):    
+    self.node.item.get_dico_attributs()
+    l_cles_attributs = self.node.item.d_attributs.keys()
+    l_cles_attributs.sort()
+    ind=0
+    liste1 = []
+    liste2=[]
+    for nom_attr in l_cles_attributs :
+      valeur = self.node.item.d_attributs[nom_attr]
+      if type(valeur) == types.TupleType:
+        texte =''
+        for elem in valeur:
+          if type(elem) == types.ClassType:
+            texte = texte + elem.__name__
+          else:
+            texte = texte + str(elem)
+      elif type(valeur) == types.ClassType :
+        texte = valeur.__name__
+      else:
+        texte = str(valeur)
+      liste1.append(nom_attr)
+      liste2.append(texte)
+    return liste1,liste2
+
+class CATAItem(TreeItem):
+  panel = CATAPanel
+  def __init__(self,appli,labeltext,object,setfunction=None,objet_cata_ordonne = None):
+    self.appli = appli
+    self.labeltext = labeltext
+    self.object=object
+    self.setfunction = setfunction
+    self.objet_cata_ordonne = objet_cata_ordonne
+
+  def get_dico_fils(self):
+    d_fils = {}
+    if type(self.object) != types.TupleType:
+      for e in dir(self.object):
+        cmd = getattr(self.object,e)
+        if isCMD(cmd) :
+          d_fils[string.strip(cmd.nom)] = cmd
+    else:
+      for obj in self.object :
+        for e in dir(obj):
+          cmd = getattr(obj,e)
+          if isCMD(cmd) :
+            d_fils[string.strip(cmd.nom)] = cmd
+    self.d_fils = d_fils
+
+  def get_dico_attributs(self):
+    d_attributs ={}
+    if type(self.object) == types.TupleType :
+      self.d_attributs = d_attributs
+      return
+    l_noms_attributs = ['nom','op','sd_prod','reentrant','repetable','fr','docu','into','valide_vide','actif',
+                        'regles','op_init','niveau','definition','code','niveaux','statut',
+                        'defaut','min','max','homo','position','val_min','val_max','condition']
+    for nom_attribut in l_noms_attributs :
+      if hasattr(self.object,nom_attribut):
+        attr = getattr(self.object,nom_attribut)
+        d_attributs[nom_attribut] = attr
+    self.d_attributs = d_attributs
+
+  def get_liste_mc_ordonnee(self):
+    """ Retourne la liste ordonnée (suivant le catalogue) brute des fils
+    de l'entite courante """
+    if hasattr(self.objet_cata_ordonne,'liste'):
+      return self.objet_cata_ordonne.liste
+    else :
+      l=self.objet_cata_ordonne.keys()
+      l.sort()
+      return l
+      
+  def GetLabelText(self):
+    return self.labeltext,None,None
+
+  def get_fr(self):
+    return ''
+  
+  def isMCList(self):
+    return 0
+  
+  def GetSubList(self):
+    sublist=[]
+    if not hasattr(self,'d_fils'):
+      self.get_dico_fils()
+    # on classe les fils dans l'odre du catalogue ...
+    l_cles_fils = self.get_liste_mc_ordonnee()
+    for k in l_cles_fils :
+      if type(self.objet_cata_ordonne) == types.InstanceType :
+        objet_cata = self.objet_cata_ordonne.dico[k]
+      else :
+        objet_cata = self.objet_cata_ordonne.get(k,None)
+      item = make_objecttreeitem(self.appli,k + " : ",self.d_fils[k],
+                                 objet_cata_ordonne = objet_cata)
+      sublist.append(item)
+    return sublist
+
+  def GetIconName(self):
+    return 'ast-green-square'
+
+  def isactif(self):
+    return 1
+  
+class CMDItem(CATAItem):
+
+  def get_dico_fils(self):
+    self.d_fils = self.object.entites
+
+class SIMPItem(CATAItem):
+  d_fils={}
+  d_attributs={}
+
+  def GetIconName(self):
+    return 'ast-green-ball'
+
+  def IsExpandable(self):
+    return 0
+  
+class FACTItem(CMDItem):
+  def GetIconName(self):
+    return 'ast-green-los'
+
+class BLOCItem(FACTItem): pass
+
+class ATTRIBUTItem(SIMPItem):
+  def get_dico_attributs(self):
+    self.d_attributs = {}
+
+  def GetSubList(self):
+    return []
+
+  def IsExpandable(self):
+    return 0
+
+  def GetText(self):
+    return self.object
+
+  def GetIconName(self):
+    return 'aucune'  
+
+class CataBrowser:
+  def __init__(self,parent,appli,cata,item = None):
+    self.parent = parent
+    self.cata = cata
+    self.appli = appli
+    self.item = item
+    self.init()
+
+  def close(self):
+    self.top.destroy()
+
+  def init(self):
+    self.nodes={}
+    self.top = Pmw.Dialog(self.parent,
+                          title = "Visualisation d'un catalogue",
+                          buttons=('OK',),
+                          command = self.quit)
+    self.pane = Pmw.PanedWidget(self.top.component('dialogchildsite'),
+                                hull_width = 800,
+                                hull_height = 500,
+                                orient = 'horizontal')
+    self.pane.add('canvas',min = 0.4, max = 0.6, size = 0.5)
+    self.pane.add('panel',min = 0.4, max = 0.6, size = 0.5)
+    self.pane.pack(expand =1, fill = 'both')
+    self.scrolledcanvas = Pmw.ScrolledCanvas(self.pane.pane('canvas'),
+                                             hull_width=1.,
+                                             hull_height=1.,
+                                             borderframe=1)
+    Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95')
+    self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both")
+    if self.item == None :
+      self.item = CATAItem(self.appli,"Catalogue",self.cata)
+    self.tree = Tree(self.appli,self.item,self.scrolledcanvas,command = self.select_node)
+    self.tree.draw()
+    self.node = self.tree.node_selected
+
+  def select_node(self,node):
+    self.nodes[node]=self.create_panel(node)
+
+  def create_panel(self,node):
+    if hasattr(node.item,"panel"):
+      return getattr(node.item,"panel")(self,self.pane.pane('panel'),node)
+      
+  def quit(self,nom_bouton) :
+    self.top.destroy()
+    
+  def settitle(self):
+    self.top.wm_title("Browser de catalogue " )
+    self.top.wm_iconname("CataBrowser")
+
+dispatch = {
+    OPER  : CMDItem,
+    PROC  : CMDItem,
+    MACRO  : CMDItem,
+    SIMP : SIMPItem,
+    FACT : FACTItem,
+    BLOC : BLOCItem,
+}
+
+def TYPE(o):
+  if isinstance(o,OPER):return OPER
+  elif isinstance(o,PROC):return PROC
+  elif isinstance(o,MACRO):return MACRO
+  elif isinstance(o,FORM):return MACRO
+  elif isinstance(o,SIMP):return SIMP
+  elif isinstance(o,FACT):return FACT
+  elif isinstance(o,BLOC):return BLOC
+  else:return type(o)
+
+def make_objecttreeitem(appli,labeltext, object, setfunction=None,objet_cata_ordonne=None):
+    t = TYPE(object)
+    if dispatch.has_key(t):
+      c = dispatch[t]
+    else:
+      #print 'on a un objet de type :',t,'  ',object
+      c = ATTRIBUTItem
+    return c(appli,labeltext, object, setfunction = setfunction,objet_cata_ordonne=objet_cata_ordonne)
+
+def isCMD(cmd):
+   return isinstance(cmd,OPER) or isinstance(cmd,PROC) or isinstance(cmd,MACRO) or isinstance(cmd,FORM)
+
+
+
diff --git a/Editeur/cataediteur.py b/Editeur/cataediteur.py
new file mode 100644 (file)
index 0000000..5cdbe21
--- /dev/null
@@ -0,0 +1,957 @@
+#@ MODIF cataediteur Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# Modules Python
+import os
+import sys
+import types
+import string
+import Pmw
+from tkMessageBox import showinfo,askyesno,showerror,askretrycancel
+from Tkinter import *
+
+# Modules Eficas
+import fontes
+from widgets import *
+from treewidget import Tree
+from Objecttreeitem import TreeItem
+from Accas import AsException
+from Noyau.N_CR import justify_text
+
+from Accas import ASSD,GEOM
+import definition_cata
+
+#
+__version__="$Name: V1_1p1 $"
+__Id__="$Id: cataediteur.py,v 1.1.1.1 2001/12/04 15:38:22 eficas Exp $"
+#
+
+Fonte_Niveau = fontes.canvas_gras_italique
+
+class Panel(Frame) :
+  """ Classe servant de classe mère à toutes celles représentant les
+      panneaux à afficher en fonction de la nature de l'objet en cours
+      Elle est toujours dérivée."""
+  def __init__(self,parent,panneau,node) :
+      self.parent=parent
+      self.panneau = panneau
+      self.node=node
+      Frame.__init__(self,self.panneau)
+      self.place(x=0,y=0,relheight=1,relwidth=1)
+      #self.creer_boutons()
+      self.init()
+
+  def creer_boutons(self):
+      """ Méthode créant les boutons se trouvant dans la partie contextuelle d'EFICAS
+      (à droite sous les onglets ) """
+      self.fr_but = Frame(self,height=30)
+      self.fr_but.pack(side='bottom',fill='x')
+      self.bouton_com = Button(self.fr_but,
+                               text = 'Commentaire',
+                               command = self.ajout_commentaire,
+                               width=14)
+      self.bouton_sup = Button(self.fr_but,
+                               text = "Supprimer",
+                               command=self.supprimer,
+                               width=14)
+      self.bouton_doc = Button(self.fr_but,
+                               text="Documentation",
+                               command=self.visu_doc,
+                               width=14)
+      self.bouton_cata = Button(self.fr_but,
+                                text = "Catalogue",
+                                command = self.show_catalogue,
+                                width=14)
+      if self.parent.appli.CONFIGURATION.isdeveloppeur == 'OUI':
+          self.bouton_sup.place(relx=0.25,rely = 0.5,relheight = 0.8,anchor='w')
+          self.bouton_cata.place(relx=0.5,rely = 0.5,relheight = 0.8,anchor='w')
+          self.bouton_doc.place(relx=0.75,rely = 0.5,relheight = 0.8,anchor='w')
+      else:
+          self.bouton_sup.place(relx=0.3,rely = 0.5,relheight = 0.8,anchor='w')
+          self.bouton_doc.place(relx=0.7,rely = 0.5,relheight = 0.8,anchor='w')
+
+  def show_catalogue(self):
+      try:
+          genea = self.node.item.get_genealogie()
+          self.parent.appli.browser_catalogue_objet(genea)
+      except Exception,e:
+          traceback.print_exc()
+      
+  def efface(self):
+      self.node.efface()
+      
+  def ajout_commentaire(self,ind='after'):
+      """ Ajoute un commentaire à l'intérieur du JDC, par défaut après le noeud en cours"""
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      return self.node.append_brother("COMMENTAIRE",ind)
+    
+  def ajout_commentaire_first(self):
+      """ Ajoute un commentaire en début de JDC"""
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      return self.node.append_child("COMMENTAIRE",'first')
+        
+  def visu_doc(self):
+      """ Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader
+        - Ne fonctionne pas sous UNIX (chemin d'accès Acrobat Reader)
+        - indication du chemin d'accès aux fichiers pdf à revoir : trop statique"""
+      #cle_doc = self.node.item.get_docu()
+      cle_doc = self.parent.appli.get_docu(self.node)
+      if cle_doc == None : return
+      cle_doc = string.replace(cle_doc,'.','')
+      #cle_doc = string.upper(cle_doc)
+      commande = self.parent.appli.CONFIGURATION.exec_acrobat
+      #nom_fichier = cle_doc+".pdf"
+      nom_fichier = cle_doc+".doc"
+      rep_fichier = cle_doc[0:2]
+      fichier = os.path.abspath(os.path.join(self.parent.appli.CONFIGURATION.path_doc,rep_fichier,nom_fichier))
+      print 'commande =',commande
+      print 'fichier =',fichier
+      print 'existe =',os.path.isfile(fichier)
+      if os.name == 'nt':
+          os.spawnv(os.P_NOWAIT,commande,(commande,fichier))
+      elif os.name == 'posix':
+          script ="#!/usr/bin/sh \n%s %s" %(commande,nom_fichier)
+          pid = os.system(script)
+      
+  def supprimer(self):
+      """ Suppression du noeud courant """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      pere = self.node.parent
+      self.node.delete()
+      pere.select()
+      
+  def affiche(self):
+      """ Force l'affichage des fenêtres en cours """
+      self.tkraise()
+
+  def selectMC(self,name):
+      """ On retrouve le mot-clé sous le curseur pour affichage du fr """
+      cmd=self.node.item.get_definition()
+      texte_infos = ''
+      for e in cmd.entites.keys() :
+          if e == name :
+              texte_infos=cmd.entites[e].fr
+              break
+      if texte_infos == '' : texte_infos="Pas d'infos disponibles"
+      self.parent.appli.affiche_infos(texte_infos)
+
+  def defMC(self,name):
+      """ On ajoute un mot-clé à la commande : subnode """
+      if name == SEPARATEUR:return
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != "COMMENTAIRE":
+          self.node.append_child(name)
+      else :
+          self.ajout_commentaire()    
+
+  def selectFilsCmd(self,name):
+      pass
+          
+  def defFilsCmd(self,name):
+      pass
+    
+  def defCmdFirst(self,name):
+      """ On ajoute une commande ou un commentaire au début du fichier de commandes """
+      if name == SEPARATEUR:return
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != "COMMENTAIRE":
+          new_node = self.node.append_child(name,'first')
+      else :
+          new_node = self.ajout_commentaire_first()
+
+  def add_commande_avant(self,event=None):
+    pass
+
+  def add_commande_apres(self,event=None):
+    pass          
+        
+class OngletPanel(Panel) :
+  """ Cette classe est virtuelle et doit être dérivée
+      Elle contient les principales méthodes d'affichage des différents onglets"""
+
+  def raisecmd(self,page):
+      self.nb.page(page).focus_set()
+      if page == 'Concept': self._any.focus()
+
+  def affiche(self):
+      page=self.nb.getcurselection()
+      self.nb.page(page).focus_set()
+      if page == 'Concept':self._any.component('entry').focus_set()
+      self.tkraise()
+
+  def makeConceptPage(self,page):
+      """ Crée la page de saisie du nom du concept """
+      self.label = Label(page,text='Nom du concept :')
+      self.label.place(relx=0.1,rely=0.4)
+      self._any = Entry(page,relief='sunken')
+      self._any.place(relx=0.35,rely=0.4,relwidth=0.5)
+      self._any.bind("<Return>",lambda e,s=self:s.execConcept())
+      self._any.insert(0,self.node.item.GetText())
+      type_sd = self.node.item.object.get_type_sd_prod()
+      if type_sd :
+          txt = "L'opérateur courant retourne un objet de type %s" %type_sd
+          self.label = Label(page, text = txt)
+          self.label.place(relx=0.5,rely=0.55,anchor='n')
+      self._any.focus()
+          
+  def makeCommandePage(self,page):
+      """ Affiche la page d'ajout d'une commande relativement à l'objet commande sélectionné """
+      titre = "Où voulez-vous insérer une commande par rapport à %s" %self.node.item.object.nom
+      Label(page,text=titre).place(relx=0.5,rely=0.2,anchor='w')
+      b_avant = Button(page,text='AVANT',
+                       command = self.node.item.add_commande_avant)
+      b_apres = Button(page,text='APRES',
+                       command = self.node.item.add_commande_apres)
+      b_avant.place(relx=0.35,rely=0.5,anchor='w')
+      b_apres.place(relx=0.65,rely=0.5,anchor='w')
+
+  def deselectMC(self,name):
+      self.parent.appli.affiche_infos('')
+    
+  def get_liste_cmd(self):
+      listeCmd = self.node.item.object.niveau.definition.get_liste_cmd()
+      return listeCmd
+
+  def get_liste_fils_cmd(self):
+      return ['Mot-clé simple','Mot-clé facteur','Bloc']
+
+  def makeMoclesPage(self,page):
+      frame1 = Frame(page,height = 20)
+      frame1.pack(side='top',fill='x')
+      label = Label(frame1,text ="Le mot-clé choisi sera ajouté à la fin du catalogue")
+      label.pack(side='top')
+      frame2 = Frame(page)
+      frame2.pack(side='top',fill='both',expand=1)
+      liste_cmd = self.get_liste_fils_cmd()
+      liste_commandes = (("<Enter>",self.selectFilsCmd),
+                         ("<Leave>",self.deselectFilsCmd),
+                         ("<Double-Button-1>",self.defFilsCmd))
+      Liste = ListeChoix(self,frame2,liste_cmd,liste_commandes = liste_commandes,titre = "Mots-clés")
+      Liste.affiche_liste()
+
+  def deselectFilsCmd(self,name):
+      pass
+    
+  def makeJDCPage(self,page):
+      liste_cmd = self.get_liste_cmd()
+      liste_commandes = (("<Enter>",self.selectCmd),
+                         ("<Leave>",self.deselectCmd),
+                         ("<Double-Button-1>",self.defCmdFirst))
+      Liste = ListeChoix(self,page,liste_cmd,liste_commandes = liste_commandes,filtre='oui',titre = "Commandes")
+      Liste.affiche_liste()
+
+  def makeReglesPage(self,page) :
+    regles = []
+    regles = self.node.item.get_regles()
+    dictionnaire = self.node.item.get_mc_presents()
+    texte_regles = []
+    l_regles_en_defaut=[]
+    if len(regles) > 0:
+      i = 0
+      for regle in regles :
+        texte_regles.append(regle.gettext())
+        texte,test = regle.verif(dictionnaire)
+        if test == 0 : l_regles_en_defaut.append(i)
+        i = i+1
+    Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles")
+    Liste.affiche_liste()
+    #self.afficheListe(page,texte_regles,self.selectRegle,self.execRegle)
+
+  def execConcept(self):
+      """ Nomme le concept SD retourné par l'étape """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      nom = self._any.get()
+      # Pourquoi node.etape ???
+      #test,mess = self.node.etape.item.nomme_sd(nom)
+      test,mess = self.node.item.nomme_sd(nom)
+      self.parent.appli.affiche_infos(mess)
+      self.node.racine.update()
+  
+  def changed(self):
+      pass
+
+  def makeAttributsPage(self,page):
+    l_attributs=self.node.item.object.attributs
+    d_defauts = self.node.item.object.attributs_defauts
+    for attribut in l_attributs :
+      attr = self.node.item.object.entites_attributs.get(attribut,None)
+      if attr.valeur is d_defauts[attribut] :
+        texte = attribut+' = '+repr(attr.valeur)+' (defaut)'
+      else:
+        texte = attribut+' = '+repr(attr.valeur)
+      Label(page,text=texte).pack(side='top')
+
+  def makeSimpPage(self,page):
+    texte = "Où voulez-vous ajouter un mot-clé simple ?"
+    Label(page,text=texte).place(relx=0.5,rely=0.3,anchor='center')
+    b1 = Button(page,text='AVANT '+self.node.item.object.nom,command=self.add_simp_avant)
+    b2 = Button(page,text='APRES '+self.node.item.object.nom,command=self.add_simp_apres)
+    b1.place(relx=0.5,rely=0.5,anchor='center')
+    b2.place(relx=0.5,rely=0.6,anchor='center')
+
+  def add_simp_avant(self,event=None):
+    """
+    Ajoute un mot-clé simple avant celui courant
+    """
+    self.node.append_brother('new_simp','before')
+    self.node.update()
+
+  def add_simp_apres(self,event=None):
+    """
+    Ajoute un mot-clé simple après celui courant
+    """
+    self.node.append_brother('new_simp','after')
+    self.node.update()    
+    
+class TYPEPanel(Frame):
+  def __init__(self,parent,panneau,node) :
+      self.parent=parent
+      self.panneau = panneau
+      self.node=node
+      Frame.__init__(self,self.panneau)
+      self.place(x=0,y=0,relheight=1,relwidth=1)
+      self.creer_texte()
+
+  def creer_texte(self):
+      texte = "Le noeud sélectionné correspond à un type\n"
+      self.label = Label(self,text=texte)
+      self.label.place(relx=0.5,rely=0.4,relwidth=0.8,anchor='center')
+
+class OPERPanel(OngletPanel):
+  def init(self):
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('Mocles', tab_text='Ajouter mots-clés')
+    nb.add('Commandes',tab_text='Ajouter une commande')
+    self.makeMoclesPage(nb.page("Mocles"))
+    self.makeCommandePage(nb.page("Commandes"))
+    nb.tab('Mocles').focus_set()
+    nb.setnaturalsize()
+    self.affiche()
+   
+class SIMPPanel(OngletPanel):
+  def init(self):
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('generaux', tab_text='Données générales')
+    nb.add('ihm',tab_text='Données IHM')
+    nb.add('mocle',tab_text='Ajouter un mot-cle simple')
+    self.makeAttributsGenerauxPage(nb.page("generaux"))
+    self.makeAttributsIHMPage(nb.page("ihm"))
+    self.makeSimpPage(nb.page('mocle'))
+    nb.tab('generaux').focus_set()
+    nb.setnaturalsize()
+    self.affiche()
+
+  def makeAttributsGenerauxPage(self,page):
+    fr1 = Frame(page,bd=1,relief='raised')
+    fr2 = Frame(page,bd=1,relief='raised')
+    fr3 = Frame(page,bd=1,relief='raised')
+    fr4 = Frame(page,bd=1,relief='raised')
+    fr5 = Frame(page,bd=1,relief='raised')
+    fr1.place(relheight=0.14,relwidth=1,rely=0)
+    fr2.place(relheight=0.14,relwidth=1,rely=0.14)
+    fr3.place(relheight=0.29,relwidth=1,rely=0.28)
+    fr4.place(relheight=0.14,relwidth=1,rely=0.57)
+    fr5.place(relheight=0.28,relwidth=1,rely=0.71)
+    # nom du mot-clé
+    Label(fr1,text = 'Nom :').place(relx=0.05,rely=0.3,anchor='w')
+    self.e_nom = Entry(fr1)
+    self.e_nom.place(relx=0.35,rely=0.3,relwidth=0.3,anchor='w')
+    self.e_nom.bind("<Return>",lambda e,s=self : s.set_valeur_attribut('nom',None))
+    self.e_nom.insert(0,self.get_valeur_attribut('nom'))
+    # Statut
+    Label(fr1,text='Statut : ').place(relx=0.05,rely=0.7,anchor='w')
+    self.statut=StringVar()
+    valeurs_statut=[('obligatoire','o'),
+                    ('facultatif','f'),
+                    ('caché','c')
+                    ]
+    self.statut.set(self.node.item.object.get_valeur_attribut('statut'))
+    i=0
+    for text,mode in valeurs_statut:
+      b=Radiobutton(fr1,text=text,variable=self.statut,value=mode,
+                    command = lambda s=self,m=mode : s.set_valeur_attribut('statut',m))
+      b.place(relx=0.25+i*0.25,rely=0.7,anchor='w')
+      i=i+1
+    # Type ...
+    Label(fr2,text='Type de la valeur : ').place(relx=0.05,rely=0.5,anchor='w')
+    self.e_type = Entry(fr2)
+    self.e_type.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w')
+    self.e_type.insert(0,self.node.item.object.get_valeur_attribut('type'))
+    # Domaine de validité
+    Label(fr3,text='Domaine de validité : ').place(relx=0.05,rely=0.2,anchor='w')
+    self.domaine = StringVar()
+    self.domaine.set(self.node.item.object.get_valeur_attribut('domaine_validité'))
+    b1=Radiobutton(fr3,text='continu',variable=self.domaine,value='continu',
+                   command=lambda s=self,f=fr3 :s.change_domaine(f))
+    b2=Radiobutton(fr3,text='discret',variable=self.domaine,value='discret',
+                   command=lambda s=self,f=fr3 :s.change_domaine(f))
+    b1.place(relx=0.35,rely=0.2,anchor='w')
+    b2.place(relx=0.65,rely=0.2,anchor='w')
+    self.change_domaine(fr3)
+    # Défaut ...
+    if self.domaine.get() == 'continu':
+      # le développeur peut donner la valeur qu'il souhaite, moyennant la vérification de type...
+      Label(fr4,text='Valeur par défaut : ').place(relx=0.05,rely=0.5,anchor='w')
+      self.e_defaut = Entry(fr4)
+      self.e_defaut.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w')
+      if self.node.item.object.get_valeur_attribut('defaut') :
+        self.e_defaut.insert(0,self.node.item.object.get_valeur_attribut('defaut'))
+      self.e_defaut.bind("<Return>",lambda e,s=self : s.set_valeur_attribut('defaut',None))
+    else :
+      # dans le cas discret, la valeur par défaut doit être dans l'ensemble des valeurs possibles (into)
+      liste = self.node.item.object.get_valeur_attribut('into')
+      if self.node.item.object.get_valeur_attribut('defaut') :
+        self.set_valeur_attribut('defaut',self.node.item.object.get_valeur_attribut('defaut'))
+      if liste == None : liste = []
+      self.e_defaut = Pmw.OptionMenu(fr4,labelpos='w',label_text = "Valeur par défaut : ",
+                                     items = self.node.item.object.get_valeur_attribut('into'),
+                                     menubutton_width=30)
+      self.e_defaut.configure(command = lambda e,s=self : s.set_valeur_attribut('defaut',None))
+      self.e_defaut.place(relx=0.05,rely=0.5,anchor='w')
+    # Liste de valeurs ?
+    Label(fr5,text='Liste de valeurs : ').place(relx=0.05,rely=0.2,anchor='w')
+    self.liste_valeurs = BooleanVar()
+    liste_valeurs = [('OUI',1),('NON',0)]
+    self.liste_valeurs.set(0)
+    i=0
+    for text,mode in liste_valeurs:
+      b=Radiobutton(fr5,text=text,variable=self.liste_valeurs,value=mode,
+                    command=lambda s=self,f=fr5 :s.change_liste_valeurs(f))
+      b.place(relx=0.35+i*0.2,rely=0.2,anchor='w')
+      i=i+1
+    self.change_liste_valeurs(fr5)
+
+  def makeAttributsIHMPage(self,page):
+    fr1 = Frame(page,height=100,bd=1,relief='raised')
+    fr2 = Frame(page,height=50,bd=1,relief='raised')
+    fr1.pack(side='top',fill='x')
+    fr2.pack(side='top',fill='x')
+    # Champ fr ...
+    Label(fr1,text='Champ fr : ').place(relx=0.05,rely=0.35,anchor='w')
+    self.e_fr = Entry(fr1)
+    self.e_fr.place(relx=0.35,rely=0.35,relwidth=0.6,anchor='w')
+    self.e_fr.insert(0,self.node.item.object.get_valeur_attribut('fr'))
+    # Champ ang ...
+    Label(fr1,text='Champ ang : ').place(relx=0.05,rely=0.70,anchor='w')
+    self.e_ang = Entry(fr1)
+    self.e_ang.place(relx=0.35,rely=0.70,relwidth=0.6,anchor='w')
+    self.e_ang.insert(0,self.node.item.object.get_valeur_attribut('ang'))
+    # Clé documentaire ...
+    Label(fr2,text='Clé documentaire : ').place(relx=0.05,rely=0.50,anchor='w')
+    self.e_docu = Entry(fr2)
+    self.e_docu.place(relx=0.35,rely=0.50,relwidth=0.6,anchor='w')
+    self.e_docu.insert(0,self.node.item.object.get_valeur_attribut('docu'))
+    
+  def detruit_widgets(self,l_widgets):
+    for nom_widg in l_widgets :
+      try:
+        widg = getattr(self,nom_widg)
+        widg.place_forget()
+        delattr(self,nom_widg)
+      except:
+        pass
+
+  def change_liste_valeurs(self,fr5):
+    valeur = self.liste_valeurs.get()
+    if valeur == 0 :
+      # pas de liste de valeurs
+      l_widgets=['l_homo','b1_homo','b2_homo','l_min','e_min','l_max','e_max']
+      self.detruit_widgets(l_widgets)
+    elif valeur == 1:
+      # pas de widgets à détruire ...
+      if hasattr(self,'l_homo') :
+        # on est déjà en mode 'liste' --> rien à faire
+        return 
+      # homo
+      self.l_homo = Label(fr5,text='Liste homogène : ')
+      self.l_homo.place(relx=0.05,rely=0.4,anchor='w')
+      self.homo = BooleanVar()
+      self.homo.set(self.node.item.object.get_valeur_attribut('homo'))
+      self.b1_homo=Radiobutton(fr5,text='OUI',variable=self.homo,value=1)
+      self.b2_homo=Radiobutton(fr5,text='NON',variable=self.homo,value=0)
+      self.b1_homo.place(relx=0.35,rely=0.4,anchor='w')
+      self.b2_homo.place(relx=0.65,rely=0.4,anchor='w')
+      # min ...
+      self.l_min = Label(fr5,text='Longueur minimale : ')
+      self.l_min.place(relx=0.05,rely=0.6,anchor='w')
+      self.e_min = Entry(fr5)
+      self.e_min.place(relx=0.4,rely=0.6,relwidth=0.3,anchor='w')
+      self.e_min.insert(0,self.node.item.object.get_valeur_attribut('min'))
+      # max ...
+      self.l_max = Label(fr5,text='Longueur maximale : ')
+      self.l_max.place(relx=0.05,rely=0.8,anchor='w')
+      self.e_max = Entry(fr5)
+      self.e_max.place(relx=0.4,rely=0.8,relwidth=0.3,anchor='w')
+      self.e_max.insert(0,self.node.item.object.get_valeur_attribut('max'))
+      
+  def change_domaine(self,fr3):
+    valeur = self.domaine.get()
+    if valeur == 'discret' :
+      l_widgets = ['l_val_min','l_val_max','e_val_min','e_val_max']
+      self.detruit_widgets(l_widgets)
+      # into
+      #self.l_into = Label(fr3,text='Ensemble de valeurs : ')
+      #self.l_into.place(relx=0.2,rely=0.5,anchor='w')
+      self.e_into = Pmw.ScrolledListBox(fr3,
+                                        items=self.node.item.object.get_valeur_attribut('into'),
+                                        labelpos='w',
+                                        label_text= 'Ensemble de valeurs : ',
+                                        listbox_height = 3,
+                                        dblclickcommand = self.change_into)
+      self.e_into.place(relx=0.05,rely=0.6,relwidth=0.9,anchor='w')
+      #self.e_into.insert(0,self.node.item.object.get_valeur_attribut('into'))
+    elif valeur == 'continu':
+      l_widgets = ['l_into','e_into']
+      self.detruit_widgets(l_widgets)
+      if hasattr(self,'l_val_min'):
+        # on est déjà en mode 'continu' --> rien à faire
+        return
+      # val_min
+      self.l_val_min = Label(fr3,text='Valeur minimale : ')
+      self.l_val_min.place(relx=0.05,rely=0.5,anchor='w')
+      self.e_val_min = Entry(fr3)
+      self.e_val_min.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w')
+      self.e_val_min.bind("<Return>",lambda e,s=self : s.set_valeur_attribut('val_min',None))
+      self.set_valeur_attribut('val_min',self.get_valeur_attribut('val_min'))
+      # val_max
+      self.l_val_max = Label(fr3,text='Valeur maximale : ')
+      self.l_val_max.place(relx=0.05,rely=0.8,anchor='w')
+      self.e_val_max = Entry(fr3)
+      self.e_val_max.place(relx=0.35,rely=0.8,relwidth=0.5,anchor='w')
+      self.e_val_max.bind("<Return>",lambda e,s=self : s.set_valeur_attribut('val_max',None))
+      self.set_valeur_attribut('val_max',self.get_valeur_attribut('val_max'))
+
+# ------------------------------------------------------------------
+# Méthodes de validation des entrées faites par l'utilisateur
+# ------------------------------------------------------------------
+
+  def get_valeur_attribut(self,nom_attr):
+    """
+    Demande à l'item de retourner la valeur de l'attribut nom_attr
+    """
+    return self.node.item.get_valeur_attribut(nom_attr)
+  
+  def set_valeur_attribut(self,nom_attr,new_valeur):
+    """
+    Affecte la valeur new_valeur à l'attribut nom_attr
+    Vérifie si celle-ci est valide, sinon restaure l'ancienne
+    """
+    if new_valeur is None :
+      widget = getattr(self,'e_'+nom_attr)
+      if hasattr(widget,'getcurselection'):
+        new_valeur = widget.getcurselection()
+      else:
+        new_valeur = widget.get()
+    print "on affecte %s a %s" %(str(new_valeur),nom_attr)
+    self.node.item.set_valeur_attribut(nom_attr,new_valeur)
+    self.node.update()
+
+  def change_into(self):
+    """
+    Méthode activée par double clic sur la ListBox d'affichage des valeurs discrètes possibles :
+    permet de changer la liste de ces valeurs
+    """
+    showinfo("Fonction non encore disponible",
+             "Vous ne pouvez pas encore modifier la liste into par cette IHM")
+    
+class OBJECTItem(TreeItem):
+  def __init__(self,appli,labeltext,object,setfunction=None,objet_cata_ordonne = None):
+    self.appli = appli
+    self.labeltext = labeltext
+    self.object=object
+    self.setfunction = setfunction
+    self.objet_cata_ordonne = objet_cata_ordonne
+    
+  def GetLabelText(self):
+    return self.labeltext,None,None
+
+  def get_fr(self):
+    return ''
+  
+  def isMCList(self):
+    return 0
+
+  def isactif(self):
+    return 1
+
+  def add_commande_avant(self):
+    pass
+
+  def add_commande_apres(self):
+    pass
+
+  def set_valeur_attribut(self,nom_attr,new_valeur):
+    """
+    Affecte la valeur new_valeur à l'attribut nom_attr
+    Vérifie si celle-ci est valide, sinon restaure l'ancienne
+    """
+    old_valeur = self.object.get_valeur_attribut(nom_attr)
+    self.object.set_valeur_attribut(nom_attr,new_valeur)
+    verificateur = 'verif_'+nom_attr
+    if hasattr(self.object,verificateur):
+      if not getattr(self.object,verificateur)():
+        # la nouvelle valeur de nom_attr n'est pas valide : on restaure l'ancienne (sans vérification)
+        self.object.set_valeur_attribut(nom_attr,old_valeur)
+        print 'changement de valeur refuse'
+        return
+    print 'changement de valeur accepte'
+    self.object.init_modif()
+
+  def get_valeur_attribut(self,nom_attr):
+    """
+    Retourne la valeur de l'attribut nom_attr
+    """
+    return self.object.get_valeur_attribut(nom_attr)
+        
+class CATAItem(OBJECTItem):
+  def GetSubList(self):
+    sublist=[]
+    for fils in self.object.entites_fils:
+      item = make_objecttreeitem(self.appli,fils.objet.label + " : ",fils,objet_cata_ordonne=self.objet_cata_ordonne)
+      sublist.append(item)
+    return sublist
+  
+  def GetIconName(self):
+    if self.object.isvalid():
+      return 'ast-green-square'
+    else:
+      return 'ast-red-square'
+
+  def GetText(self):
+    return "Catalogue %s" %self.appli.code
+
+  def add_commande_avant(self):
+    pass
+
+  def add_commande_apres(self):
+    pass
+
+     
+def transforme_liste_dico(liste):
+  d={}
+  for item in liste :
+    d[item.nom]=item
+  return d
+      
+class OPERItem(OBJECTItem):
+  panel = OPERPanel
+  def GetSubList(self):
+    sublist=[]
+    # on classe les fils dans l'ordre du catalogue ...
+    l_cles_fils = self.get_liste_mc_ordonnee()
+    # on crée les items fils ...
+    dico_fils = transforme_liste_dico(self.object.entites_fils)
+    for k in l_cles_fils :
+      typ = TYPE_COMPLET(dico_fils[k])
+      if type(self.objet_cata_ordonne) == types.InstanceType :
+        objet_cata = self.objet_cata_ordonne.dico[k]
+      else :
+        objet_cata = self.objet_cata_ordonne.get(k,None)
+      item = make_objecttreeitem(self.appli,typ + " : ",dico_fils[k],objet_cata_ordonne = objet_cata)
+      sublist.append(item)
+    return sublist
+
+  def GetText(self):
+    #return self.object.nom
+    return self.object.get_valeur_attribut('nom')
+
+  def get_liste_mc_ordonnee(self):
+    return self.objet_cata_ordonne.liste
+
+  def GetIconName(self):
+    if self.object.isvalid():
+      return 'ast-green-square'
+    else:
+      return 'ast-red-square'
+
+  def additem(self,name,pos):
+      if isinstance(name,TreeItem) :
+          cmd=self.object.addentite(name.object,pos)
+      else :
+          cmd = self.object.addentite(name,pos)
+      typ = TYPE_COMPLET(cmd)
+      item = make_objecttreeitem(self.appli,typ + " : ", cmd)
+      return item
+
+  def get_attribut(self,nom):
+    if nom == 'nature': return 'OPERATEUR'
+
+  def get_liste_mc_presents(self):
+    return []
+
+  def verif_condition_regles(self,liste):
+    return []
+  
+class PROCItem(OPERItem):
+  panel = OPERPanel
+  
+class MACROItem(OPERItem):
+  panel = OPERPanel
+    
+class SIMPItem(OPERItem):
+  panel = SIMPPanel
+  
+  def GetIconName(self):
+    if self.object.isvalid():
+      return 'ast-green-ball'
+    else:
+      return 'ast-red-ball'
+
+  def IsExpandable(self):
+    return 0
+
+  def GetSubList(self):
+    return []
+  
+class FACTItem(OPERItem):
+  def GetIconName(self):
+    if self.object.isvalid():
+      return 'ast-green-los'
+    else:
+      return 'ast-red-los'
+
+class BLOCItem(FACTItem): pass
+
+class TYPEItem(SIMPItem):
+  panel = TYPEPanel
+  def get_dico_attributs(self):
+    self.d_attributs = {}
+
+  def GetSubList(self):
+    return []
+
+  def IsExpandable(self):
+    return 0
+
+  def GetText(self):
+    return self.object.nom
+
+class NIVEAUItem(OPERItem):
+  def IsExpandable(self):
+      return 1
+
+  def get_liste_mc_ordonnee(self):
+    l=[]
+    for fils in self.object.entites_fils:
+      l.append(fils.nom)
+    return l
+  
+  def GetSubList(self):
+    sublist=[]
+    # on classe les fils dans l'ordre du catalogue ...
+    l_cles_fils = self.get_liste_mc_ordonnee()
+    # on crꥠles items fils ...
+    dico_fils = transforme_liste_dico(self.object.entites_fils)
+    for k in l_cles_fils :
+      typ = TYPE_COMPLET(dico_fils[k])
+      if type(self.objet_cata_ordonne) == types.InstanceType :
+        objet_cata = self.objet_cata_ordonne.dico[k]
+      else :
+        objet_cata = self.objet_cata_ordonne.get(k,None)
+      item = make_objecttreeitem(self.appli,typ + " : ",dico_fils[k],objet_cata_ordonne = objet_cata)
+      sublist.append(item)
+    return sublist
+  
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+      """
+      return self.labeltext,Fonte_Niveau,'#00008b'
+    
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-text"
+    else:
+      return 'ast-red-text'
+
+  def additem(self,name,pos):
+      if isinstance(name,TreeItem) :
+          cmd=self.object.addentite(name.object,pos)
+      else :
+          cmd = self.object.addentite(name,pos)
+      typ = TYPE_COMPLET(obj)
+      item = make_objecttreeitem(self.appli,typ+ " : ", cmd)
+      return item
+
+  def suppitem(self,item) :
+    # item = item de l'ETAPE à supprimer du JDC
+    # item.object = ETAPE ou _C
+    # self.object = JDC
+    self.object.suppentite(item.object)
+    if isinstance(item.object,_C):
+        message = "Commentaire supprimé"
+        self.appli.affiche_infos(message)
+    else :
+        message = "Commande " + item.object.nom + " supprimée"
+        self.appli.affiche_infos(message)
+    return 1
+
+  def GetText(self):
+      return ''
+    
+class ATTRIBUTItem(SIMPItem):
+  def get_dico_attributs(self):
+    self.d_attributs = {}
+
+  def GetSubList(self):
+    return []
+
+  def IsExpandable(self):
+    return 0
+
+  def GetText(self):
+    return self.object
+
+  def GetIconName(self):
+    return 'aucune' 
+
+class CataEditeur:
+  def __init__(self,parent,appli,cata):
+    self.parent = parent
+    self.cata = definition_cata.CATALOGUE(cata)
+    self.appli = appli
+    self.top = Toplevel()
+    self.top.geometry("800x500")
+    self.top.title("Edition d'un catalogue")
+    self.init()
+
+  def close(self):
+    self.top.destroy()
+
+  def init(self):
+    self.nodes={}
+    self.creerbarremenus()
+    self.pane = Pmw.PanedWidget(self.top,
+                                hull_width = 800,
+                                hull_height = 500,
+                                orient = 'horizontal')
+    self.pane.add('canvas',min = 0.4, max = 0.6, size = 0.5)
+    self.pane.add('panel',min = 0.4, max = 0.6, size = 0.5)
+    self.pane.pack(expand =1, fill = 'both')
+    self.scrolledcanvas = Pmw.ScrolledCanvas(self.pane.pane('canvas'),
+                                             hull_width=1.,
+                                             hull_height=1.,
+                                             borderframe=1)
+    Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95')
+    self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both")
+    self.item = CATAItem(self.appli,"Catalogue",
+                           self.cata,
+                          objet_cata_ordonne = self.appli.readercata.cata_ordonne_dico)
+
+    self.tree = Tree(self.appli,self.item,self.scrolledcanvas,command = self.select_node)
+    self.tree.draw()
+    self.node = self.tree.node_selected
+
+  def creerbarremenus(self) :
+      self.menubar=Menu(self.top)
+      self.filemenu=Menu(self.menubar,tearoff=0)
+      self.filemenu.add_command(label='Quitter',command=self.quit)
+
+      self.editmenu=Menu(self.menubar,tearoff=0)
+      #self.editmenu.add_command(label='Copier',command=self.copy)
+      #self.editmenu.add_command(label='Couper',command=self.cut)
+      #self.editmenu.add_command(label='Coller',command=self.paste)
+
+      self.affichagemenu=Menu(self.menubar,tearoff=0)
+      self.affichagemenu.add_command(label='Rapport de validation',
+                                     command = self.visuCR)
+      self.affichagemenu.add_command(label='shell',command = self.shell)
+      #self.affichagemenu.add_command(label='Fichier ࡰlat',command=self.visu_a_plat)
+      #self.affichagemenu.add_command(label='Fichier .py',command =self.visuJDC_py)
+      #self.affichagemenu.add_command(label='Fichier source',command = self.visu_txt_brut_JDC)
+      #self.affichagemenu.add_command(label='Param鵲es Eficas',command=self.affichage_fichier_ini)
+      
+      #self.optionmenu=Menu(self.menubar,tearoff=0)
+      #self.optionmenu.add_command(label='Catalogue d귥loppeur',command=self.choix_cata_developpeur)
+
+      self.menubar.add_cascade(label='Fichier',menu=self.filemenu)
+      self.menubar.add_cascade(label='Edition',menu=self.editmenu)
+      self.menubar.add_cascade(label='Jeu de commandes',menu=self.affichagemenu)
+      #self.menubar.add_cascade(label='Browsers',menu=self.browsermenu)
+      #self.menubar.add_cascade(label='Catalogue',menu=self.cataloguemenu)
+      #self.menubar.add_cascade(label='Options',menu=self.optionmenu)
+      self.top.configure(menu=self.menubar)
+      self.top.protocol("WM_DELETE_WINDOW",self.quit)
+      self.top.minsize(900,500)
+      self.top.geometry("900x500")
+
+  def shell(self,event=None):
+      import Interp
+      d={'j':self.tree.item.object}
+      Interp.InterpWindow(d,parent=self.parent)
+      
+  def visuCR(self,mode='Cata'):
+    txt = str(self.cata.report())
+    titre="Rapport de validation du catalogue"
+    Fenetre(self.appli,titre=titre,texte=txt)
+  
+  def select_node(self,node):
+    self.nodes[node]=self.create_panel(node)
+
+  def create_panel(self,node):
+    if hasattr(node.item,"panel"):
+      return getattr(node.item,"panel")(self,self.pane.pane('panel'),node)
+      
+  def quit(self) :
+    self.top.destroy()
+    
+  def settitle(self):
+    self.top.wm_title("Browser de catalogue " )
+    self.top.wm_iconname("CataBrowser")
+
+dispatch = {
+    'OPER'   : OPERItem,
+    'PROC'   : PROCItem,
+    'MACRO'  : MACROItem,
+    'SIMP'   : SIMPItem,
+    'FACT'   : FACTItem,
+    'BLOC'   : BLOCItem,
+    'TYPE'   : TYPEItem,
+    'NIVEAU' : NIVEAUItem
+}
+
+def TYPE(o):
+  if isinstance(o,definition_cata.OPER_CATA):return 'OPER'
+  elif isinstance(o,definition_cata.PROC_CATA):return 'PROC'
+  elif isinstance(o,definition_cata.MACRO_CATA):return 'MACRO'
+  elif isinstance(o,definition_cata.SIMP_CATA):return 'SIMP'
+  elif isinstance(o,definition_cata.FACT_CATA):return 'FACT'
+  elif isinstance(o,definition_cata.BLOC_CATA):return 'BLOC'
+  elif isinstance(o,definition_cata.TYPE_CATA):return 'TYPE'
+  elif isinstance(o,definition_cata.NIVEAU_CATA) : return 'NIVEAU'
+  else:return type(o)
+
+def TYPE_COMPLET(o):
+  if isinstance(o,definition_cata.OPER_CATA):return "OPERATEUR"
+  elif isinstance(o,definition_cata.PROC_CATA):return "PROCEDURE"
+  elif isinstance(o,definition_cata.MACRO_CATA):return "MACRO"
+  elif isinstance(o,definition_cata.SIMP_CATA):return "Mot-clé SIMPLE"
+  elif isinstance(o,definition_cata.FACT_CATA):return "Mot-clé FACTEUR"
+  elif isinstance(o,definition_cata.BLOC_CATA):return "BLOC"
+  elif isinstance(o,definition_cata.TYPE_CATA):return "Type"
+  elif isinstance(o,definition_cata.NIVEAU_CATA):return "Niveau"
+  else: return "Inconnu ("+`type(o)`+")"
+  
+def make_objecttreeitem(appli,labeltext, object, setfunction=None,objet_cata_ordonne=None):
+    t = TYPE(object)
+    if dispatch.has_key(t):
+      c = dispatch[t]
+    else:
+      print 'on a un objet de type :',type(object),'  ',object
+      c = ATTRIBUTItem
+    return c(appli,labeltext, object, setfunction = setfunction,objet_cata_ordonne=objet_cata_ordonne)
+
+
+
diff --git a/Editeur/centerwindow.py b/Editeur/centerwindow.py
new file mode 100644 (file)
index 0000000..95d9d33
--- /dev/null
@@ -0,0 +1,33 @@
+"""
+   Ce module contient la fonction utilitaire centerwindow
+   qui sert à centrer une fenetre
+"""
+import types
+
+def centerwindow(window,parent = 'avec'):
+    if parent =='avec':
+        parent = window.winfo_parent()
+        if type(parent) == types.StringType:
+            parent = window._nametowidget(parent)
+    # Find size of window.
+    window.update_idletasks()
+    width = window.winfo_width()
+    height = window.winfo_height()
+    if width == 1 and height == 1:
+        # If the window has not yet been displayed, its size is
+        # reported as 1x1, so use requested size.
+        width = window.winfo_reqwidth()
+        height = window.winfo_reqheight()
+    # Place in centre of screen:
+    if parent =='avec' :
+        x = (window.winfo_screenwidth() - width) / 2 - parent.winfo_vrootx()
+        y = (window.winfo_screenheight() - height) / 3 - parent.winfo_vrooty()
+    else:
+        x = (window.winfo_screenwidth() - width) / 2 
+        y = (window.winfo_screenheight() - height) / 3
+    if x < 0:
+        x = 0
+    if y < 0:
+        y = 0
+    window.geometry('+%d+%d' % (x, y))
+    
diff --git a/Editeur/compobloc.py b/Editeur/compobloc.py
new file mode 100644 (file)
index 0000000..085c7d9
--- /dev/null
@@ -0,0 +1,42 @@
+#@ MODIF compobloc Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+from Tkinter import *
+import Pmw
+
+import Objecttreeitem
+import compofact
+
+
+class BLOCTreeItem(compofact.FACTTreeItem):
+  panel = compofact.FACTPanel
+
+  def get_objet(self,name) :
+      for v in self.object.mc_liste:
+          if v.nom == name : return v
+      return None
+    
+  def additem(self,name,pos):
+      if isinstance(name,Objecttreeitem.ObjectTreeItem) :
+          mcent=self.object.addentite(name.object,pos=pos)
+      else :
+          mcent = self.object.addentite(name,pos=pos)
+      if mcent == 0 :
+        # on ne peut ajouter l'élément de nom name
+        return 0
+      self.expandable=1
+      def setfunction(value, object=mcent):
+          object.setval(value)
+      item = self.make_objecttreeitem(self.appli,mcent.nom + " : ", mcent, setfunction)
+      return item
+
+  def iscopiable(self):
+    return 0
+  
+import Accas
+treeitem = BLOCTreeItem
+objet = Accas.MCBLOC   
diff --git a/Editeur/compocomm.py b/Editeur/compocomm.py
new file mode 100644 (file)
index 0000000..194730e
--- /dev/null
@@ -0,0 +1,132 @@
+#@ MODIF compocomm Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+from Tkinter import *
+import Pmw
+import string
+
+import Objecttreeitem
+import panels
+import fontes
+
+Fonte_Commentaire = fontes.standard_italique
+
+class COMMPanel(panels.OngletPanel):
+  
+  def init(self):
+    """
+    Initialise les frame des panneaux contextuels relatifs à un COMMENTAIRE
+    """
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('TexteComm', tab_text='Texte Commentaire')
+    nb.add('Commande', tab_text='Nouvelle Commande')
+    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
+    self.makeCOMMPage(nb.page("TexteComm"))
+    self.makeCommandePage(nb.page("Commande"))
+    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
+    nb.tab('TexteComm').focus_set()
+    nb.setnaturalsize()
+    
+  def makeCOMMPage(self,page):
+    """
+    Crée la page qui permet d'afficher et d'éditer le texte du commentaire
+    """
+    self.frame_valeur = Frame(page)
+    self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
+    self.widget_text = Pmw.ScrolledText(self.frame_valeur,
+                                        borderframe=1,
+                                        labelpos='n',
+                                        label_text = 'Texte du commentaire\n ')
+    self.widget_text.pack(side='top',expand=1,fill='both')
+    self.widget_text.configure(hscrollmode='dynamic',
+                               vscrollmode='dynamic')\r
+    self.make_buttons()
+    self.display_valeur()
+
+  def make_buttons(self):
+    """
+    Crée les boutons du panneau
+    """
+    self.bouton_sup.place_forget()
+    self.bouton_doc.place_forget()
+    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
+    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
+
+    self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
+
+
+  def change_valeur(self):
+    """
+    Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du commentaire
+    """
+    if self.parent.modified == 'n' : self.parent.init_modif()
+    new_valeur = self.widget_text.get()
+    self.node.item.set_valeur(new_valeur)
+    self.node.update()
+
+  def display_valeur(self):
+    """
+    Affiche dans self.widget_text la valeur de l'objet commentaire
+    (annule d'éventuelles modifications faite par l'utilisateur)
+    """
+    self.widget_text.settext(self.node.item.get_valeur())
+    
+class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
+    panel = COMMPanel
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icône associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : un commentaire est toujours valide ...
+      """
+      return "ast-white-percent"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'commentaire',Fonte_Commentaire,None
+
+    def get_valeur(self):
+      """
+      Retourne la valeur de l'objet Commentaire cad son texte
+      """
+      return self.object.get_valeur() or ''
+    
+    def GetText(self):
+        texte = self.object.valeur
+        texte = string.split(texte,'\n')[0]
+        if len(texte) < 25 :
+            return texte
+        else :
+            return texte[0:24]
+
+    def set_valeur(self,valeur):
+      """
+      Afefcte valeur à l'objet COMMENTAIRE
+      """
+      self.object.set_valeur(valeur)
+      
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+  
+import Extensions
+treeitem =COMMTreeItem
+objet = Extensions.commentaire.COMMENTAIRE    
diff --git a/Editeur/compocommandecomm.py b/Editeur/compocommandecomm.py
new file mode 100644 (file)
index 0000000..8b8c923
--- /dev/null
@@ -0,0 +1,154 @@
+#@ MODIF compocommandecomm Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+from Tkinter import *
+import Pmw
+import string
+from tkMessageBox import showerror
+
+import Objecttreeitem
+import panels
+import fontes
+
+Fonte_Commentaire = fontes.standard_italique
+
+class COMMANDE_COMMPanel(panels.OngletPanel):
+  """
+  Classe servant à définir le panel associé à une commande commentarisée
+  """
+  def init(self):
+    """
+    Initialise les frame des panneaux contextuels relatifs à une commande commentarisée
+    """
+    panneau=Frame(self)
+    panneau.pack(expand=1,fill='both')
+    self.make_buttons()
+    self.makeCOMMPage(panneau)
+
+  def makeCOMMPage(self,page):
+    """
+    Crée la page qui permet d'afficher et d'éditer le texte de la commande commentarisée
+    """
+    self.frame_valeur = Frame(page)
+    self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
+    self.widget_text = Pmw.ScrolledText(self.frame_valeur,
+                                        borderframe=1,
+                                        labelpos='n',
+                                        label_text = 'Texte de la commande\n ')
+    self.widget_text.pack(side='top',expand=1,fill='both')
+    self.widget_text.configure(hscrollmode='dynamic',
+                               vscrollmode='dynamic')
+    self.display_valeur()
+
+  def make_buttons(self):
+    """
+    Crée les boutons du panneau
+    """
+    self.bouton_sup.place_forget()
+    self.bouton_doc.place_forget()
+    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
+    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
+    self.bouton_unc = Button(self.fr_but,text='Décommentariser',command=self.uncomment,width=14)
+
+    self.bouton_val.place(relx=0.20,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_ann.place(relx=0.40,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_sup.place(relx=0.60,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_unc.place(relx=0.80,rely=0.5,relheight=0.8,anchor='center')
+
+  def change_valeur(self):
+    """
+    Stocke la nouvelle valeur donnée par l'utilisateur comme valeur de la commande commentarisée
+    """
+    if self.parent.modified == 'n' : self.parent.init_modif()
+    new_valeur = self.widget_text.get()
+    self.node.item.set_valeur(new_valeur)
+    self.node.update()
+
+  def display_valeur(self):
+    """
+    Affiche dans self.widget_text la valeur de la commande commentarisée
+    (annule d'éventuelles modifications faite par l'utilisateur)
+    """
+    self.widget_text.settext(self.node.item.get_valeur())
+
+  def uncomment(self):
+      """
+      Réalise la décommentarisation de self
+      """
+      try:
+          commande,nom = self.node.item.uncomment()
+      except Exception,e:
+          showerror("Erreur !",str(e))
+          return
+      self.parent.appli.bureau.JDCDisplay_courant.ReplaceObjectNode(self.node,commande,nom)
+    
+class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem):
+    panel = COMMANDE_COMMPanel
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icône associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : une commande commentarisée est toujours valide ...
+      """
+      if self.isvalid():
+          return "ast-green-percent"
+      else:
+          return "ast-red-percent"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'commande commentarisée',Fonte_Commentaire,None
+
+    def get_valeur(self):
+      """
+      Retourne la valeur de la commande commentarisée cad son texte
+      """
+      return self.object.get_valeur() or ''
+    
+    def GetText(self):
+        texte = self.object.valeur
+        texte = string.split(texte,'\n')[0]
+        if len(texte) < 25 :
+            return texte
+        else :
+            return texte[0:24]
+
+    def set_valeur(self,valeur):
+      """
+      Afefcte valeur à l'objet commande commentarisée
+      """
+      self.object.set_valeur(valeur)
+      
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+
+    def uncomment(self):
+      """
+      Demande à l'objet commande commentarisée de se décommentariser.
+      Si l'opération s'effectue correctement, retourne l'objet commande
+      et éventuellement le nom de la sd produite, sinon lève une exception
+      """
+      try:
+        commande,nom = self.object.uncomment()
+      except Exception,e:
+        raise e
+      return commande,nom
+  
+import Accas
+treeitem =COMMANDE_COMMTreeItem
+objet = Accas.COMMANDE_COMM    
diff --git a/Editeur/compofact.py b/Editeur/compofact.py
new file mode 100644 (file)
index 0000000..0b52bbb
--- /dev/null
@@ -0,0 +1,118 @@
+#@ MODIF compofact Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+import Pmw
+import Objecttreeitem
+import panels
+
+class FACTPanel(panels.OngletPanel) :
+  def init(self) :
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1) 
+    self.nb=nb
+    nb.add('Mocles', tab_text='Ajouter mots-clés')
+    #nb.add('Commentaire',tab_text='Insérer commentaire')
+    panneau=Pmw.PanedWidget(nb.page("Mocles"),
+                            orient='horizontal')
+    panneau.add('left',min=0.4,max=0.6,size=0.5)
+    panneau.add('right',min=0.4,max=0.6,size=0.5)
+    panneau.pack(expand=1,fill='both')
+    self.makeMoclesPage(panneau.pane('left'))
+    self.makeReglesPage(panneau.pane('right'))
+    #self.makeCommentairePage(nb.page("Commentaire"))
+    nb.tab('Mocles').focus_set()
+    nb.setnaturalsize()
+    self.affiche()
+
+
+class FACTTreeItem(Objecttreeitem.ObjectTreeItem):
+  panel = FACTPanel
+  
+  def IsExpandable(self):
+    return 1
+
+  def GetText(self):
+      return  ''
+
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+      """
+      # None --> fonte et couleur par défaut
+      return self.object.getlabeltext(),None,None
+
+  def isvalid(self):
+    return self.object.isvalid()
+
+  def iscopiable(self):
+    return 1
+
+  def isMCFact(self):
+      """
+      Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
+      """
+      return 1
+    
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-los"
+    elif self.object.isoblig():
+      return "ast-red-los"
+    else:
+      return "ast-yel-los"
+
+  def keys(self):
+    keys=self.object.mc_dict.keys()
+    return keys
+
+  def GetSubList(self):
+    sublist=[]
+    for obj in self.object.mc_liste:
+      def setfunction(value, object=obj):
+        object.setval(value)
+      item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+      sublist.append(item)
+    return sublist
+
+  def additem(self,name,pos):
+    if isinstance(name,Objecttreeitem.ObjectTreeItem) :
+        objet = self.object.addentite(name.object,pos)
+    else :
+        objet = self.object.addentite(name,pos)
+    self.expandable = 1
+    if objet == 0 :
+        # on ne peut ajouter l'élément de nom name
+        return 0
+    def setfunction(value, object=objet):
+      object.setval(value)
+    item = self.make_objecttreeitem(self.appli,objet.nom + " : ", objet, setfunction)
+    return item
+
+  def suppitem(self,item) :
+      """ 
+         Cette methode a pour fonction de supprimer l'item passé en argument
+         des fils de l'item FACT qui est son pere
+          item = item du MOCLE à supprimer du MOCLE père
+          item.object = MCSIMP ou MCBLOC 
+      """
+      if item.object.isoblig() :
+          self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+          return 0
+      else :
+          self.object.suppentite(item.object)
+          message = "Mot-clé " + item.object.nom + " supprimé"
+          self.appli.affiche_infos(message)
+          return 1
+
+  def verif_condition_bloc(self):
+      return self.object.verif_condition_bloc()
+
+import Accas
+objet = Accas.MCFACT
+treeitem = FACTTreeItem
diff --git a/Editeur/compoformule.py b/Editeur/compoformule.py
new file mode 100644 (file)
index 0000000..b2d640f
--- /dev/null
@@ -0,0 +1,339 @@
+#@ MODIF compoformule Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+"""
+Ce module contient les classes permettant de définir les objets graphiques
+représentant un objet de type FORMULE, cad le panneau et l'item de l'arbre
+d'EFICAS
+"""
+
+# import modules Python
+from Tkinter import *
+import Pmw
+import string
+import tkMessageBox
+
+# import modules EFICAS
+import panels
+import fontes
+import compooper
+
+Fonte_TITRE = fontes.standard_gras_souligne
+
+
+class FORMULEPanel(panels.OngletPanel):
+  """
+  Classe servant à construire le panneau associé à un paramètre.
+  C'est au moyen de ce panneau que l'utilisateur peut accéder
+  aux nom et valeur du paramètre en vue éventuellement de les
+  modifier.
+  """
+
+  def init(self):
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('Formule', tab_text='Définition Formule')
+    nb.add('Commande', tab_text='Nouvelle Commande')
+    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
+    self.makeFormulePage(nb.page("Formule"))
+    self.makeCommandePage(nb.page("Commande"))
+    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
+    nb.tab('Formule').focus_set()
+    nb.setnaturalsize()
+    
+  def makeFormulePage(self,page):
+    """
+    Crée la page qui permet d'afficher et d'éditer le texte de la FORMULE
+    """
+    self.frame_valeur = Frame(page)
+    self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
+    # affichage du titre du panneau
+    self.titre = StringVar()
+    self.titre.set("FORMULE "+self.node.item.get_nom())
+    Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.,anchor='n')
+    # création des labels et entries associés aux nom, type retourné, arguments et corps de la FORMULE
+    Label(self.frame_valeur,text= 'Nom de la formule : ').place(relx=0.,rely=0.1)
+    self.entry_nom = Entry(self.frame_valeur)
+    Label(self.frame_valeur,text= 'Type retourné : ').place(relx=0.,rely=0.25)
+    self.option_menu_typ = Pmw.OptionMenu(self.frame_valeur,labelpos='w',
+                                          label_text='',
+                                          items = self.node.item.get_liste_types_autorises())
+    self.option_menu_typ.place(relx=0.33,rely=0.23)
+    Label(self.frame_valeur,text= 'Arguments : ').place(relx=0.,rely=0.40)
+    self.entry_arg = Entry(self.frame_valeur)
+    Label(self.frame_valeur,text= 'Expression : ').place(relx=0.,rely=0.55)
+    self.entry_exp = Entry(self.frame_valeur)
+    # binding sur les entries
+    self.entry_nom.bind("<Return>",self.verif_nom)
+    self.entry_arg.bind("<Return>",self.verif_arguments)
+    self.entry_exp.bind("<Return>",self.verif_corps)
+    # affichage des entries
+    self.entry_nom.place(relx=0.35,rely=0.10,relwidth=0.2)
+    self.entry_arg.place(relx=0.35,rely=0.40,relwidth=0.4)
+    self.entry_exp.place(relx=0.35,rely=0.55,relwidth=0.55)
+    # affichage d'une phrase d'aide
+    aide = """
+    Un retour de chariot dans une zone de saisie vous permet de vérifier si
+    la valeur que vous avez entrée est valide.
+    Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
+    valeurs seront effectivement prises en compte
+    """
+    Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.7,anchor='n')
+    # affichage des nom, type retourné, arguments et corps de la FORMULE
+    self.display_valeur()
+    # affichage des boutons
+    self.make_buttons()
+    # entry_nom prend le focus
+    self.entry_nom.focus()
+
+  def make_buttons(self):
+    """
+    Crée les boutons du panneau
+    """
+    self.bouton_sup.place_forget()
+    self.bouton_doc.place_forget()
+    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
+    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
+
+    self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
+
+  def change_valeur(self):
+    """
+    Stocke la nouvelle FORMULE décrite par l'utilisateur
+    """
+    if self.parent.modified == 'n' : self.parent.init_modif()
+    # on récupère les nouveaux nom, type retourné, arguments et corps de la FORMULE
+    new_nom = self.entry_nom.get()
+    new_typ = self.option_menu_typ.getcurselection()
+    new_arg = self.entry_arg.get()
+    new_exp = self.entry_exp.get()
+    # on essaie de les stocker
+    test,erreur = self.node.item.save_formule(new_nom,new_typ,new_arg,new_exp)
+    if test :
+        # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
+        self.node.update()
+        self.display_valeur()
+        self.parent.appli.affiche_infos("FORMULE %s modifiée" %self.node.item.get_nom())
+    else:
+        # la formule est incorrecte : on affiche les erreurs
+        tkMessageBox.showerror("Formule incorrecte",erreur)
+        self.parent.appli.affiche_infos("FORMULE %s non modifiée" %self.node.item.get_nom())
+    
+  def display_valeur(self):
+    """
+    Affiche dans self.widget_text de la valeur de l'objet FORMULE
+    (annule d'éventuelles modifications faite par l'utilisateur)
+    """
+    # on efface tout texte affiché dans les entries
+    self.entry_nom.delete(0,END)
+    self.entry_arg.delete(0,END)
+    self.entry_exp.delete(0,END)
+    # on rafraîchit le titre du panneau
+    self.titre.set('FORMULE '+self.node.item.get_nom())
+    # on insére les nouveaux nom, type retourné, arguments et corps de la FORMULE
+    nom = self.node.item.get_nom()
+    if nom != '':
+        self.entry_nom.insert(END,nom)
+    type = self.node.item.get_type()
+    if type :
+        self.option_menu_typ.invoke(type)
+    args = self.node.item.get_args()
+    if args:
+        self.entry_arg.insert(END,args)
+    corps = self.node.item.get_corps()
+    if corps :
+        self.entry_exp.insert(END,self.node.item.get_corps())
+
+  def verif_nom(self,event=None):
+        """
+        Lance la vérification du nom présent dans entry_nom
+        """
+        nom = self.entry_nom.get()\r
+        if nom == '':\r
+            test,erreur = 0,"Aucun nom fourni !"\r
+        else:
+            test,erreur = self.node.item.verif_nom(nom)
+        if not test:
+            tkMessageBox.showerror("Nom invalide",erreur)
+            self.entry_nom.focus()
+            self.entry_nom.selection_range(0,END)
+            self.parent.appli.affiche_infos("%s n'est pas un nom valide pour une FORMULE" %nom)
+        else:
+            self.parent.appli.affiche_infos("%s est un nom valide pour une FORMULE" %nom)
+            self.entry_arg.focus()
+
+  def verif_arguments(self,event=None):
+        """
+        Lance la vérification des arguments présents dans entry_arg
+        """
+        arguments = self.entry_arg.get()\r
+        if arguments == '' :\r
+            test,erreur = 0,"Aucun argument fourni"\r
+        else:
+            test,erreur = self.node.item.verif_arguments(arguments)
+        if not test:
+            tkMessageBox.showerror("Argument(s) invalide(s)",erreur)
+            self.entry_arg.focus()
+            self.entry_arg.selection_range(0,END)
+            self.parent.appli.affiche_infos("Argument(s) invalide(s) pour une FORMULE")
+        else:
+            self.parent.appli.affiche_infos("Argument(s) valide(s) pour une FORMULE")
+            self.entry_exp.focus()
+
+  def verif_corps(self,event=None):
+        """
+        Lance la vérification du corps de formule présent dans entry_exp
+        """
+       new_nom = self.entry_nom.get()
+        new_typ = self.option_menu_typ.getcurselection()
+        new_arg = self.entry_arg.get()
+        new_exp = self.entry_exp.get()
+        if new_exp == '':
+            test,erreur = 0,"Aucune expression fournie !"
+        else:
+            test,erreur = self.node.item.verif_formule((new_nom,new_typ,new_arg,new_exp))
+        if not test:
+            tkMessageBox.showerror("Corps de FORMULE invalide",erreur)
+            self.entry_exp.focus()
+            self.entry_exp.selection_range(0,END)
+            self.parent.appli.affiche_infos("Corps de FORMULE invalide")
+        else:
+            self.parent.appli.affiche_infos("Corps de FORMULE valide")
+            
+class FORMULETreeItem(compooper.EtapeTreeItem):
+    """
+    Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
+    qui représente la FORMULE
+    """
+    panel = FORMULEPanel
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+# ---------------------------------------------------------------------------
+#                   API de FORMULE pour l'arbre 
+# ---------------------------------------------------------------------------
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      On considère que FORMULE n'a pas de fils
+      --> modification par rapport à MACRO classique
+      """
+      # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE
+      # de façon traditionnelle
+      return []
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icône à afficher dans l'arbre
+      Ce nom dépend de la validité de l'objet
+      """
+      if self.object.isactif():
+        if self.object.isvalid():
+          return "ast-green-square"
+        else:
+          return "ast-red-square"
+      else:
+        return "ast-white-text"
+
+    def GetLabelText(self):
+      """ Retourne 3 valeurs :
+      - le texte à afficher dans le noeud représentant l'item
+      - la fonte dans laquelle afficher ce texte
+      - la couleur du texte
+      """
+      if self.object.isactif():
+        # None --> fonte et couleur par défaut
+        return self.labeltext,None,None
+      else:
+        return self.labeltext,fontes.standard_italique,None
+    
+# ---------------------------------------------------------------------------
+#       Méthodes permettant la modification et la lecture des attributs
+#       du paramètre = API graphique de la FORMULE pour Panel et EFICAS
+# ---------------------------------------------------------------------------
+
+    def get_nom(self):
+      """
+      Retourne le nom de la FORMULE
+      """
+      return self.object.get_nom()
+
+    def get_type(self):
+      """
+      Retourne le type de la valeur retournée par la FORMULE
+      """
+      return self.object.type_retourne
+
+    def get_args(self):
+      """
+      Retourne les arguments de la FORMULE
+      """
+      args = self.object.arguments
+      if args :
+          return self.object.arguments[1:-1] #on enlève les parenthèses ouvrante et fermante
+      else:
+          return None
+
+    def get_corps(self):
+      """
+      Retourne le corps de la FORMULE
+      """
+      return self.object.corps
+
+    def get_liste_types_autorises(self):
+      """
+         Retourne la liste des types autorises pour les valeurs de sortie 
+         d'une FORMULE
+      """
+      return self.object.l_types_autorises
+
+    def save_formule(self,new_nom,new_typ,new_arg,new_exp):
+      """
+      Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE 
+      licite :
+          - si oui, stocke ces paramètres comme nouveaux paramètres de la 
+            FORMULE courante et retourne 1
+          - si non, laisse les paramètres anciens de la FORMULE inchangés et 
+            retourne 0
+      """
+      test,erreur = self.object.verif_formule(formule=(new_nom,new_typ,new_arg,
+                                                       new_exp))
+      if test :
+          # la formule est bien correcte : on sauve les nouveaux paramètres
+          self.object.update(formule=(new_nom,new_typ,new_arg,new_exp))
+      return test,erreur
+
+# ---------------------------------------------------------------------------
+#          Accès aux méthodes de vérification de l'objet FORM_ETAPE
+# ---------------------------------------------------------------------------
+
+    def verif_nom(self,nom):
+        """
+        Lance la vérification du nom passé en argument
+        """
+        return self.object.verif_nom(nom)
+
+    def verif_arguments(self,arguments):
+        """
+        Lance la vérification des arguments passés en argument
+        """
+        return self.object.verif_arguments('('+arguments+')')
+
+    def verif_formule(self,formule):
+        """
+        Lance la vérification de FORMULE passée en argument
+        """
+       return self.object.verif_formule(formule=formule)
+
+import Accas
+treeitem =FORMULETreeItem
+objet = Accas.FORM_ETAPE
diff --git a/Editeur/compojdc.py b/Editeur/compojdc.py
new file mode 100644 (file)
index 0000000..6446174
--- /dev/null
@@ -0,0 +1,132 @@
+#@ MODIF compojdc Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+#XXX est ce utile ?from Tkinter import *
+import Pmw
+import Objecttreeitem
+import panels
+
+from widgets import ListeChoix
+# XXX temporairement supprimé :from Accas import commentaire 
+
+class JDCPanel(panels.OngletPanel):
+  def init(self):
+      """ Initialise les frame des panneaux contextuels relatifs à un JDC """
+      panneau=Pmw.PanedWidget(self,orient='horizontal')
+      panneau.add('left',min=0.4,max=0.6,size=0.5)
+      panneau.add('right',min=0.4,max=0.6,size=0.5)
+      panneau.pack(expand=1,fill='both')
+      self.bouton_com.pack_forget()
+      self.makeJDCPage(panneau.pane('left'))
+      self.makeReglesPage(panneau.pane('right'))
+    
+  def makeReglesPage(self,page) :
+    regles = []
+    regles = self.node.item.get_regles()
+    texte_regles = []
+    l_regles_en_defaut=[]
+    if len(regles) > 0:
+      l_noms_etapes = self.node.item.get_l_noms_etapes()
+      i = 0
+      for regle in regles :
+        texte_regles.append(regle.gettext())
+        texte,test = regle.verif(l_noms_etapes)
+        if test == 0 : l_regles_en_defaut.append(i)
+        i = i+1
+    Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles")
+    Liste.affiche_liste()
+    # aide associée au panneau
+    bulle_aide="""Ce panneau contient la liste des règles qui s'appliquent à l'objet
+    en cours d'édition.
+    - en noir : règles valides
+    - en rouge : règles violées"""
+    Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+    Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+class JDCTreeItem(Objecttreeitem.ObjectTreeItem):
+  panel = JDCPanel
+  
+  def IsExpandable(self):
+#    return len(self.object.etapes) > 0
+    return 1
+
+  def isJdc(self):
+      """
+      Retourne 1 si l'objet pointé par self est un JDC, 0 sinon
+      """
+      return 1
+    
+  def GetText(self):
+      return  "    "
+
+  def get_jdc(self):
+    """
+    Retourne l'objet pointé par self
+    """
+    return self.object
+  
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-square"
+    else:
+      return "ast-red-square"
+
+  def keys(self):
+      if self.object.etapes_niveaux != []:
+          return range(len(self.object.etapes_niveaux))
+      else:
+          return range(len(self.object.etapes))
+
+  def additem(self,name,pos):
+      if isinstance(name,Objecttreeitem.ObjectTreeItem) :
+          cmd=self.object.addentite(name.object,pos)
+      else :
+          cmd = self.object.addentite(name,pos)
+      item = self.make_objecttreeitem(self.appli,cmd.nom + " : ", cmd)
+      return item
+
+  def suppitem(self,item) :
+    # item = item de l'ETAPE à supprimer du JDC
+    # item.object = ETAPE ou COMMENTAIRE
+    # self.object = JDC
+    self.object.suppentite(item.object)
+    if item.object.nature == "COMMENTAIRE" :
+        message = "Commentaire supprimé"
+        self.appli.affiche_infos(message)
+    else :
+        message = "Commande " + item.object.nom + " supprimée"
+        self.appli.affiche_infos(message)
+    return 1
+
+  def GetSubList(self):
+    sublist=[]
+    if self.object.etapes_niveaux != []:
+        liste = self.object.etapes_niveaux
+    else:
+        liste = self.object.etapes
+    key=0
+    for value in liste:
+      def setfunction(value, key=key, object=liste):
+        object[key] = value
+      item = self.make_objecttreeitem(self.appli,value.ident() + " : ", value, setfunction)
+      sublist.append(item)
+      key=key+1
+    return sublist
+
+  def verif_condition_bloc(self):
+      # retourne la liste des sous-items dont la condition est valide
+      # sans objet pour le JDC
+      return [],[]
+
+  def get_l_noms_etapes(self):
+      """ Retourne la liste des noms des étapes de self.object"""
+      return self.object.get_l_noms_etapes()
+
+    
+import Accas
+treeitem =JDCTreeItem
+objet = Accas.JDC    
diff --git a/Editeur/compomacro.py b/Editeur/compomacro.py
new file mode 100644 (file)
index 0000000..ce439f5
--- /dev/null
@@ -0,0 +1,311 @@
+#@ MODIF compomacro Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# Modules Python
+import os,sys,string
+import types
+import Tkinter
+import Pmw
+from tkFileDialog import *
+from tkMessageBox import showinfo,showerror
+import traceback
+
+# Modules Eficas
+import Objecttreeitem
+import panels
+import fontes
+import compooper
+import convert
+from widgets import Fenetre
+
+#
+__version__="$Name: V1_1p1 $"
+__Id__="$Id: compomacro.py,v 1.1.1.1 2001/12/04 15:38:22 eficas Exp $"
+#
+
+class MACROPanel(panels.OngletPanel):
+  def init(self):
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('Mocles', tab_text='Ajouter mots-clés')
+    typsd=self.node.item.object.get_type_produit()
+    ficini = self.node.item.wait_fichier_init()
+    if typsd != None:
+      nb.add('Concept', tab_text='Nommer concept')
+    if ficini == 1:
+      nb.add('Fichierinit',tab_text = 'Fichier %s' %self.node.item.get_nom())
+    nb.add('Commande', tab_text='Insérer Commande')
+    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
+    panneau=Pmw.PanedWidget(nb.page("Mocles"),
+                            orient='horizontal')
+    panneau.add('left',min=0.4,max=0.6,size=0.5)
+    panneau.add('right',min=0.4,max=0.6,size=0.5)
+    panneau.pack(expand=1,fill='both')
+    self.makeCommandePage(nb.page("Commande"))
+    if typsd != None:
+      self.makeConceptPage(nb.page("Concept"))
+    if ficini == 1 :
+      self.makeFichierPage(nb.page('Fichierinit'))
+    self.makeMoclesPage(panneau.pane('left'))
+    self.makeReglesPage(panneau.pane('right'))
+    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
+    nb.tab('Mocles').focus_set()
+    nb.setnaturalsize()
+    #self.monmenu=Tkinter.Menu(self.parent.appli.menubar,tearoff=0)
+    #self.monmenu.add_command(label='Build',command=self.Build)
+    #self.monmenu.add_command(label='View',command=self.View)
+    #self.parent.appli.add_menu(label="Macro",menu=self.monmenu)    
+    self.affiche()
+
+  def Build(self):
+    print "Build"
+    self.node.item.object.Build()
+
+  def View(self):
+    print "View"
+    MacroDisplay(self.parent.appli,self.node.item.object,self.node.item.object.nom)
+
+  def makeFichierPage(self,page):
+    """\r
+    Affiche la page d'onglet correspondant au changement du fichier
+    dont a besoin la macro\r
+    """
+    titre = Tkinter.Label(page,text="La commande %s requiert un fichier " %self.node.item.get_nom())
+    titre.place(relx=0.5,rely=0.3,anchor='center')
+    Tkinter.Label(page,text="Fichier :").place(relx=0.1,rely=0.5,relwidth=0.2)
+    self.entry = Tkinter.Entry(page,relief='sunken',bg='white')
+    self.entry.place(relx=0.35,rely=0.5,relwidth=0.55)
+    Tkinter.Button(page,text='Valider',command = self.change_fichier_init).place(relx=0.3,rely=0.8)
+    Tkinter.Button(page,text='Browse',command = self.browse_fichier_init).place(relx=0.5,rely=0.8)
+    Tkinter.Button(page,text='Annuler',command = self.annule_fichier_init).place(relx=0.7,rely=0.8)
+    if hasattr(self.node.item.object,'fichier_init'):\r
+      if self.node.item.object.fichier_init :\r
+        self.entry.insert(0,self.node.item.object.fichier_init)
+    self.entry.focus()
+
+  def convert_file(self,file):
+     """
+         Methode pour convertir le fichier file dans le format courant
+     """
+     format=self.parent.appli.format_fichier.get()
+     if convert.plugins.has_key(format):
+         # Le convertisseur existe on l'utilise
+         p=convert.plugins[format]()
+         p.readfile(file)
+         text=p.convert('execnoparseur')
+         if not p.cr.estvide():
+            self.parent.appli.affiche_infos("Erreur à la conversion")
+            Fenetre(self,
+                    titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier",
+                    texte = str(p.cr))
+            return None
+         return text
+     else:
+         # Il n'existe pas c'est une erreur
+         self.parent.appli.affiche_infos("Type de fichier non reconnu")
+         showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
+         return None
+
+  def change_fichier_init(self,event=None):
+    """ 
+        Effectue le changement de fichier d'initialisation s'il est valide 
+    """
+    if not hasattr(self.node.item.object,'fichier_init'):
+       self.node.item.object.fichier_init=None
+    old_fic = self.node.item.object.fichier_init
+    new_fic = self.entry.get()
+    if not os.path.isfile(new_fic) :
+      showinfo("Fichier introuvable","Le fichier que vous avez saisi\n"+
+               "n'est pas un nom de fichier valide !")
+      self.parent.appli.affiche_infos("Fichier introuvable")
+      return
+    # On convertit le fichier
+    text=self.convert_file(new_fic)
+    if not text:return
+    try:
+      self.node.item.object.make_contexte(new_fic,text)
+      self.parent.appli.affiche_infos("Fichier %s modifié" %self.node.item.get_nom())
+    except:
+      #traceback.print_exc()
+      l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
+      showinfo("Fichier invalide",
+               "Erreur dans l'interprétation du nouveau fichier ...\n"+
+               "L'ancien va être restauré\n"+string.join(l))
+
+      self.entry.delete(0,Tkinter.END)
+      self.parent.appli.affiche_infos("Fichier invalide")
+
+      if old_fic:
+         # On convertit le fichier
+         #text=self.convert_file(old_fic)
+         #if not text:return
+         #self.node.item.object.make_contexte(old_fic,text)
+         self.node.item.object.fichier_init=old_fic
+         self.entry.insert(0,self.node.item.object.fichier_init)
+         self.parent.appli.affiche_infos("Fichier invalide ... Ancien fichier restauré")
+      return
+    # si on passe ici, c'est que le new_fic a bien été correctement 
+    #  interprété ...
+    self.node.item.object.fichier_init = new_fic
+    # il faut lancer la réévaluation de tout le jdc ... 
+    self.node.item.object.reevalue_sd_jdc()
+    self.node.racine.update()
+
+  def annule_fichier_init(self,event=None):
+    """ retaure dans self.entry le nom de fichier_init"""
+    self.entry.delete(0,Tkinter.END)
+    self.entry.insert(0,self.node.item.object.fichier_init)
+
+  def browse_fichier_init(self,event=None):
+    """ 
+         Propose à l'utilisateur une Bsf et retourne le fichier 
+         sélectionné dans self.entry 
+    """
+    file = askopenfilename(title="Choix du fichier %s" %self.node.item.get_nom(),
+                         #  filetypes = ( ("Aster", ".comm"),("Python", ".py")),
+                         #  defaultextension=".comm"
+                          )
+    if file != '' :
+      self.entry.delete(0,Tkinter.END)
+      self.entry.insert(0,file)
+    
+    
+class MACROTreeItem(compooper.EtapeTreeItem):
+  panel=MACROPanel
+
+  def IsExpandable(self):
+      return 1
+
+  def GetIconName(self):
+      """
+      Retourne le nom de l'icône à afficher dans l'arbre
+      Ce nom dépend de la validité de l'objet
+      """
+      if self.object.isactif():
+        if self.object.isvalid():
+          return "ast-green-square"
+        else:
+          return "ast-red-square"
+      else:
+        return "ast-white-square"
+
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+      - le texte à afficher dans le noeud représentant l'item
+      - la fonte dans laquelle afficher ce texte
+      - la couleur du texte
+      """
+      if self.object.isactif():
+        # None --> fonte et couleur par défaut
+        return self.labeltext,None,None
+      else:
+        return self.labeltext,fontes.standard_italique,None
+      
+  def get_objet(self,name) :
+      for v in self.object.mc_liste:
+          if v.nom == name : return v
+      return None
+      
+  def additem(self,name,pos):
+      if isinstance(name,Objecttreeitem.ObjectTreeItem) :
+          mcent = self.object.addentite(name.object,pos)
+      else :
+          mcent = self.object.addentite(name,pos)
+      self.expandable=1
+      if mcent == 0 :
+          # on ne peut ajouter l'élément de nom name
+          return 0
+      def setfunction(value, object=mcent):
+          object.setval(value)
+      item = self.make_objecttreeitem(self.appli,mcent.nom + " : ", mcent, setfunction)
+      return item
+
+  def suppitem(self,item) :
+      # item : item du MOCLE de l'ETAPE à supprimer
+      # item.object = MCSIMP, MCFACT, MCBLOC ou MCList 
+      if item.object.isoblig() :
+          self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+          return 0
+      else :
+          self.object.suppentite(item.object)
+          message = "Mot-clé " + item.object.nom + " supprimé"
+          self.appli.affiche_infos(message)
+          return 1
+
+  def GetText(self):
+      try:
+          return self.object.get_sdname()
+      except:
+          return ''
+
+  def keys(self):
+      keys=self.object.mc_dict.keys()
+      return keys
+
+  def GetSubList(self):
+      sublist=[]
+      for obj in self.object.mc_liste:
+        def setfunction(value, object=obj):
+          object.setval(value)
+        item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+        sublist.append(item)
+      return sublist
+
+  def isvalid(self):
+      return self.object.isvalid()
+
+  def iscopiable(self):
+      """
+      Retourne 1 si l'objet est copiable, 0 sinon
+      """
+      return 1
+
+  def isCommande(self):
+      """
+      Retourne 1 si l'objet pointé par self est une Commande, 0 sinon
+      """
+      return 1
+      
+  def verif_condition_bloc(self):
+      return self.object.verif_condition_bloc()
+
+  def nomme_sd(self,nom):
+      """ Lance la méthode de nommage de la SD """
+      return self.object.nomme_sd(nom)
+
+  def get_noms_sd_oper_reentrant(self):
+      return self.object.get_noms_sd_oper_reentrant()
+
+import Accas
+treeitem=MACROTreeItem
+objet=Accas.MACRO_ETAPE
+    
+class MacroDisplay:
+  def __init__(self,appli,jdc,nom_jdc):
+    self.fenetre = Tkinter.Toplevel()
+    self.fenetre.configure(width = 800,height=500)
+    self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
+    self.fenetre.title("Visualisation Macro_Etape")
+    self.jdc=jdc
+    self.nom_jdc=nom_jdc
+    self.appli=appli
+    self.mainPart=Pmw.ScrolledCanvas(self.fenetre,
+                                     hull_width=600,
+                                     hull_height=500,
+                                     borderframe=1)
+    self.canvas=self.mainPart.component('canvas')
+    Pmw.Color.changecolor(self.canvas,background='gray95')
+    self.mainPart.pack(padx=10,pady=10,fill = 'both', expand = 1)
+    self.item=MACRO2TreeItem(self.appli,nom_jdc,jdc)
+    import treewidget
+    self.tree = treewidget.Tree(self.appli,self.item,self.mainPart,command=None)
+    self.tree.draw()
+    
+  def quit(self):
+    self.fenetre.destroy()
+
diff --git a/Editeur/compomclist.py b/Editeur/compomclist.py
new file mode 100644 (file)
index 0000000..74f5254
--- /dev/null
@@ -0,0 +1,46 @@
+#@ MODIF compomclist Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+from Tkinter import *
+import Pmw
+import Objecttreeitem
+import panels
+
+class MCLISTPanel(panels.Panel):
+    def init(self):
+        test_ajout = self.node.item.ajout_possible()
+        nom_mcfact = self.node.item.get_nom()
+        if test_ajout:
+            texte = "Pour ajouter une autre occurrence du mot-clé facteur %s, cliquez ci-dessous" %nom_mcfact
+        else:
+            texte = "Vous ne pouvez pas ajouter une autre occurrence du mot-clé facteur %s ?" %nom_mcfact
+        self.label = Label(self,text = texte)
+        self.label.place(relx=0.5,rely=0.4,anchor='center')
+        if test_ajout:
+            Button(self,text="AJOUTER",command=self.ajout_occurrence).place(relx=0.5,rely=0.6,anchor='center')
+            #Button(self,text="NON",command=None).place(relx=0.6,rely=0.6,anchor='center')
+
+    def ajout_occurrence(self,event=None):
+        self.node.parent.append_child(self.node.item.get_nom())
+
+class MCListTreeItem(Objecttreeitem.SequenceTreeItem):
+    panel = MCLISTPanel
+
+    def get_docu(self):
+        """ Retourne la clé de doc de l'objet pointé par self """
+        return self.object.get_docu()    
+
+    def isMCFact(self):
+        """
+        Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
+        """
+        return 0
+    
+import Accas
+treeitem = MCListTreeItem
+objet = Accas.MCList    
+
diff --git a/Editeur/componiveau.py b/Editeur/componiveau.py
new file mode 100644 (file)
index 0000000..67ed0df
--- /dev/null
@@ -0,0 +1,116 @@
+#@ MODIF componiveau Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+
+from Tkinter import *
+import Pmw
+
+import Objecttreeitem
+import panels
+import fontes
+from Extensions import commentaire 
+
+Fonte_Niveau = fontes.canvas_gras_italique
+Fonte_Niveau_inactif = fontes.canvas_italique
+
+class NIVEAUPanel(panels.OngletPanel):
+    def init(self):
+        """ Initialise les frame des panneaux contextuels relatifs à un JDC """
+        panneau=Pmw.PanedWidget(self,orient='horizontal')
+        panneau.add('left',min=0.4,max=0.6,size=0.5)
+        panneau.add('right',min=0.4,max=0.6,size=0.5)
+        panneau.pack(expand=1,fill='both')
+        self.bouton_com.pack_forget()
+        self.makeJDCPage(panneau.pane('left'))
+
+class NIVEAUTreeItem(Objecttreeitem.ObjectTreeItem):
+  panel = NIVEAUPanel
+
+  def isactif(self):
+      return self.object.isactif()
+    
+  def IsExpandable_old(self):
+      return self.object.isactif()
+
+  def IsExpandable(self):
+      return 1
+    
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+      """
+      if self.isactif():
+          fonte = Fonte_Niveau
+      else :
+          fonte = Fonte_Niveau_inactif
+      return self.labeltext,fonte,'#00008b'
+    
+  def GetIconName(self):
+      if self.isactif():
+          if self.object.isvalid():
+              return "ast-green-text"
+          else:
+              return "ast-red-text"
+      else:
+          return "ast-white-text"
+  
+  def keys_old(self):
+    return range(len(self.object.etapes))
+
+  def keys(self):
+      if self.object.etapes_niveaux != []:
+          return range(len(self.object.etapes_niveaux))
+      else:
+          return range(len(self.object.etapes))
+
+  def GetSubList(self):
+    sublist=[]
+    for key in self.keys():
+      if self.object.etapes_niveaux != []:
+          liste = self.object.etapes_niveaux
+      else:
+          liste = self.object.etapes
+      try:
+        value = liste[key]
+      except KeyError:
+        continue
+      def setfunction(value, key=key, object=liste):
+        object[key] = value
+      item =self.make_objecttreeitem(self.appli,value.ident() + " : ", value, setfunction)
+      sublist.append(item)
+    return sublist
+
+  def additem(self,name,pos):
+      if isinstance(name,Objecttreeitem.TreeItem) :
+          cmd=self.object.addentite(name.object,pos)
+      else :
+          cmd = self.object.addentite(name,pos)
+      item = self.make_objecttreeitem(self.appli,cmd.nom + " : ", cmd)
+      return item
+
+  def suppitem(self,item) :
+    # item = item de l'ETAPE à supprimer du JDC
+    # item.object = ETAPE ou COMMENTAIRE
+    # self.object = JDC
+    self.object.suppentite(item.object)
+    if isinstance(item.object,commentaire.COMMENTAIRE):
+        message = "Commentaire supprimé"
+        self.appli.affiche_infos(message)
+    else :
+        message = "Commande " + item.object.nom + " supprimée"
+        self.appli.affiche_infos(message)
+    return 1
+
+  def GetText(self):
+      return ''
+
+    
+import Accas
+treeitem = NIVEAUTreeItem
+objet = Accas.ETAPE_NIVEAU    
diff --git a/Editeur/componuplet.py b/Editeur/componuplet.py
new file mode 100644 (file)
index 0000000..d4e76fb
--- /dev/null
@@ -0,0 +1,158 @@
+#@ MODIF componuplet Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# Modules Python
+import types
+import Tkinter
+import Pmw
+from repr import Repr
+from copy import copy,deepcopy
+
+# Modules Eficas
+import Objecttreeitem
+import panels
+
+#
+__version__="$Name: V1_1p1 $"
+__Id__="$Id: componuplet.py,v 1.1.1.1 2001/12/04 15:38:22 eficas Exp $"
+#
+
+myrepr = Repr()
+myrepr.maxstring = 100
+myrepr.maxother = 100
+
+# Si Expandable vaut 1 les éléments du nuplet apparaissent dans l'arbre
+# Si Expandable vaut 0 les éléments n'apparaissent pas
+Expandable=1
+
+class NUPLETPanel(panels.OngletPanel):
+  def init(self):
+      """ Initialise les frame des panneaux contextuels relatifs \340 un NUPLET """
+      self.nb=Pmw.NoteBook(self,raisecommand=self.raisecmd)
+      self.nb.pack(fill = 'both', expand = 1)
+      self.nb.add("Valeurs",tab_text="Saisir valeurs")
+      self.makeValeurPage(self.nb.page('Valeurs'))
+      self.nb.setnaturalsize()
+    
+  def makeValeurPage(self,page):
+    label = Tkinter.Label(page,text='Valeurs :').pack(side=Tkinter.LEFT)
+    i=0
+    for obj in self.node.item.object.mc_liste:
+      frame_valeur=Tkinter.Frame(page)
+      frame_valeur.pack(side=Tkinter.LEFT)
+      if hasattr(obj,'definition'):
+         objet_mc=obj.definition
+      else:  
+         objet_mc=None
+      valeur=obj.valeur
+      if type(valeur) == types.InstanceType :
+        valeur=obj.getval()
+      aide=self.gen_aide(obj)
+      if objet_mc.into != None :
+        l_choix=list(objet_mc.into)
+        obj.set_valeur(l_choix[0],evaluation='non')
+        option=Pmw.OptionMenu (frame_valeur,
+                items = l_choix,
+                menubutton_width = 10,
+                command = lambda e,obj=obj,s=self:s.record_valeur(val=e,obj=obj),
+        )
+        option.pack(side=Tkinter.LEFT,padx=1)
+      else :
+        entry = Tkinter.Entry(frame_valeur,relief='sunken',width=10)
+        entry.pack(side=Tkinter.LEFT,padx=1)
+        entry.bind("<Return>",
+                lambda e,obj=obj,s=self:s.valid_valeur(e,obj=obj))
+        if i==0:entry.focus_set()
+        #aide = Tkinter.Label(frame_valeur, text = aide)
+        #aide.place(relx=0.5,rely=0.55,anchor='n')
+        if valeur != None :
+          entry.delete(0,Tkinter.END)
+          entry.insert(0,obj.getval())
+      i=i+1
+
+  def record_valeur(self,val=None,obj=None,mess='Valeur du mot-cl\351 enregistr\351e'):
+    """ 
+      Enregistre  val comme valeur de self.node.item.object SANS faire de 
+       test de validit\351 
+    """
+    obj.set_valeur(val,evaluation='non')
+    self.parent.appli.affiche_infos(mess)
+    self.node.parent.verif()
+    self.node.update()
+
+  def valid_valeur(self,e,obj=None,mess='Valeur du mot-cl\351 enregistr\351e'):
+    """ 
+      Enregistre  val comme valeur de self.node.item.object avec
+       test de validit\351 
+    """
+    valeur=e.widget.get()
+    e.widget.delete(0,Tkinter.END)
+    anc_val=obj.getval()
+    if anc_val == None:anc_val=''
+    test=obj.set_valeur(valeur)
+    if test:
+      if obj.isvalid():
+          self.parent.appli.affiche_infos('Valeur du mot-cl\351 enregistr\351e')
+          e.widget.insert(0,obj.getval())
+      else:
+          obj.set_valeur(anc_val,evaluation='non')
+          self.parent.appli.affiche_infos("valeur du mot-cl\351 non autoris\351e")
+          e.widget.insert(0,anc_val)
+    else:
+      print "impossible d'\351valuer : %s " %valeur
+      print "test =",test
+      self.parent.appli.affiche_infos("valeur du mot-cl\351 non autoris\351e")
+      e.widget.delete(0,Tkinter.END)
+      e.widget.insert(0,anc_val)
+          
+    self.node.parent.verif()
+    self.node.update()
+
+  def gen_aide(self,obj):
+    return ""
+    
+
+class NUPLETTreeItem(Objecttreeitem.ObjectTreeItem):
+  panel=NUPLETPanel
+
+  def IsExpandable(self):
+    return Expandable
+
+  def GetText(self):
+      return  ''
+
+  def isvalid(self):
+    return self.object.isvalid()
+
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-los"
+    elif self.object.isoblig():
+      return "ast-red-los"
+    else:
+      return "ast-yel-los"
+
+  def GetSubList(self):
+    if not Expandable:return []
+    sublist=[]
+    for obj in self.object.mc_liste:
+      item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, None)    
+      sublist.append(item)
+    return sublist
+
+  def additem(self,name,pos):
+    raise "NUPLET"
+
+  def suppitem(self,item) :
+    raise "NUPLET"
+
+  def verif_condition_bloc(self):
+    return self.object.verif_condition_bloc()
+
+import Accas
+treeitem=NUPLETTreeItem
+objet=Accas.MCNUPLET
diff --git a/Editeur/compooper.py b/Editeur/compooper.py
new file mode 100644 (file)
index 0000000..eceb5cf
--- /dev/null
@@ -0,0 +1,224 @@
+#@ MODIF compooper Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+from Tkinter import *
+import Pmw
+import Objecttreeitem
+import panels
+import fontes
+
+class OPERPanel(panels.OngletPanel):
+
+  def init(self):
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('Mocles', tab_text='Nouveau mot-clé')
+    nb.add('Concept', tab_text='Nommer concept')
+    nb.add('Commande', tab_text='Nouvelle Commande')
+    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
+    panneau=Pmw.PanedWidget(nb.page("Mocles"),
+                            orient='horizontal')
+    panneau.add('left',min=0.4,max=0.6,size=0.5)
+    panneau.add('right',min=0.4,max=0.6,size=0.5)
+    panneau.pack(expand=1,fill='both')
+    self.makeCommandePage(nb.page("Commande"))
+    self.makeConceptPage_oper(nb.page("Concept"))
+    self.makeMoclesPage(panneau.pane('left'))
+    self.makeReglesPage(panneau.pane('right'))
+    #self.makeCommentairePage(nb.page("Commentaire"))
+    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
+    nb.tab('Mocles').focus_set()
+    nb.setnaturalsize()
+    self.affiche()
+
+  def makeConceptPage_oper(self,page):
+      """ Crée la page de saisie du nom du concept """
+      if self.node.item.is_reentrant():
+          self.makeConceptPage_reentrant(page)
+      else:
+          self.makeConceptPage(page)
+
+  def makeConceptPage_reentrant(self,page):
+      """ Crée la page de saisie du nom de concept pour un opérateur reentrant
+      cad propose dans la liste des SD utilisées dans la commande celle(s) dont le
+      type est compatible avec celui que retourne l'opérateur """
+      liste_noms_sd = self.node.item.get_noms_sd_oper_reentrant()
+      self.listbox = Pmw.ScrolledListBox(page,
+                                         items=liste_noms_sd,
+                                         labelpos='n',
+                                         label_text="Structure(s) de données à enrichir par l'opérateur courant :",
+                                         listbox_height = 6,
+                                         selectioncommand=self.select_valeur_from_list,
+                                         dblclickcommand=lambda s=self,c=self.execConcept : s.choose_valeur_from_list(c))
+      self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
+      Label(page,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
+      self.valeur_choisie = StringVar()
+      self.label_valeur = Label(page,textvariable=self.valeur_choisie)
+      self.label_valeur.place(relx=0.45,rely=0.6)
+      if len(liste_noms_sd) == 1 :
+          self.valeur_choisie.set(liste_noms_sd[0])
+
+  def select_valeur_from_list(self):
+      try:
+          choix = self.listbox.getcurselection()[0]
+          self.valeur_choisie.set(choix)
+      except:
+          pass
+
+  def choose_valeur_from_list(self,command):
+      try:
+          choix = self.listbox.getcurselection()[0]
+          self.valeur_choisie.set(choix)
+          apply(command,(),{})
+      except:
+          pass
+
+class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
+  panel = OPERPanel
+  
+  def IsExpandable(self):
+      return 1
+
+  def GetIconName(self):
+      """
+      Retourne le nom de l'icône à afficher dans l'arbre
+      Ce nom dépend de la validité de l'objet
+      """
+      if self.object.isactif():
+        if self.object.isvalid():
+          return "ast-green-square"
+        else:
+          return "ast-red-square"
+      else:
+        return "ast-white-square"
+
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+      - le texte à afficher dans le noeud représentant l'item
+      - la fonte dans laquelle afficher ce texte
+      - la couleur du texte
+      """
+      if self.object.isactif():
+        # None --> fonte et couleur par défaut
+        return self.labeltext,None,None
+      else:
+        return self.labeltext,fontes.standard_italique,None
+      
+  def get_objet(self,name) :
+      for v in self.object.mc_liste:
+          if v.nom == name : return v
+      return None
+      
+  def get_type_sd_prod(self):
+      """
+         Retourne le nom du type du concept résultat de l'étape
+      """
+      sd_prod=self.object.get_type_produit()
+      if sd_prod:
+         return sd_prod.__name__
+      else:
+         return ""
+
+  def additem(self,name,pos):
+      if isinstance(name,Objecttreeitem.ObjectTreeItem) :
+          mcent = self.object.addentite(name.object,pos)
+      else :
+          mcent = self.object.addentite(name,pos)
+      self.expandable=1
+      if mcent == 0 :
+          # on ne peut ajouter l'élément de nom name
+          return 0
+      def setfunction(value, object=mcent):
+          object.setval(value)
+      item = self.make_objecttreeitem(self.appli,mcent.nom + " : ", mcent, setfunction)
+      return item
+
+  def suppitem(self,item) :
+      # item : item du MOCLE de l'ETAPE à supprimer
+      # item.object = MCSIMP, MCFACT, MCBLOC ou MCList 
+      if item.object.isoblig() :
+          self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+          return 0
+      else :
+          self.object.suppentite(item.object)
+          message = "Mot-clé " + item.object.nom + " supprimé"
+          self.appli.affiche_infos(message)
+          return 1
+
+  def GetText(self):
+      try:
+          return self.object.get_sdname()
+      except:
+          return ''
+
+  def keys(self):
+      keys=self.object.mc_dict.keys()
+      return keys
+
+  def GetSubList(self):
+      sublist=[]
+      for obj in self.object.mc_liste:
+        def setfunction(value, object=obj):
+          object.setval(value)
+        item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+        sublist.append(item)
+      return sublist
+
+  def isvalid(self):
+      return self.object.isvalid()
+
+  def iscopiable(self):
+      """
+      Retourne 1 si l'objet est copiable, 0 sinon
+      """
+      return 1
+
+  def isCommande(self):
+      """
+      Retourne 1 si l'objet pointé par self est une Commande, 0 sinon
+      """
+      return 1
+      
+  def verif_condition_bloc(self):
+      return self.object.verif_condition_bloc()
+
+  def nomme_sd(self,nom):
+      """ Lance la méthode de nommage de la SD """
+      return self.object.nomme_sd(nom)
+
+  def is_reentrant(self):
+      return self.object.is_reentrant()
+    
+  def get_noms_sd_oper_reentrant(self):
+      return self.object.get_noms_sd_oper_reentrant()
+
+  def get_objet_commentarise(self):
+      """
+          Cette méthode retourne un objet commentarisé
+          représentatif de self.object
+      """
+      import generator,string,Accas
+      # Format de fichier utilisé
+      format=self.appli.format_fichier.get()
+      g=generator.plugins[format]()
+      texte_commande = g.gener(self.object,format='beautifie')
+      # Il faut enlever la première ligne vide de texte_commande que 
+      # rajoute le generator
+      rebut,texte_commande = string.split(texte_commande,'\n',1)
+      # on construit l'objet COMMANDE_COMM repésentatif de self mais non 
+      # enregistré dans le jdc
+      commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
+                                             parent=self.object.parent)
+      commande_comment.niveau = self.object.niveau
+      commande_comment.jdc = commande_comment.parent = self.object.jdc
+      return commande_comment
+
+import Accas
+treeitem = EtapeTreeItem
+objet = Accas.ETAPE    
+
diff --git a/Editeur/compoparam.py b/Editeur/compoparam.py
new file mode 100644 (file)
index 0000000..cd247e0
--- /dev/null
@@ -0,0 +1,214 @@
+#@ MODIF compoparam Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+"""
+   Ce module contient les classes permettant de définir les objets graphiques
+   représentant un objet de type PARAMETRE, cad le panneau et l'item de l'arbre
+   d'EFICAS
+"""
+
+# import modules Python
+from Tkinter import *
+import Pmw
+import string
+
+# import modules EFICAS
+import Objecttreeitem
+import panels
+import fontes
+
+
+Fonte_PARAMETRE = fontes.standard_italique
+Fonte_TITRE = fontes.standard_gras_souligne
+
+
+class PARAMPanel(panels.OngletPanel):
+  """
+  Classe servant à construire le panneau associé à un paramètre.
+  C'est au moyen de ce panneau que l'utilisateur peut accéder
+  aux nom et valeur du paramètre en vue éventuellement de les
+  modifier.
+  """
+
+  def init(self):
+    """
+    Initialise les frame des panneaux contextuels relatifs à un PARAMETRE
+    """
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('Parametre', tab_text='Valeur Paramètre')
+    nb.add('Commande', tab_text='Nouvelle Commande')
+    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
+    self.makeParametrePage(nb.page("Parametre"))
+    self.makeCommandePage(nb.page("Commande"))
+    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
+    nb.tab('Parametre').focus_set()
+    nb.setnaturalsize()
+    self.make_buttons()
+    
+  def makeParametrePage(self,page):
+    """
+    Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE
+    """
+    self.frame_valeur = Frame(page)
+    self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
+    # affichage du titre du panneau
+    self.titre = StringVar()
+    self.titre.set("PARAMETRE "+self.node.item.get_nom())
+    Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n')
+    # création des labels et entries associés aux nom et valeur du paramètre
+    Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3)
+    self.entry_nom = Entry(self.frame_valeur)
+    Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5)
+    self.entry_val = Entry(self.frame_valeur)
+    # binding sur entry_nom
+    self.entry_nom.bind("<Return>",lambda e,s=self : s.entry_val.focus())
+    self.entry_val.bind("<Return>",lambda e,s=self : s.change_valeur())
+    # affichage des entries
+    self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3)
+    self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5)
+    # affichage d'une phrase d'aide
+    aide = """
+    Un retour de chariot dans une zone de saisie vous permet de vérifier si
+    la valeur que vous avez entrée est valide.
+    Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
+    valeurs seront effectivement prises en compte
+    """
+    Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n')
+    # affichage des nom et valeur du paramètre
+    self.display_valeur()
+    self.entry_nom.focus()
+
+  def make_buttons(self):
+    """
+    Crée les boutons du panneau
+    """
+    self.bouton_sup.place_forget()
+    self.bouton_doc.place_forget()
+    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
+    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
+
+    self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
+
+  def change_valeur(self):
+    """
+    Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE
+    """
+    if self.parent.modified == 'n' : self.parent.init_modif()
+    new_nom = self.entry_nom.get()
+    new_val = self.entry_val.get()
+    self.node.item.set_nom(new_nom)
+    self.node.item.set_valeur(new_val)
+    self.node.update()
+    self.display_valeur()
+    
+  def display_valeur(self):
+    """
+    Affiche dans self.widget_text la valeur de l'objet PARAMETRE
+    (annule d'éventuelles modifications faite par l'utilisateur)
+    """
+    self.entry_nom.delete(0,END)
+    self.entry_val.delete(0,END)
+    self.titre.set('PARAMETRE '+self.node.item.get_nom())
+    self.entry_nom.insert(END,self.node.item.get_nom())
+    self.entry_val.insert(END,self.node.item.get_valeur())
+
+class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
+    """
+    Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
+    qui représente le PARAMETRE
+    """
+    panel = PARAMPanel
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+# ---------------------------------------------------------------------------
+#                   API du PARAMETRE pour l'arbre 
+# ---------------------------------------------------------------------------
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icône associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : un PARAMETRE est toujours valide ...
+      """
+      if self.isactif():
+          if self.isvalid():
+              return "ast-green-square"
+          else:
+              return "ast-red-square"
+      else:
+          return "ast-white-square"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'Paramètre',Fonte_PARAMETRE,None
+
+    def GetText(self):
+      """
+      Retourne le texte à afficher après le nom de la commande (ici après 'paramètre')
+      Ce texte est tronqué à 25 caractères
+      """
+      texte = repr(self.object)
+      texte = string.split(texte,'\n')[0]
+      if len(texte) < 25 :
+          return texte
+      else :
+          return texte[0:24]+'...'
+
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+    
+# ---------------------------------------------------------------------------
+#       Méthodes permettant la modification et la lecture des attributs
+#       du paramètre = API graphique du PARAMETRE pour Panel et EFICAS
+# ---------------------------------------------------------------------------
+
+    def get_valeur(self):
+      """
+      Retourne la valeur de l'objet PARAMETRE cad son texte
+      """
+      return self.object.valeur or ''
+
+    def get_nom(self):
+      """
+      Retourne le nom du paramètre
+      """
+      return self.object.nom
+
+    def set_valeur(self,new_valeur):
+      """
+      Affecte valeur à l'objet PARAMETRE
+      """
+      self.object.set_valeur(new_valeur)
+
+    def set_nom(self,new_nom):
+      """
+      Renomme le paramètre
+      """
+      self.object.set_attribut('nom',new_nom)
+
+    def get_fr(self):
+      """
+      Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS
+      """
+      return "Définition d'un paramètre"
+    
+import Extensions.parametre
+treeitem =PARAMTreeItem
+objet = Extensions.parametre.PARAMETRE
diff --git a/Editeur/compoparameval.py b/Editeur/compoparameval.py
new file mode 100644 (file)
index 0000000..13bb98b
--- /dev/null
@@ -0,0 +1,289 @@
+#@ MODIF compoparameval Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+"""
+Ce module contient les classes permettant de définir les objets graphiques
+représentant un objet de type PARAMETRE_EVAL, cad le panneau et l'item de l'arbre
+d'EFICAS
+"""
+
+# import modules Python
+from Tkinter import *
+import Pmw
+import string
+import tkMessageBox
+
+# import modules EFICAS
+import Objecttreeitem
+import panels
+import fontes
+
+
+Fonte_PARAMETRE = fontes.standard_italique
+Fonte_TITRE = fontes.standard_gras_souligne
+
+
+class PARAM_EVALPanel(panels.OngletPanel):
+  """
+  Classe servant à construire le panneau associé à un paramètre.
+  C'est au moyen de ce panneau que l'utilisateur peut accéder
+  aux nom et valeur du paramètre en vue éventuellement de les
+  modifier.
+  """
+
+  def init(self):
+    """
+    Initialise les frame des panneaux contextuels relatifs à un PARAMETRE
+    """
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('Parametre', tab_text='Paramètre EVAL')
+    nb.add('Commande', tab_text='Nouvelle Commande')
+    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
+    self.makeParametrePage(nb.page("Parametre"))
+    self.makeCommandePage(nb.page("Commande"))
+    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
+    nb.tab('Parametre').focus_set()
+    nb.setnaturalsize()
+    self.make_buttons()
+    
+  def makeParametrePage(self,page):
+    """
+    Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE
+    """
+    self.frame_valeur = Frame(page)
+    self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
+    # affichage du titre du panneau
+    self.titre = StringVar()
+    self.titre.set("PARAMETRE EVAL "+self.node.item.get_nom())
+    Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n')
+    # création des labels et entries associés aux nom et valeur du paramètre
+    Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3)
+    self.entry_nom = Entry(self.frame_valeur)
+    Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5)
+    self.entry_val = Entry(self.frame_valeur)
+    # binding sur entry_nom
+    self.entry_nom.bind("<Return>",lambda e,s=self : s.verif_nom())
+    self.entry_val.bind("<Return>",lambda e,s=self : s.verif_eval())
+    # affichage des entries
+    self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3)
+    self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5)
+    # affichage d'une phrase d'aide
+    aide = """
+    Un retour de chariot dans une zone de saisie vous permet de vérifier si
+    la valeur que vous avez entrée est valide.
+    Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
+    valeurs seront effectivement prises en compte
+    """
+    Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n')
+    # affichage des nom et valeur du paramètre
+    self.display_valeur()
+    self.entry_nom.focus()
+
+  def make_buttons(self):
+    """
+    Crée les boutons du panneau
+    """
+    self.bouton_sup.place_forget()
+    self.bouton_doc.place_forget()
+    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
+    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
+    self.bouton_val.bind("<Return>",lambda e,s=self : s.bouton_val.invoke())
+
+    self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
+
+  def change_valeur(self):
+    """
+    Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE
+    """
+    if self.parent.modified == 'n' : self.parent.init_modif()
+    new_nom = self.entry_nom.get()
+    new_val = self.entry_val.get()
+    #self.node.item.set_nom(new_nom)
+    #self.node.item.set_valeur(new_val)
+    #self.node.update()
+    #self.display_valeur()
+    # on essaie de stocker les noms et valeurs
+    test,erreur = self.node.item.save_parametre_eval(new_nom,new_val)
+    if test :
+        # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
+        self.node.update()
+        self.display_valeur()
+        self.parent.appli.affiche_infos("Expression EVAL %s modifiée" %self.node.item.get_nom())
+    else:
+        # la formule est incorrecte : on affiche les erreurs
+        tkMessageBox.showerror("Expression EVAL incorrecte",erreur)
+        self.parent.appli.affiche_infos("Expression EVAL %s non modifiée" %self.node.item.get_nom())
+    
+  def display_valeur(self):
+    """
+    Affiche dans self.widget_text la valeur de l'objet PARAMETRE
+    (annule d'éventuelles modifications faite par l'utilisateur)
+    """
+    self.entry_nom.delete(0,END)
+    self.entry_val.delete(0,END)
+    self.titre.set('PARAMETRE '+self.node.item.get_nom())
+    self.entry_nom.insert(END,self.node.item.get_nom())
+    self.entry_val.insert(END,self.node.item.get_valeur())
+
+  def verif_nom(self):
+    """
+    Lance la vérification du nom donné par l'utilisateur dans entry_nom
+    """
+    nom = self.entry_nom.get()
+    test,erreur = self.node.item.verif_nom(nom)
+    if not test :
+        tkMessageBox.showerror("Nom invalide",erreur)
+        self.entry_nom.focus()
+        self.entry_nom.selection_range(0,END)
+        self.parent.appli.affiche_infos("Nom du paramètre refusé")
+    else:
+        self.parent.appli.affiche_infos("Nom du paramètre accepté")
+        
+  def verif_eval(self,event=None):
+    """
+    Lance la vérification de l'expression EVAL présente dans entry_val
+    """
+    exp_eval = self.entry_val.get()
+    test,erreur = self.node.item.verif_eval(exp_eval)
+    if not test:
+        tkMessageBox.showerror("Expression EVAL invalide",erreur)
+        self.entry_val.focus()
+        self.entry_val.selection_range(0,END)
+        self.parent.appli.affiche_infos("Expression EVAL refusée")
+    else:
+        self.parent.appli.affiche_infos("Expression EVAL acceptée")
+            
+class PARAM_EVALTreeItem(Objecttreeitem.ObjectTreeItem):
+    """
+    Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
+    qui représente le PARAMETRE
+    """
+    panel = PARAM_EVALPanel
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+# ---------------------------------------------------------------------------
+#                   API du PARAMETRE pour l'arbre 
+# ---------------------------------------------------------------------------
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icône associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : un PARAMETRE est toujours valide ...
+      """
+      if self.isactif():
+          if self.isvalid():
+              return "ast-green-square"
+          else:
+              return "ast-red-square"
+      else:
+          return "ast-white-square"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'EVAL',Fonte_PARAMETRE,None
+
+    def GetText(self):
+      """
+      Retourne le texte à afficher après le nom de la commande (ici après 'paramètre')
+      Ce texte est tronqué à 25 caractères
+      """
+      texte = repr(self.object)
+      texte = string.split(texte,'\n')[0]
+      if len(texte) < 25 :
+          return texte
+      else :
+          return texte[0:24]+'...'
+
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+    
+# ---------------------------------------------------------------------------
+#       Méthodes permettant la modification et la lecture des attributs
+#       du paramètre = API graphique du PARAMETRE pour Panel et EFICAS
+# ---------------------------------------------------------------------------
+
+    def isvalid(self):
+      """
+      Indique si l'objet pointé par self est valide
+      """
+      return self.object.isvalid()
+    
+    def get_valeur(self):
+      """
+      Retourne une chaîne représentant la valeur de l'objet PARAMETRE
+      cad de l'objet class_eval.EVAL
+      """
+      return self.object.get_valeur() or ''
+
+    def get_nom(self):
+      """
+      Retourne le nom du paramètre
+      """
+      return self.object.get_nom()
+
+    def set_valeur(self,new_valeur):
+      """
+      Affecte new_valeur à l'objet PARAMETRE_EVAL
+      """
+      # on construit le texte de la nouvelle valeur
+      new_valeur = 'EVAL("""'+new_valeur+'""")'
+      # on affecte la nouvelle valeur à self.object
+      self.object.set_valeur(new_valeur)
+
+    def set_nom(self,new_nom):
+      """
+      Renomme le paramètre
+      """
+      self.object.set_nom(new_nom)
+
+    def get_fr(self):
+      """
+      Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS
+      """
+      return "Définition d'un paramètre de type EVAL"
+
+    def verif_nom(self,nom):
+      """
+      Lance la vérification de validité du nom passé en argument
+      """
+      return self.object.verif_nom(nom = nom)
+
+    def verif_eval(self,valeur):
+      """
+      Lance la vérification de validité de l'expression EVAL passée en argument
+      """
+      return self.object.verif_eval(exp_eval = valeur)
+
+    def save_parametre_eval(self,new_nom,new_val):
+      """
+      Vérifie si (new_nom,new_val) définit bien un EVAL licite :
+          - si oui, stocke ces paramètres comme nouveaux paramètres de l'EVAL courant et retourne 1
+          - si non, laisse les paramètres anciens de EVAL inchangés et retourne 0
+      """
+      test,erreur = self.object.verif_parametre_eval(param=(new_nom,new_val))
+      if test :
+          # la formule est bien correcte : on sauve les nouveaux paramètres
+          self.object.update(param=(new_nom,new_val))
+      return test,erreur
+      
+import Extensions.parametre_eval
+treeitem =PARAM_EVALTreeItem
+objet = Extensions.parametre_eval.PARAMETRE_EVAL
diff --git a/Editeur/compoproc.py b/Editeur/compoproc.py
new file mode 100644 (file)
index 0000000..7cbc5ed
--- /dev/null
@@ -0,0 +1,143 @@
+#@ MODIF compoproc Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+from Tkinter import *
+import Pmw
+
+import Objecttreeitem
+import panels
+import fontes
+import compooper
+
+class PROCPanel(panels.OngletPanel):
+  def init(self):
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('Mocles', tab_text='Ajouter mots-clés')
+    nb.add('Commande', tab_text='Insérer Commande')
+    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
+    panneau=Pmw.PanedWidget(nb.page("Mocles"),
+                            orient='horizontal')
+    panneau.add('left',min=0.4,max=0.6,size=0.5)
+    panneau.add('right',min=0.4,max=0.6,size=0.5)
+    panneau.pack(expand=1,fill='both')
+    self.makeCommandePage(nb.page("Commande"))
+    self.makeMoclesPage(panneau.pane('left'))
+    self.makeReglesPage(panneau.pane('right'))
+    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
+    nb.setnaturalsize()
+    self.affiche()
+
+class ProcEtapeTreeItem(compooper.EtapeTreeItem):
+  panel = PROCPanel
+  
+  def IsExpandable(self):
+    return 1
+
+  def GetIconName(self):
+      """
+      Retourne le nom de l'icône à afficher dans l'arbre
+      Ce nom dépend de la validité de l'objet
+      """
+      if self.object.isactif():
+        if self.object.isvalid():
+          return "ast-green-square"
+        else:
+          return "ast-red-square"
+      else:
+        return "ast-white-square"
+
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+      - le texte à afficher dans le noeud représentant l'item
+      - la fonte dans laquelle afficher ce texte
+      - la couleur du texte
+      """
+      if self.object.isactif():
+        # None --> fonte et couleur par défaut
+        return self.labeltext,None,None
+      else:
+        return self.labeltext,fontes.standard_italique,None
+      
+  def get_objet(self,name) :
+      for v in self.object.mc_liste:
+          if v.nom == name : return v
+      return None
+      
+  def additem(self,name,pos):
+      if isinstance(name,Objecttreeitem.ObjectTreeItem) :
+          mcent = self.object.addentite(name.object,pos)
+      else :
+          mcent = self.object.addentite(name,pos)
+      self.expandable=1
+      if mcent == 0 :
+          # on ne peut ajouter l'élément de nom name
+          return 0
+      def setfunction(value, object=mcent):
+          object.setval(value)
+      item = self.make_objecttreeitem(self.appli,mcent.nom + " : ", mcent, setfunction)
+      return item
+
+  def suppitem(self,item) :
+    # item : item du MOCLE de l'ETAPE à supprimer
+    # item.object = MCSIMP, MCFACT, MCBLOC ou MCList 
+    if item.object.isoblig() :
+        self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+        return 0
+    else :
+        self.object.suppentite(item.object)
+        message = "Mot-clé " + item.object.nom + " supprimé"
+        self.appli.affiche_infos(message)
+        return 1
+
+  def GetText(self):
+      try:
+          #return  myrepr.repr(self.object.get_sdname())
+          return self.object.get_sdname()
+      except:
+          return ''
+
+  def keys(self):
+    keys=self.object.mc_dict.keys()
+    return keys
+
+  def GetSubList(self):
+    sublist=[]
+    for obj in self.object.mc_liste:
+      def setfunction(value, object=obj):
+        object.setval(value)
+      item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+      sublist.append(item)
+    return sublist
+
+  def isvalid(self):
+    return self.object.isvalid()
+
+  def iscopiable(self):
+    return 1
+
+  def isCommande(self):
+      """
+      Retourne 1 si l'objet pointé par self est une Commande, 0 sinon
+      """
+      return 1
+  
+  def verif_condition_bloc(self):
+    return self.object.verif_condition_bloc()
+
+  def nomme_sd(self,nom):
+      """ Lance la méthode de nommage de la SD """
+      return self.object.nomme_sd(nom)
+
+  def get_noms_sd_oper_reentrant(self):
+      return self.object.get_noms_sd_oper_reentrant()        
+
+import Accas
+treeitem = ProcEtapeTreeItem
+objet = Accas.PROC_ETAPE    
+
diff --git a/Editeur/composimp.py b/Editeur/composimp.py
new file mode 100644 (file)
index 0000000..d7ec659
--- /dev/null
@@ -0,0 +1,1278 @@
+#@ MODIF composimp Editeur  DATE 05/09/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+import string,types,os
+from Tkinter import *
+import Pmw
+from tkFileDialog import *
+from tkMessageBox import showinfo
+from copy import copy,deepcopy
+
+import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from utils import substract_list
+
+
+class newSIMPPanel(panels.OngletPanel):
+  """
+  Classe virtuelle servant de classe mère à toutes les classes Panel
+  servant à afficher et récupérer la valeur d'un mot-clé simple.
+  Le panel est différent suivant le type de la valeur attendu
+  """
+  def init(self):
+      """
+      Méthode appelée par le constructeur de OngletPanel :
+      construit le notebook à 2 onglets utilisé par tous les panels de
+      tous les mots-clés simples
+      """
+      nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+      nb.pack(fill = 'both', expand = 1)
+      self.nb=nb
+      nb.add('Valeur', tab_text='Saisir valeur')
+      #nb.add('Commentaire',tab_text='Insérer commentaire')
+      self.makeValeurPage(nb.page('Valeur'))
+      #self.makeCommentairePage(nb.page("Commentaire"))
+      nb.setnaturalsize()
+      
+# ----------------------------------------------------------------------------------------
+#   Méthodes utlisées pour l'affectation de la valeur donnée par l'utilisateur
+#    au mot-clé courant
+# ----------------------------------------------------------------------------------------
+
+  def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
+      """
+      Enregistre  val comme valeur de self.node.item.object SANS faire de test de validité
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != None:
+          valeur =name
+      else :
+          valeur= self.entry.get()
+          self.entry.delete(0,END)
+      self.node.item.set_valeur(valeur,evaluation='non')
+      self.parent.appli.affiche_infos(mess)
+      if self.node.item.get_position()=='global':
+          self.node.etape.verif_all()
+      elif self.node.item.get_position()=='global_jdc':
+          self.node.racine.verif_all()
+      else :
+          self.node.parent.verif()
+      if self.node.item.isvalid():
+          self.node.parent.select()
+      self.node.update()
+# ----------------------------------------------------------------------------------------
+#   Méthodes utlisées pour la manipulation des items dans les listes de choix
+# ----------------------------------------------------------------------------------------
+  def selectValeur(self,name):
+      self.selected_valeur = name
+
+  def deselectValeur(self,name):
+      self.selectValeur = None
+
+  def sup_valeur(self,name=None):
+      """
+      Supprime la valeur selectionnée de la liste des valeurs et la rajoute
+      à la liste des choix possibles
+      """
+      liste_valeurs = self.Liste_valeurs.get_liste()
+      liste_valeurs.remove(self.selected_valeur)
+      liste_choix = self.node.item.get_definition().into
+      liste_choix = substract_list(liste_choix,liste_valeurs)
+      self.Liste_valeurs.put_liste(liste_valeurs)
+      self.Liste_choix.put_liste(liste_choix)
+      self.selected_valeur = None
+
+  def add_choix(self,name=None):
+      """
+      Ajoute le choix selectionné à la liste des valeurs et le retire
+      de la liste des choix possibles
+      """
+      min,max = self.node.item.GetMinMax()
+      liste_valeurs = self.Liste_valeurs.get_liste()
+      if len(liste_valeurs) >= max :
+          self.parent.appli.affiche_infos("La liste ne peut pas avoir plus de %d éléments" %max)
+          return
+      liste_valeurs.append(self.selected_choix)
+      liste_choix = self.Liste_choix.get_liste()
+      liste_choix.remove(self.selected_choix)
+      self.Liste_valeurs.put_liste(liste_valeurs)
+      self.Liste_choix.put_liste(liste_choix)
+      self.selected_choix = None
+
+  def selectChoix(self,name):
+      self.selected_choix = name
+
+  def deselectChoix(self,name):
+      self.selectChoix = None
+      
+class SHELLPanel(newSIMPPanel):
+  """
+  Classe Panel utilisé pour les mots-clés simples qui attendent un shell pour valeur
+  """
+
+  def makeValeurPage(self,page):
+      """ 
+      Affiche la page concernant l'objet pointé par self qui attend un shell
+      """
+      objet_mc = self.node.item.get_definition()
+      aide = self.gen_aide()
+      aide = justify_text(texte=aide)
+      self.frame = Frame(page)
+      self.frame.place(relx=0,rely=0,relwidth=1,relheight=1)
+      label_aide = Label(self.frame,text = aide)
+      label_aide.place(relx=0.5,rely=0.1,anchor='center')
+      self.text = Text(self.frame,bg='gray95')
+      self.text.place(relx=0.2,rely=0.2,relwidth=0.6,relheight=0.6)
+      but_val = Button(self.frame,text='Valider',command = self.valide_shell)
+      but_ann = Button(self.frame,text='Annuler',command = self.annule_shell)
+      but_val.place(relx=0.35,rely=0.9,anchor='center')
+      but_ann.place(relx=0.65,rely=0.9,anchor='center')
+      self.display_valeur()
+
+  def gen_aide(self):
+      """
+      Retourne une chaîne de caractères d'aide sur la valeur qu'attend l'objet
+      pointé par self
+      """
+      return "Un shell est attendu"
+    
+  def valide_shell(self,event=None):
+      """
+      Récupère la valeur saisie par l'utilisateur dans self.text
+      et la stocke dans l'objet MCSIMP courant
+      """
+      texte = self.text.get(1.0,END)
+      self.record_valeur(texte)
+
+  def annule_shell(self,event=None):
+      """
+      Annule toute saisie dans self.text
+      """
+      self.text.delete(0,END)
+
+  def display_valeur(self,val=None):
+      """
+      Affiche la valeur de l'objet pointé par self
+      """
+      if val != None :
+          valeur = val
+      else:
+          valeur = self.node.item.get_valeur()
+      if valeur == None : return
+      self.text.insert(END,valeur)
+
+class PLUSIEURS_Panel(newSIMPPanel):
+  """
+  Classe virtuelle servant de classe mère à toutes celles définissant
+  un panneau pour un mot-clé simple qui attend une liste de valeurs
+  """
+  def accepte_modifs_valeur(self,min,max):
+      """
+      Méthode qui récupère la liste des valeurs donnée par l'utilisateur
+      et l'affecte au mot-clé courant.
+      """
+      l_valeurs = self.Liste_valeurs.get_liste()
+      longueur = len(l_valeurs)
+      if longueur < min or longueur > max :
+          self.parent.appli.affiche_infos("Valeur refusée : nombre d'éléments incorrect dans la liste")
+          return
+      if longueur > 1:
+         valeur = tuple(l_valeurs)
+      elif longueur == 1:
+         valeur = l_valeurs[0]
+      else:
+         valeur = None
+      self.parent.appli.affiche_infos("Valeur acceptée")
+      self.record_valeur(valeur)
+      if self.node.item.isvalid():
+          self.node.parent.select()
+      # fermeture de la fenêtre de sélection\r
+      if self.ajout_valeurs:\r
+          self.ajout_valeurs.quit()\r
+          
+  def annule_modifs_valeur(self):
+      """
+      RAZ de la liste des valeurs (annule toutes les valeurs saisies par l'utilisateur)
+      """
+      self.node.select()
+      # fermeture de la fenêtre de sélection\r
+      if self.ajout_valeurs:\r
+          self.ajout_valeurs.quit()\r
+          
+  def traite_reel(self,valeur):
+      """
+      Cette fonction a pour but de rajouter le '.' en fin de chaîne pour un réel
+      ou de détecter si on fait référence à un concept produit par DEFI_VALEUR
+      ou un EVAL ...
+      """
+      valeur = string.strip(valeur)
+      liste_reels = self.node.item.get_sd_avant_du_bon_type()
+      if valeur in liste_reels:
+          return valeur
+      if len(valeur) >= 3 :
+          if valeur[0:4] == 'EVAL' :
+              # on a trouvé un EVAL --> on retourne directement la valeur
+              return valeur
+      if string.find(valeur,'.') == -1 :
+          # aucun '.' n'a été trouvé dans valeur --> on en rajoute un à la fin
+          return valeur+'.'
+      else:
+          return valeur
+        
+  def add_valeur_sans_into(self,name=None):
+      """
+      Lit ce que l'utilisateur a saisi dans self.entry et cherche à
+      l'évaluer :
+      - si la valeur est acceptable, elle est ajoutée dans la liste des valeurs
+      - sinon elle est refusée
+      """
+      min,max = self.node.item.GetMinMax()
+      if name != None :
+          valeur = name
+      else:
+          valeur = self.get_valeur()
+      if self.node.item.wait_reel():
+          valeur = self.traite_reel(valeur)
+      if self.node.item.wait_geom():
+          val,test1 = valeur,1
+      else:
+          val,test1 = self.node.item.object.eval_valeur(valeur)
+      if test1 :
+          test2 = self.node.item.object.verif_type(val)
+          if test2 :
+              liste_valeurs = self.Liste_valeurs.get_liste()
+              if len(liste_valeurs) >= max :
+                  self.parent.appli.affiche_infos("La liste a déjà atteint le nombre maximum d'éléments, ajout refusé")
+                  self.erase_valeur()
+                  return
+              liste_valeurs.append(val)
+              self.Liste_valeurs.put_liste(liste_valeurs)
+              self.erase_valeur()
+              self.parent.appli.affiche_infos("Nouvelle valeur acceptée")
+          else:
+              self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé")
+      else:
+          print "impossible d'évaluer %s" %val
+          self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé")
+      #if self.node.item.isvalid():
+      #    self.node.parent.select()
+
+  def sup_valeur_sans_into(self,name=None):
+      """
+      Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée
+      """
+      liste_valeurs = self.Liste_valeurs.get_liste()
+      try:
+          liste_valeurs.remove(self.selected_valeur)
+      except:
+          # la valeur sélectionnée n'est pas dans la liste
+          return
+      self.Liste_valeurs.put_liste(liste_valeurs)
+      #self.display_valeur('')
+      self.display_valeur(self.selected_valeur)
+      self.selected_valeur = None      
+
+  def display_valeur(self,val=None):
+      """
+      Affiche la valeur passée en argument dans l'entry de saisie.
+      Par défaut affiche la valeur du mot-clé simple
+      """
+      if not val :
+          valeur = self.node.item.getval()
+      else:
+          valeur = val
+      self.entry.delete(0,END)
+      if not valeur : return
+      self.entry.insert(0,str(valeur))
+      
+            
+class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
+  """
+  Classe servant à définir le panneau permettant d'afficher et de saisir une
+  liste de valeurs à choisir parmi une liste discrètes de valeurs possibles
+  """
+  def makeValeurPage(self,page):
+      """
+      Génère la page de saisie de plusieurs valeurs parmi un ensemble discret
+      de possibles
+      """\r
+      self.ajout_valeurs = None
+      # On récupère la bulle d'aide du panneau, l'objet, min et max (cardinalité de la liste),
+      # la liste des choix et la liste des valeurs
+      bulle_aide=self.get_bulle_aide()
+      objet_mc = self.node.item.get_definition()
+      min,max = self.node.item.GetMinMax()
+      l_choix=list(objet_mc.into)
+      l_choix.sort()
+      l_valeurs = self.node.item.GetListeValeurs()
+      # remplissage du panneau
+      self.frame_valeurs = Frame(page)
+      self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
+      self.frame_boutons_fleches = Frame(page)
+      self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
+      self.frame_choix = Frame(page)
+      self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
+      self.frame_boutons = Frame(page)
+      self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.3,relheight=0.1)
+      liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
+                                 ("<Button-3>",self.deselectValeur),
+                                 ("<Double-Button-1>",self.sup_valeur))
+      liste_commandes_choix = (("<Button-1>",self.selectChoix),
+                               ("<Button-3>",self.deselectChoix),
+                               ("<Double-Button-1>",self.add_choix))
+      self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
+                                      titre="Valeur(s) actuelle(s)")
+      self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,liste_commandes = liste_commandes_choix,
+                                    titre= "Valeurs possibles")
+      bouton_add = Button(self.frame_boutons_fleches,
+                          #text="<--",
+                          image = images.get_image('arrow_left'),
+                          command = self.add_choix)
+      bouton_sup = Button(self.frame_boutons_fleches,
+                          #text="-->",
+                          image = images.get_image('arrow_right'),
+                          command = self.sup_valeur)
+      bouton_accepter = Button(self.frame_boutons,
+                               text='Valider',
+                               command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
+      bouton_annuler = Button(self.frame_boutons,
+                              text = 'Annuler',
+                              command = self.annule_modifs_valeur)
+      bouton_add.place(relx=0.3,rely=0.35)
+      bouton_sup.place(relx=0.3,rely=0.65)
+      for but in (bouton_accepter,bouton_annuler):
+          but.pack(side='left',padx=5)
+      self.Liste_valeurs.affiche_liste()
+      self.Liste_choix.affiche_liste()
+      for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
+          fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+          fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+  def get_bulle_aide(self):
+      """
+      Retourne la bulle d'aide du panneau (affichée par clic droit)
+      """
+      return """Un clic sur une valeur des deux listes la sélectionne.
+      - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
+      dans la liste des valeurs que vous voulez affecter au mot-clé simple
+      - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
+      sélectionnée (elle apparaît alors à nouveau comme choix possible
+      dans la liste des choix à droite)
+      - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
+      au mot-clé simple courant
+      - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
+      avant toute modification depuis le dernier 'Valider'"""
+
+class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
+  """
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de donner une liste de valeurs qui ne sont pas
+  à choisir dans une liste discrètes et qui sont de type de base :
+  entier, réel, string,...
+  """
+  def makeValeurPage(self,page):
+      """
+      Crée la page de saisie d'une liste de valeurs à priori quelconques,
+      cad qui ne sont  pas à choisir dans une liste prédéfinie
+      """
+      # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
+      # et la liste des valeurs déjà affectées à l'objet courant
+      bulle_aide=self.get_bulle_aide()
+      objet_mc = self.node.item.get_definition()
+      aide = self.get_aide()
+      aide = justify_text(texte=aide)
+      min,max = self.node.item.GetMinMax()
+      l_valeurs = self.node.item.GetListeValeurs()
+      # création des frames globales
+      self.frame1 = Frame(page,relief='groove',bd=2)
+      self.frame2 = Frame(page)
+      self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
+      self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
+      self.frame_right = Frame(self.frame1)
+      self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
+      # création des frames internes
+      self.frame_valeurs = Frame(self.frame1)
+      self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
+      self.frame_boutons_fleches = Frame(self.frame_right)
+      self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5)
+      self.frame_choix = Frame(self.frame_right)
+      self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.5)
+      self.frame_aide = Frame(self.frame_right)
+      self.frame_aide.place(relx=0.1,rely=0.7,relwidth=0.8,relheight=0.3)
+      self.frame_boutons = Frame(self.frame2)
+      self.frame_boutons.place(relx=0.35,rely=0.,relwidth=0.3,relheight=1.)
+      for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
+                 self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
+          fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+          fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      # création des objets dans les frames
+      liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
+                                 ("<Button-3>",self.deselectValeur),
+                                 ("<Double-Button-1>",self.sup_valeur_sans_into))
+      self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
+                                      titre="Valeur(s) actuelle(s)")
+      # Création de l'entry ou de la liste des SD
+      self.label = Label(self.frame_choix,text="Valeur :")
+      self.make_entry(frame = self.frame_choix,command = self.add_valeur_sans_into)
+      self.label.place(relx=0.05,rely=0.5)\r
+      # Création d'un bouton "Importer ..." sur le panel.\r
+      bouton_valeurs_fichier = Button(self.frame_choix,\r
+                                      text="Importer ...",\r
+                                      command=self.select_in_file)\r
+      bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6)\r
+      self.ajout_valeurs = None
+      # boutons Ajouter et Supprimer
+      bouton_add = Button(self.frame_boutons_fleches,
+                          image = images.get_image('arrow_left'),
+                          command = self.add_valeur_sans_into)
+      bouton_sup = Button(self.frame_boutons_fleches,
+                          image = images.get_image('arrow_right'),
+                          command = self.sup_valeur_sans_into)
+      bouton_add.place(relx=0.3,rely=0.35)
+      bouton_sup.place(relx=0.3,rely=0.65)
+      # affichage de l'aide
+      self.aide = Label(self.frame_aide,
+                        text = aide,
+                        justify='center',
+                        anchor='center')
+      self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
+      self.Liste_valeurs.affiche_liste()
+      # boutons Accepter et Annuler
+      bouton_accepter = Button(self.frame_boutons,
+                               text='Valider',
+                               command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
+      bouton_annuler = Button(self.frame_boutons,
+                              text = 'Annuler',
+                              command = self.annule_modifs_valeur)
+      for but in (bouton_accepter,bouton_annuler):
+          but.pack(side='left',padx=5)
+\r
+  def select_in_file(self):\r
+      """ Permet d'ouvrir un fichier choisi par l'utilisateur. """\r
+      nom_fichier = askopenfilename(title="Choix fichier :")\r
+      if nom_fichier == "":\r
+          return\r
+      try:\r
+          f = open(nom_fichier, "rb")\r
+          selection_texte = f.read()\r
+          f.close()\r
+          self.ajout_valeurs = FenetreDeSelection(self, self.node.item,\r
+                                         titre="Sélection de valeurs",\r
+                                         texte=selection_texte)\r
+      except:\r
+          showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier)\r
+          
+  def get_bulle_aide(self):
+      """
+      Retourne l'aide associée au panneau courant
+      """
+      return """Taper dans la boîte de saisie de droite la valeur que
+      vous voulez affecter au mot-clé simple.
+      - Cliquez sur la flèche gauche ou pressez <Return> pour la faire glisser
+      dans la liste des valeurs que vous voulez affecter au mot-clé simple
+      - Un clic sur une valeur de la liste la sélectionne
+      - Un clic sur la flèche droite ou un double-clic retire la valeur
+      sélectionnée de la liste
+      - Cliquez sur 'Valider' pour que la nouvelle valeur désirée soit affectée
+      au mot-clé simple
+      - Cliquez sur 'Annuler' pour annuler toutes les modifications faites
+      depuis le dernier clic sur 'Valider'"""
+
+  def get_aide(self):
+      """
+      Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
+      que saisit l'utilisateur
+      """
+      mc = self.node.item.get_definition()
+      d_aides = { 'TXM' : 'chaînes de caractères',
+                  'R'   : 'réels',
+                  'I'   : 'entiers',
+                  'C'   : 'complexes'}
+      type = mc.type[0]
+      if not d_aides.has_key(type) : return 'Type de base inconnu'
+      if mc.min == mc.max:
+          return "Une liste de "+d_aides[type]+" chaînes de caractères est attendue"
+      else :
+          return "Une liste de "+d_aides[type]+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
+
+  def make_entry(self,frame,command):
+      """
+      Crée l'entry de saisie de la valeur souhaitée : distingue le
+      cas d'un complexe attendu, d'une autre valeur quelconque
+      """
+      if self.node.item.wait_complex():
+          self.typ_cplx=StringVar()
+          self.typ_cplx.set('RI')
+          rb1 = Radiobutton(frame, text='RI',variable=self.typ_cplx,value='RI')
+          rb2 = Radiobutton(frame, text='MP',variable=self.typ_cplx,value='MP')
+          self.entry1 = Pmw.EntryField(frame,validate='real')
+          self.entry2 = Pmw.EntryField(frame,validate='real')
+          rb1.place(relx=0.05,rely = 0.4)
+          rb2.place(relx=0.05,rely = 0.6)
+          self.entry1.component('entry').bind("<Return>",lambda e,s=self:s.entry2.component('entry').focus)
+          self.entry2.component('entry').bind("<Return>",lambda e,c=command:c())
+          self.entry1.place(relx=0.27,rely = 0.5,relwidth=0.35)
+          self.entry2.place(relx=0.65,rely = 0.5,relwidth=0.35)
+          self.entry1.focus()
+      else:
+          self.entry = Entry(frame,relief='sunken')
+          self.entry.place(relx=0.28,rely=0.5,relwidth=0.6)
+          self.entry.bind("<Return>",lambda e,c=command:c())
+          self.entry.focus()
+
+  def get_valeur(self):
+      """
+      Retourne la valeur saisie par l'utilisateur dans self.entry
+      """
+      return self.entry.get()
+
+  def erase_valeur(self):
+      """
+      Efface la valeur donnée par l'utilisateur dans l'entry
+      """
+      self.entry.delete(0,END)
+        
+class PLUSIEURS_ASSD_Panel(PLUSIEURS_Panel):
+  """
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de donner une liste de valeurs qui ne sont pas
+  à choisir dans une liste discrètes et qui sont de type dérivé d'ASSD
+  """
+  def makeValeurPage(self,page):
+      """
+      Génère la page de saisie de plusieurs noms de SD parmi un ensemble discret
+      de SD possibles, cad d'un type cohérent avec les types attendus par le mot-clé simple
+      """
+      # On récupère la bulle d'aide du panneau, l'objet, l'aide, min et max (cardinalité de la liste),
+      # la liste des valeurs déjà affectées à l'objet courant et la liste des SD du bon type
+      bulle_aide=self.get_bulle_aide()
+      self.ajout_valeurs=None
+      objet_mc = self.node.item.get_definition()
+      aide = self.get_aide()
+      aide = justify_text(texte=aide)
+      min,max = self.node.item.GetMinMax()
+      l_valeurs = self.node.item.GetListeValeurs()
+      l_choix=self.node.item.get_sd_avant_du_bon_type()
+      l_choix.sort()
+      # remplissage du panneau
+      self.frame_valeurs = Frame(page)
+      self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
+      self.frame_boutons_fleches = Frame(page)
+      self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
+      self.frame_choix = Frame(page)
+      self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
+      self.frame_boutons = Frame(page)
+      self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.3,relheight=0.1)
+      liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
+                                 ("<Button-3>",self.deselectValeur),
+                                 ("<Double-Button-1>",self.sup_valeur_sans_into))
+      liste_commandes_choix = (("<Button-1>",self.selectChoix),
+                               ("<Button-3>",self.deselectChoix),
+                               ("<Double-Button-1>",self.add_valeur_sans_into))
+      self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
+                                      titre="Valeur(s) actuelle(s)")
+      self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,liste_commandes = liste_commandes_choix,
+                                    titre= "Valeurs possibles")
+      bouton_add = Button(self.frame_boutons_fleches,
+                          #text="<--",
+                          image = images.get_image('arrow_left'),
+                          command = self.add_valeur_sans_into)
+      bouton_sup = Button(self.frame_boutons_fleches,
+                          #text="-->",
+                          image = images.get_image('arrow_right'),
+                          command = self.sup_valeur_sans_into)
+      bouton_accepter = Button(self.frame_boutons,
+                               text='Valider',
+                               command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
+      bouton_annuler = Button(self.frame_boutons,
+                              text = 'Annuler',
+                              command = self.annule_modifs_valeur)
+      bouton_add.place(relx=0.3,rely=0.35)
+      bouton_sup.place(relx=0.3,rely=0.65)
+      for but in (bouton_accepter,bouton_annuler):
+          but.pack(side='left',padx=5)
+      self.Liste_valeurs.affiche_liste()
+      self.Liste_choix.affiche_liste()
+      for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
+          fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+          fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+  def get_bulle_aide(self):
+      """
+      Retourne la bulle d'aide associée au panneau
+      """
+      return """Un clic sur une valeur des deux listes la sélectionne.
+      - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
+      dans la liste des valeurs que vous voulez affecter au mot-clé simple
+      - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
+      sélectionnée (elle apparaît alors à nouveau comme choix possible
+      dans la liste des choix à droite)
+      - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
+      au mot-clé simple courant
+      - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
+      avant toute modification depuis le dernier 'Valider'"""
+
+  def get_aide(self):
+      """
+      Retourne la phrase d'aide indiquant de quel type doivent être les
+      valeurs que doit entrer l'utilisateur
+      """
+      mc = self.node.item.get_definition()
+      type = mc.type[0].__name__  
+      if len(mc.type)>1 :
+          for typ in mc.type[1:] :
+              type = type + ' ou '+typ.__name__
+      if mc.min == mc.max:
+        return "Une liste de "+`mc.min`+" objets de type "+type+" est attendue"
+      else :
+        return "Une liste d'objets de type "+type+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
+    
+  def sup_valeur(self,name=None):
+      """
+      Supprime la valeur selectionnée de la liste des valeurs et la rajoute
+      à la liste des choix possibles
+      """
+      liste_valeurs = self.Liste_valeurs.get_liste()
+      liste_valeurs.remove(self.selected_valeur)
+      liste_choix = self.node.item.get_definition().into
+      liste_choix = substract_list(liste_choix,liste_valeurs)
+      self.Liste_valeurs.put_liste(liste_valeurs)
+      self.Liste_choix.put_liste(liste_choix)
+      self.selected_valeur = None      
+    
+  def erase_valeur(self):
+      pass
+
+  def get_valeur(self):
+      """
+      Retourne la valeur sélectionnée dans la liste des choix
+      """
+      return self.selected_choix
+
+  def display_valeur(self,val=None):
+      """
+         Affiche la valeur passée en argument dans l'entry de saisie.
+         Par défaut affiche la valeur du mot-clé simple
+      """
+      # Il n'y a pas d'entry pour ce type de panneau
+      return
+
+    
+class UNIQUE_Panel(newSIMPPanel):
+  """
+  Classe virtuelle servant de classe mère à toutes celles définissant un panneau
+  permettant l'affichage et la saisie d'une valeur unique pour le mot-clé simple
+  """
+
+  def erase_valeur(self):
+      """
+      Efface l'entry de saisie
+      """
+      self.entry.delete(0,END)
+
+  def get_valeur(self):
+      """
+      Retourne la valeur donnée par l'utilisateur
+      """
+      return self.entry.get()
+    
+  def valid_valeur(self):
+      """
+      Teste si la valeur fournie par l'utilisateur est une valeur permise :
+      - si oui, l'enregistre
+      - si non, restaure l'ancienne valeur
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      valeur = self.get_valeur()
+      self.erase_valeur()
+      anc_val = self.node.item.get_valeur()
+      test = self.node.item.set_valeur(valeur)
+      if not test :
+          mess = "impossible d'évaluer : %s " %`valeur`
+          self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
+          return
+      elif self.node.item.isvalid() :
+          self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
+          self.node.parent.select()
+      else :
+          cr = self.node.item.get_cr()
+          mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
+          self.record_valeur(anc_val,mess=mess)
+          return
+      if self.node.item.get_position()=='global':
+          self.node.etape.verif_all()
+      elif self.node.item.get_position()=='global_jdc':
+          self.node.racine.verif_all()
+      else :
+          self.node.parent.verif()
+      self.node.update()
+
+class UNIQUE_INTO_Panel(UNIQUE_Panel):
+  """
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+  discrètes
+  """
+  def makeValeurPage(self,page):
+      """
+      Génère la page de saisie d'une seule valeur parmi un ensemble
+      discret de possibles
+      """
+      # récupération de la bulle d'aide et de l'objet mc
+      bulle_aide=self.get_bulle_aide()
+      objet_mc = self.node.item.get_definition()
+      # remplissage du panel
+      self.frame_valeur = Frame(page)
+      self.frame_valeur.pack(fill='both',expand=1)
+      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      l_choix=list(objet_mc.into)
+      l_choix.sort()
+      self.label = Label(self.frame_valeur,text='Choisir une valeur :')
+      self.label.pack(side='top')
+      self.frame = Frame(page)
+      self.frame.place(relx=0.33,rely=0.2,relwidth=0.33,relheight=0.6)
+      liste_commandes = (("<Button-1>",self.selectChoix),
+                         ("<Button-3>",self.deselectChoix),
+                         ("<Double-Button-1>",self.record_valeur))
+      self.Liste_choix = ListeChoix(self,self.frame,l_choix,liste_commandes = liste_commandes,
+                                    titre="Valeurs possibles")
+      self.Liste_choix.affiche_liste()
+
+  def get_bulle_aide(self):
+      """
+      Retourne la bulle d'aide affectée au panneau courant (affichée par clic droit)
+      """
+      return """Double-cliquez sur la valeur désirée
+      pour valoriser le mot-clé simple courant"""
+
+class UNIQUE_ASSD_Panel(UNIQUE_Panel):
+  """
+  Classe servant à définir le panneau associé aux objets qui attendent une valeur unique
+  d'un type dérivé d'ASSD
+  """
+  def makeValeurPage(self,page):
+      """
+          Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une 
+          SD de type dérivé d'ASSD
+      """
+      # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
+      # et de la liste des SD du bon type (constituant la liste des choix)
+      bulle_aide=self.get_bulle_aide()
+      aide=self.get_aide()
+      aide= justify_text(texte=aide)
+      liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
+      # Remplissage du panneau
+      self.valeur_choisie = StringVar()
+      self.valeur_choisie.set('')
+      self.frame_valeur = Frame(page)
+      self.frame_valeur.pack(fill='both',expand=1)
+      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      self.listbox = Pmw.ScrolledListBox(self.frame_valeur,
+                                         items=liste_noms_sd,
+                                         labelpos='n',
+                                         label_text="Structures de données du type\n requis par l'objet courant :",
+                                         listbox_height = 6,
+                                         selectioncommand=self.select_valeur_from_list,
+                                         dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
+      self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
+      Label(self.frame_valeur,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
+      #self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie)
+      Label(self.frame_valeur,textvariable=self.valeur_choisie).place(relx=0.5,rely=0.6)
+      # affichage de la valeur courante
+      self.display_valeur()
+
+  def get_bulle_aide(self):
+      """
+      Retourne l'aide associée au panneau
+      """
+      return "Double-cliquez sur la structure de donnée désirée pour valoriser le mot-clé simple courant"
+
+  def get_aide(self):
+      """
+      Retourne la phrase d'aide indiquant de quel type doit être la valeur à donner par l'utilisateur
+      """
+      mc = self.node.item.get_definition()
+      type = mc.type[0].__name__  
+      if len(mc.type)>1 :
+          for typ in mc.type[1:] :
+              type = type + ' ou '+typ.__name__
+      return  "Un objet de type "+type+" est attendu"
+    
+  def select_valeur_from_list(self):
+      """
+      Affecte à valeur choisie la sélection courante dans la liste des choix proposée
+      """
+      if len(self.listbox.get()) == 0 : return
+      choix = self.listbox.getcurselection()[0]
+      self.valeur_choisie.set(choix)
+
+  def choose_valeur_from_list(self,command):
+      """
+      Affecte à valeur choisie la sélection courante dans la liste des choix proposée
+      Exécute command
+      """
+      if len(self.listbox.get()) == 0 : return
+      choix = self.listbox.getcurselection()[0]
+      self.valeur_choisie.set(choix)
+      apply(command,(),{})
+
+  def get_valeur(self):
+      """
+      Retourne la valeur donnée par l'utilisateur au MCS
+      """
+      return self.valeur_choisie.get()
+    
+  def display_valeur(self):
+      """
+      Affiche la valeur de l'objet pointé par self
+      """
+      valeur = self.node.item.get_valeur()
+      if valeur == None : return # pas de valeur à afficher ...
+      self.valeur_choisie.set(valeur.nom)
+
+  def erase_valeur(self):
+      pass
+
+class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel):
+  """
+  Classe servant à définir le panneau correspondant à un mot-clé simple
+  qui attend une valeur unique de type dérivé d'ASSD ou non encore
+  existante (type CO(...) utilisé dans les macros uniquement)
+  """
+  def makeValeurPage(self,page):
+      """
+      Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une SD de type dérivé
+      d'ASSD
+      """
+      # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
+      # et de la liste des SD du bon type (constituant la liste des choix)
+      bulle_aide=self.get_bulle_aide()
+      aide=self.get_aide()
+      aide= justify_text(texte=aide)
+      liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
+      # Remplissage du panneau
+      self.frame_valeur = Frame(page)
+      self.frame_valeur.pack(fill='both',expand=1)
+      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      # affichage de la liste des SD existantes et du bon type
+      self.listbox = Pmw.ScrolledListBox(self.frame_valeur,
+                                         items=liste_noms_sd,
+                                         labelpos='n',
+                                         label_text="Structures de données du type\n requis par l'objet courant :",
+                                         listbox_height = 6,
+                                         selectioncommand=self.select_valeur_from_list,
+                                         dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
+      self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
+      # affichage du bouton 'Nouveau concept'
+      self.b_co = Pmw.OptionMenu(self.frame_valeur,labelpos='w',label_text = "Nouveau concept : ",
+                                 items = ('OUI','NON'),menubutton_width=10)
+      self.b_co.configure(command = lambda e,s=self : s.ask_new_concept())
+      self.b_co.place(relx=0.05,rely=0.6,anchor='w')
+      self.label_co = Label(self.frame_valeur,text='Nom du nouveau concept :')
+      self.entry_co = Entry(self.frame_valeur)
+      self.entry_co.bind('<Return>',self.valid_nom_concept_co)
+      # affichage du label de la structure de donnée choisie
+      self.l_resu = Label(self.frame_valeur,text='Structure de donnée choisie :')
+      self.valeur_choisie = StringVar()
+      self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie)
+      self.aide = Label(self.frame_valeur, text = aide)
+      self.aide.place(relx=0.5,rely=0.85,anchor='n')
+      self.b_co.invoke('NON')
+      # affichage de la valeur courante
+      self.display_valeur()
+      
+  def get_bulle_aide(self):
+      """
+      Retourne la bulle d'aide du panneau
+      """
+      return """Double-cliquez sur la structure de donnée désirée
+      pour valoriser le mot-clé simple courant ou cliquez sur NOUVEAU CONCEPT pour
+      entrer le nom d'un concept non encore existant"""
+
+  def valid_nom_concept_co(self,event=None):
+      """
+      Lit le nom donné par l'utilisateur au concept de type CO qui doit être
+      la valeur du MCS courant et stocke cette valeur
+      """
+      nom_concept = self.entry_co.get()
+      self.node.item.set_valeur_co(nom_concept)
+      if self.node.item.get_position()=='global':
+          self.node.etape.verif_all()
+      elif self.node.item.get_position()=='global_jdc':
+          self.node.racine.verif_all()
+      else :
+          self.node.parent.verif()
+      if self.node.item.isvalid():
+          self.node.parent.select()
+      self.node.update()
+
+  def ask_new_concept(self):
+      """
+      Crée une entry dans le panneau d'un MCS qui attend un concept OU un CO() afin de
+      permettre à l'utilisateur de donner le nom du nouveau concept
+      """
+      new_concept = self.b_co.getcurselection()
+      if new_concept == 'OUI':
+          self.label_co.place(relx=0.05,rely=0.7)
+          self.entry_co.place(relx=0.45,rely=0.7,relwidth=0.25)
+          self.l_resu.place_forget()
+          self.label_valeur.place_forget()
+          self.entry_co.focus()
+      elif new_concept == 'NON':
+          self.label_co.place_forget()
+          self.entry_co.place_forget()
+          self.l_resu.place(relx=0.05,rely=0.7)
+          self.label_valeur.place(relx=0.45,rely=0.7)
+          
+  def display_valeur(self):
+      """
+      Affiche la valeur de l'objet pointé par self
+      """
+      valeur = self.node.item.get_valeur()
+      if valeur == None : return # pas de valeur à afficher ...
+      # il faut configurer le bouton si la valeur est un objet CO
+      # sinon afficher le nom du concept dans self.valeur_choisie
+      if valeur.__class__.__name__ != 'CO':
+          self.valeur_choisie.set(valeur.nom)
+      else:
+          self.b_co.invoke('OUI')
+          self.entry_co.insert(0,valeur.nom)
+
+
+class UNIQUE_BASE_Panel(UNIQUE_Panel):
+  """
+  Classe servant à définir le panneau associé aux mots-clés simples qui attendent
+  une valeur d'un type de base (entier, réel ou string).
+  """
+  def makeValeurPage(self,page):
+      """
+      Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
+      de base cad entier, réel, string ou complexe
+      """
+      # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
+      # et de la liste des SD du bon type (constituant la liste des choix)
+      bulle_aide=self.get_bulle_aide()
+      aide=self.get_aide()
+      aide= justify_text(texte=aide)
+      liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
+      # Remplissage du panneau
+      self.frame_valeur = Frame(page)
+      self.frame_valeur.pack(fill='both',expand=1)
+      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      self.label = Label(self.frame_valeur,text='Valeur :')
+      self.label.place(relx=0.1,rely=0.5)
+      self.entry = Entry(self.frame_valeur,relief='sunken')
+      self.entry.place(relx=0.28,rely=0.5,relwidth=0.6)
+      self.entry.bind("<Return>",lambda e,c=self.valid_valeur:c())
+      self.entry.focus()
+      # aide associée au panneau
+      self.aide = Label(self.frame_valeur, text = aide)
+      self.aide.place(relx=0.5,rely=0.7,anchor='n')
+      # affichage de la valeur du MCS
+      self.display_valeur()
+
+  def get_aide(self):
+      """
+      Retourne la phrase d'aide indiquant de quel type doit être la valeur
+      du mot-clé simple fournie par l'utilisateur
+      """
+      mc = self.node.item.get_definition()
+      d_aides = { 'TXM' : "Une chaîne de caractères est attendue",
+                  'R'   : "Un réel est attendu",
+                  'I'   : "Un entier est attendu"}
+      type = mc.type[0]
+      return d_aides.get(type,"Type de base inconnu")
+
+  def get_bulle_aide(self):
+      """
+      Retourne la bulle d'aide associée au panneau et affichée par clic droit
+      """
+      return """Saisissez la valeur que vous voulez affecter au mot-clé simple
+      dans la zone de saisie et pressez <Return>"""
+      
+  def display_valeur(self):
+      """
+      Affiche la valeur de l'objet pointé par self
+      """
+      valeur = self.node.item.get_valeur()
+      if valeur == None : return # pas de valeur à afficher ...
+      self.entry.delete(0,END)
+      self.entry.insert(0,valeur)
+      
+class UNIQUE_COMP_Panel(UNIQUE_Panel):
+  """
+  Classe servant à définir le panneau associé aux mots-clés simples
+  qui attendent une valeur de type complexe
+  """
+  def makeValeurPage(self,page):
+      """
+      Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
+      de base cad entier, réel, string ou complexe
+      """
+      # Récupération de l'aide associée au panneau et de l'aide destinée à l'utilisateur
+      bulle_aide=self.get_bulle_aide()
+      aide=self.get_aide()
+      aide= justify_text(texte=aide)
+      # Remplissage du panneau
+      self.frame_valeur = Frame(page)
+      self.frame_valeur.pack(fill='both',expand=1)
+      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      self.label = Label(self.frame_valeur,text='Valeur :')
+      self.label.place(relx=0.1,rely=0.5)
+      self.typ_cplx=StringVar()
+      self.typ_cplx.set('RI')
+      rb1 = Radiobutton(self.frame_valeur, text='RI',variable=self.typ_cplx,value='RI')
+      rb2 = Radiobutton(self.frame_valeur, text='MP',variable=self.typ_cplx,value='MP')
+      self.entry1 = Pmw.EntryField(self.frame_valeur,validate='real')
+      self.entry2 = Pmw.EntryField(self.frame_valeur,validate='real')
+      rb1.place(relx=0.05,rely = 0.4)
+      rb2.place(relx=0.05,rely = 0.6)
+      self.entry1.component('entry').bind("<Return>",lambda e,s=self:s.entry2.component('entry').focus())
+      self.entry2.component('entry').bind("<Return>",lambda e,c=self.valid_valeur:c())
+      self.entry1.place(relx=0.27,rely = 0.5,relwidth=0.35)
+      self.entry2.place(relx=0.65,rely = 0.5,relwidth=0.35)
+      self.entry1.focus()
+      self.aide = Label(self.frame_valeur, text = aide)
+      self.aide.place(relx=0.5,rely=0.7,anchor='n')
+
+  def get_bulle_aide(self):
+      """
+      Retourne la bulle d'aide du panneau
+      """
+      return """-Choisissez votre format de saisie du complexe :
+      \t 'RI' = parties réelle et imaginaire
+      \t 'MP' = module/phase (en degrés)
+      - Saisissez ensuite dans les deux zones de saisie les deux nombres attendus"""
+
+  def get_aide(self):
+      """
+      Retourne la phrase d'aide décrivant le type de la valeur que peut prendre
+      le mot-clé simple courant
+      """
+      return 'Un complexe est attendu'
+
+  def get_valeur(self):
+      """
+      Retourne le complexe saisi par l'utilisateur
+      """
+      l=[]
+      l.append(self.typ_cplx.get())
+      l.append(string.atof(self.entry1.get()))
+      l.append(string.atof(self.entry2.get()))
+      return `tuple(l)`
+
+  def erase_valeur(self):
+      """
+      Efface les entries de saisie
+      """
+      self.typ_cplx = 'RI'
+      self.entry1.delete(0,END)
+      self.entry2.delete(0,END)
+      
+class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
+  panel = newSIMPPanel
+
+  def init(self) :
+      self.expandable = 0
+      self.affect_panel()
+
+  def affect_panel(self):
+      """
+      Cette méthode attribue le panel à l'objet pointé par self en fonction de la
+      nature de la valeur demandée pour cet objet
+      """
+      if self.wait_shell():
+          # l'objet attend un shell
+          self.panel = SHELLPanel
+      elif self.wait_into():
+          # l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs
+          min,max = self.GetMinMax()
+          if max != 1 and ((min != 0 and min != max) or (min == 0)):
+             # l'objet attend une liste de valeurs
+             self.panel = PLUSIEURS_INTO_Panel
+          else:
+             # l'objet n'attend qu'une seule valeur
+             self.panel = UNIQUE_INTO_Panel
+      else:
+          # l'objet prend une ou des valeurs à priori quelconques
+          min,max = self.GetMinMax()
+          if max != 1 :
+              # on attend une liste de valeurs mais de quel type ?
+              if self.wait_assd():
+                  # on attend une liste de SD
+                  self.panel = PLUSIEURS_ASSD_Panel
+              else:
+                  # on attend une liste de valeurs de types debase (entiers, réels,...)
+                  self.panel = PLUSIEURS_BASE_Panel
+          else:
+              # on n'attend qu'une seule valeur mais de quel type ?
+              if self.wait_co():
+                  # on attend une SD ou un objet de la classe CO (qui n'existe pas encore)
+                  self.panel = UNIQUE_SDCO_Panel
+              elif self.wait_assd():
+                  # on attend une SD
+                  self.panel = UNIQUE_ASSD_Panel
+              else:
+                  # on attend une valeur d'un type de base (entier,réel,...)
+                  if self.wait_complex():
+                      # on attend un complexe
+                      self.panel = UNIQUE_COMP_Panel
+                  else:
+                      # on attend un entier, un réel ou une string
+                      self.panel = UNIQUE_BASE_Panel
+
+      
+  def SetText(self, text):
+    try:
+      value = eval(text)
+      self.object.setval(value)
+    except:
+      pass
+
+  def GetIconName(self):
+    if self.isvalid():
+      return "ast-green-ball"
+    elif self.object.isoblig():
+      return "ast-red-ball"
+    else:
+      return "ast-yel-ball"
+
+  def GetText(self):
+    """
+    Classe SIMPTreeItem
+    Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
+    pointé par self 
+    """
+    return self.object.GetText()
+
+  def wait_co(self):
+      """
+      Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un objet de type ASSD qui n'existe pas encore (type CO()),
+      0 sinon
+      """
+      return self.object.wait_co()
+
+  def wait_geom(self):
+      """
+      Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un objet GEOM, 0 sinon
+      """
+      return self.object.wait_geom()
+    
+  def wait_complex(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un complexe, 0 sinon """
+      if 'C' in self.object.definition.type:
+          return 1
+      else:
+          return 0
+
+  def wait_reel(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un réel, 0 sinon """
+      if 'R' in self.object.definition.type:
+          return 1
+      else:
+          return 0
+        
+  def wait_shell(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un shell, 0 sinon """
+      if 'shell' in self.object.definition.type:
+          return 1
+      else:
+          return 0
+
+  def wait_into(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      prend ses valeurs dans un ensemble discret (into), 0 sinon """
+      if self.object.definition.into != None :
+          return 1
+      else:
+          return 0
+
+  def wait_assd(self):
+      """Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un objet de type ASSD ou dérivé, 0 sinon """
+      return self.object.wait_assd()
+    
+  def getval(self):
+      return self.object.getval()
+    
+  def GetMinMax(self):
+      """ Retourne les valeurs min et max de la définition de object """
+      return self.object.get_min_max()
+\r
+  def GetMultiplicite(self):\r
+      """ A préciser.\r
+          Retourne la multiplicité des valeurs affectées à l'objet\r
+          représenté par l'item. Pour le moment retourne invariablement 1.\r
+      """\r
+      return 1\r
+\r
+  def GetType(self):\r
+      """ Retourne le type de valeur attendu par l'objet représenté par l'item.\r
+      """\r
+      return self.object.get_type()\r
+\r
+  def GetIntervalle(self):\r
+      """ Retourne le domaine de valeur attendu par l'objet représenté par l'item.\r
+      """\r
+      return self.object.getintervalle()\r
+\r
+  def IsInIntervalle(self,valeur):\r
+      """ Retourne 1 si la valeur est dans l'intervalle permis par\r
+          l'objet représenté par l'item.\r
+      """\r
+      return self.object.isinintervalle(valeur)\r
+
+  def set_valeur_co(self,nom_co):
+      """
+      Affecte au MCS pointé par self l'objet de type CO et de nom nom_co
+      """
+      self.object.set_valeur_co(nom_co)
+      
+  def get_sd_avant_du_bon_type(self):
+      """
+      Retourne la liste des noms des SD présentes avant l'étape qui contient
+      le MCS pointé par self et du type requis par ce MCS
+      """
+      return self.object.jdc.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type)
+    
+  def GetListeValeurs(self) :
+      """ Retourne la liste des valeurs de object """
+      return self.object.get_liste_valeurs()
+    
+  def verif(self):
+      pass
+
+  def isvalid(self):
+    return self.object.isvalid()
+
+  def eval_valeur(self,valeur):
+      """ Lance l'interprétation de 'valeur' (chaîne de caractères) comme valeur
+      de l'objet pointé par self :
+        - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
+        - retourne 'valeur' (chaîne de caractères) sinon """
+      return self.object.eval_valeur(valeur)
+
+import Accas
+treeitem = SIMPTreeItem
+objet = Accas.MCSIMP
+
diff --git a/Editeur/configuration.py b/Editeur/configuration.py
new file mode 100644 (file)
index 0000000..7a191d5
--- /dev/null
@@ -0,0 +1,209 @@
+"""
+    Ce module sert pour charger les paramètres de configuration d'EFICAS
+"""
+# Modules Python
+import os,sys,string,types
+import traceback
+try:
+  from tkMessageBox import showinfo,askyesno,showerror,askretrycancel
+except:
+  pass
+
+# Modules Eficas
+import utils
+
+class CONFIG:
+  def __init__(self,appli,rep_ini):
+      # si appli == None on est en mode commande (hors EFICAS)
+      self.appli = appli  
+      if self.appli:self.parent=appli.top
+      else:self.parent=None
+      self.rep_ini = rep_ini
+      self.rep_user = utils.get_rep_user()
+      self.lecture_parametres()
+
+  def lecture_parametres(self):
+      """
+         Cette méthode teste l'existence du fichier editeur.ini au bon endroit et lance
+         son interprétation
+      """
+      fic_ini = os.path.join(self.rep_ini,'editeur.ini')
+      if not os.path.exists(fic_ini) or not os.path.isfile(fic_ini):
+        if self.appli :
+          showerror("Erreur","Impossible de trouver le fichier %s ! \n Prévenez la maintenance ..." %fic_ini)
+        else:
+          print "Impossible de trouver le fichier %s ! \n Prévenez la maintenance ..." %fic_ini
+        sys.exit(0)
+      self.fic_ini = fic_ini
+      self.init_liste_param()
+      self.lecture_fichier_ini_standard()
+      self.lecture_fichier_ini_utilisateur()
+
+  def lecture_fichier_ini_standard(self):
+      """
+      Relit les paramètres du fichier eficas.ini
+      """
+      txt = utils.read_file(self.fic_ini)
+      d={}
+      try:
+         exec txt in d
+      except:
+         l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+         showerror("Erreur","Une erreur s'est produite dans la relecture du fichier de configuration : "
+                       + self.fic_ini+"\n"+string.join(l[2:]))
+         print "Erreur à la lecture du fichier de configuration : %s" % self.fic_ini 
+         print string.join(l[2:])
+         sys.exit()
+      for attr in self.l_nom_param:
+          nom_attr,statut = attr
+          valeur = d.get(nom_attr,None)
+          if not valeur and statut=='o':
+              showerror("Erreur","Une erreur s'est produite dans la relecture du fichier de configuration : "
+                       + self.fic_ini+"\n EFICAS va vous demander les nouveaux paramètres")
+              return
+          setattr(self,nom_attr,valeur)
+      self.init_liste_param()
+
+  def lecture_fichier_ini_utilisateur(self):
+      """
+      Surcharge les paramètres standards par les paramètres utilisateur s'ils existent
+      """
+      self.fic_ini_utilisateur = os.path.join(self.rep_user,'eficas.ini')
+      if not os.path.isfile(self.fic_ini_utilisateur):
+          # pas de fichier de configuration utilisateur --> on passe
+          return
+      txt = utils.read_file(self.fic_ini_utilisateur)
+      d={}
+      try:
+          exec txt in d
+      except :
+          showinfo("Erreur","Impossible d'interpréter le fichier de configuration utilisateur : %s" %self.fic_ini_utilisateur)
+          traceback.print_exc()
+          return
+      for attr in self.l_nom_param:
+          nom_attr,statut = attr
+          valeur = d.get(nom_attr,None)
+          if valeur :
+              setattr(self,nom_attr,valeur)
+      self.init_liste_param()
+
+  def init_liste_param(self):
+      """
+      Génère la liste des paramètres
+      l_param est une liste de tuples où chaque tuple est de la forme :
+      (label,nature,nom_var,defaut)
+      """
+      self.l_param=[]
+      # répertoire de travail
+      if hasattr(self,'rep_travail'):
+          self.l_param.append(("Répertoire de travail",'rep','rep_travail',self.rep_travail))
+      else:
+          self.l_param.append(("Répertoire de travail",'rep','rep_travail',
+                               os.path.join(self.rep_user,'uaster','tmp_eficas')))
+      # répertoire des catalogues matériaux
+      if hasattr(self,'rep_mat'):
+          self.l_param.append(("Répertoire materiaux",'rep','rep_mat',self.rep_mat))
+      else:
+          self.l_param.append(("Répertoire materiaux",'rep','rep_mat','/aster/v4/materiau'))
+      # chemin d'accès exécutable acrobat reader
+      if hasattr(self,'exec_acrobat'):
+          self.l_param.append(("Ligne de commande Acrobat Reader",'file','exec_acrobat',self.exec_acrobat))
+      else:
+          self.l_param.append(("Ligne de commande Acrobat Reader",'file','exec_acrobat',self.rep_user))
+      # répertoire contenant la doc Aster
+      if hasattr(self,'path_doc'):
+          self.l_param.append(("Chemin d'accès à la doc Aster",'rep','path_doc',self.path_doc))
+      else:
+          self.l_param.append(("Chemin d'accès à la doc Aster",'rep','path_doc',self.rep_user))
+      # chemin(s) d'accès au(x) catalogue(s)
+      if hasattr(self,'catalogues'):
+          self.l_param.append(("Versions du code ",'cata','catalogues',self.catalogues))
+      else:
+          self.l_param.append(("Versions du code ",'cata','catalogues',os.path.join(self.rep_ini,'..','Cata/cata.py')))
+      # attribut développeur
+      if hasattr(self,'isdeveloppeur'):
+          self.l_param.append(("Etes-vous développeur ?",'YesNo','isdeveloppeur',self.isdeveloppeur))
+      else:
+          self.l_param.append(("Etes-vous développeur ?",'YesNo','isdeveloppeur','NON'))
+      # répertoire où sont contenus les catalogues développeurs
+      if hasattr(self,'path_cata_dev') and hasattr(self,'isdeveloppeur') and self.isdeveloppeur == 'OUI':
+          self.l_param.append(("Chemin d'accès aux catalogues développeurs",'rep','path_cata_dev',self.path_cata_dev))
+      else:
+          self.l_param.append(("Chemin d'accès aux catalogues développeurs",'rep','path_cata_dev',
+                               os.path.join(self.rep_user,'cata')))
+      self.l_param = tuple(self.l_param)
+      self.l_nom_param=[]
+      statut='o'
+      for tup in self.l_param:
+          #self.l_nom_param.append((tup[2],statut))
+          if tup[1] == 'YesNo':
+              # les paramètres suivant tup sont facultatifs ...
+              statut='f'
+          self.l_nom_param.append((tup[2],statut))
+
+  def affichage_fichier_ini(self):
+      """
+      Affichage des valeurs des paramètres relus par Eficas
+      """
+      import widgets
+      result = widgets.Formulaire(self.parent,
+                                  obj_pere = self,
+                                  titre = "Paramètres nécessaires à la configuration d'EFICAS",
+                                  texte = "Voici les paramètres que requiert Eficas",
+                                  items = self.l_param,
+                                  mode='display',
+                                  commande=('Modifier',self.creation_fichier_ini_si_possible))
+      if result.resultat :
+          print 'on sauvegarde les nouveaux paramètres :',result.resultat
+          self.save_param_ini(result.resultat)
+
+  def save_param_ini(self,dico):
+      """
+      Sauvegarde les nouveaux paramètres dans le fichier de configuration utilisateur
+      """
+      f=open(self.fic_ini_utilisateur,'w+')
+      for k,v in dico.items():
+         if k == 'catalogues' :
+            f.write(k + '\t=\t' + str(v) + '\n')
+         else:
+            f.write(k + '\t=\t"' + str(v) + '"\n')
+      f.close()
+      self.lecture_fichier_ini_utilisateur()
+
+  def creation_fichier_ini_si_possible(self):
+      return self.creation_fichier_ini(mode='ignorer_annuler')
+
+  def creation_fichier_ini(self,mode='considerer_annuler'):
+      """
+      Récupération des valeurs des paramétres requis pour la création du fichier
+      eficas.ini
+      """
+      import widgets
+      texte = "EFICAS a besoin de certains renseignements pour se configurer\n"+\
+              "Veuillez remplir TOUS les champs ci-dessous et appuyer sur 'Valider'\n"+\
+              "Si vous annulez, EFICAS ne se lancera pas !!"
+      items = self.l_param
+      result = widgets.Formulaire(self.parent,
+                                  obj_pere = self,
+                                  titre = "Saisie des données indispensables à la configuration d'EFICAS",
+                                  texte = texte,
+                                  items = items,
+                                  mode='query')
+      if not result.resultat :
+          if mode == 'considerer_annuler':
+             test = askretrycancel("Erreur","Données incorrectes !")
+             if not test:
+                 # XXX On sort d'EFICAS, je suppose
+                 self.appli.exitEFICAS()
+             else:
+                 self.creation_fichier_ini()
+          else:
+              return None
+      else :
+          self.save_param_ini(result.resultat)
+          return result.resultat
+
+def make_config(appli,rep):
+    return CONFIG(appli,rep)
+
+
diff --git a/Editeur/definition_cata.py b/Editeur/definition_cata.py
new file mode 100644 (file)
index 0000000..d484298
--- /dev/null
@@ -0,0 +1,449 @@
+#@ MODIF definition_cata Accas  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# Modules Python
+import types
+
+# Modules Eficas
+import Accas
+from Noyau.N_CR import CR
+
+class CATALOGUE:
+    def __init__(self,modules_cata):
+        self.modules_cata = modules_cata # tuple de modules...
+        self.cr = CR()
+        self.state='undetermined'
+        self.entites_attributs = {}
+        self.entites_fils = []
+        self.build_entites_attributs()
+        self.build_entites_fils()
+
+    def build_entites_attributs(self):
+        pass
+        
+    def build_entites_fils(self):
+        niv_types = Accas.NIVEAU(nom="types",label="Liste des types")
+        niv_commandes = Accas.NIVEAU(nom="commandes",label="Liste des commandes")
+        self.entites_fils.append(make_commande_cata(niv_types,self))
+        self.entites_fils.append(make_commande_cata(niv_commandes,self))
+        for module_cata in self.modules_cata:
+            for e in dir(module_cata):
+                obj = getattr(module_cata,e)
+                if isCMD(obj):
+                    self.entites_fils[1].register(make_commande_cata(obj,self.entites_fils[1]))
+                elif type(obj) == types.ClassType:
+                    if issubclass(obj,Accas.ASSD):
+                        self.entites_fils[0].register(TYPE_CATA(obj))
+
+    def init_modif(self):
+        self.state = 'modified'
+        
+    def report(self):
+      """ Classe CATALOGUE
+          Methode pour generation d un rapport de validite
+      """
+      self.cr.purge()
+      self.cr.debut="DEBUT CR validation : " 
+      self.cr.fin="FIN CR validation :"
+      self.state = 'modified'
+      self.isvalid(cr='oui')
+      for fils in self.entites_fils[1].entites :
+        self.cr.add(fils.report())
+      return self.cr
+
+    def isvalid(self,cr='non'):
+        if self.state != 'unchanged':
+            valid=1
+            for fils in self.entites_fils[1].entites_fils:
+                if not fils.isvalid():
+                    valid=0
+                    break
+            self.valid = valid
+            self.state='unchanged'
+        return self.valid
+    
+def make_commande_cata(objet,pere):
+    if isinstance(objet,Accas.OPER):
+        return OPER_CATA(objet,pere,objet.nom)
+    elif isinstance(objet,Accas.PROC):
+        return PROC_CATA(objet,pere,objet.nom)
+    elif isinstance(objet,Accas.MACRO):
+        return MACRO_CATA(objet,pere,objet.nom)
+    elif isinstance(objet,Accas.FORM):
+        return MACRO_CATA(objet,pere,objet.nom)
+    elif isinstance(objet,Accas.NIVEAU):
+        return NIVEAU_CATA(objet,pere,objet.nom)
+    else:
+        print "Erreur dans make_commande_cata : on cherche à évaluer un objet non référencé ",objet
+
+def make_mc_cata(objet,pere,nom=''):
+    if isinstance(objet,Accas.BLOC):
+        return BLOC_CATA(objet,pere,nom)
+    elif isinstance(objet,Accas.FACT):
+        return FACT_CATA(objet,pere,nom)
+    elif isinstance(objet,Accas.SIMP):
+        return SIMP_CATA(objet,pere,nom)
+    else:
+        print "Erreur dans make_mc_cata : on cherche à évaluer un objet non référencé ",objet
+
+class TYPE_CATA:
+    def __init__(self,objet):
+        self.objet = objet
+        self.nom = objet.__name__
+
+    def isvalid(self,cr='non'):
+        return 1
+
+    def get_valeur_attribut(self,nom_attr):
+        if nom_attr == 'nom':return self.nom
+        return None
+   
+class OBJET_CATA:
+    attributs=[]
+    attributs_defauts={}
+    def __init__(self,objet,pere,nom):
+        self.objet = objet
+        self.nom = nom
+        self.pere = pere
+        self.cr = CR()
+        self.state='undetermined'
+        self.entites_fils = []
+        self.entites_attributs = {}
+        self.build_entites_attributs()
+        self.build_entites_fils()
+
+    def __str__(self):
+        s=''
+        s=self.__class__.__name__+' : '+self.nom
+        return s
+    
+    def build_entites_attributs(self):        
+        for attribut in self.attributs:
+            if hasattr(self.objet,attribut):
+                self.entites_attributs[attribut]=ATTR_CATA(attribut,getattr(self.objet,attribut))
+            else:
+                if self.attributs_defauts.has_key(attribut):
+                    self.entites_attributs[attribut]=ATTR_CATA(attribut,self.attributs_defauts[attribut])
+                else:
+                    self.entites_attributs[attribut]=ATTR_CATA(attribut,None)
+
+    def build_entites_fils(self):
+        for k,v in self.objet.entites.items():
+            self.entites_fils.append(make_mc_cata(v,self,nom=k))
+
+    def get_valeur_attribut(self,nom_attr):
+        if nom_attr in self.entites_attributs.keys():
+            return self.entites_attributs[nom_attr].valeur
+        elif nom_attr in self.attributs_defauts.keys():
+            return self.attributs_defauts[nom_attr]
+        elif nom_attr == 'domaine_validité':
+            if self.entites_attributs['into'].valeur != None :
+                return 'discret'
+            else:
+                return 'continu'
+
+    def isvalid(self,cr='non'):
+        if self.state =='unchanged':
+            return self.valid
+        else:
+            valid = 1
+            if hasattr(self,'valid'):
+                old_valid = self.valid
+            else:
+                old_valid = None
+            # on teste self lui-meme
+            if self.nom == '' or self.nom == None : valid=0
+            # on teste les attributs
+            for attribut in self.entites_attributs.values():
+                if not attribut.isvalid() : valid =0
+                break
+            # on teste les fils
+            for fils in self.entites_fils:
+                if not fils.isvalid(): valid = 0
+                break
+        self.valid = valid
+        self.state = 'unchanged'
+        if old_valid:
+            if old_valid != self.valid : self.init_modif_up()
+        return self.valid
+
+    def init_modif_up(self):
+        self.pere.state='modified'
+      
+    def report(self):
+        self.cr.purge()
+        self.cr.debut="Debut "+self.__class__.__name__+' : '+self.nom
+        self.cr.fin = "Fin "+self.__class__.__name__+' : '+self.nom
+        self.isvalid(cr='oui')
+        for attribut in self.entites_attributs.values():
+            self.cr.add(attribut.report())
+        for fils in self.entites_fils :
+            self.cr.add(fils.report())
+        return self.cr
+        
+    def set_valeur_attribut(self,nom_attr,valeur):
+        """
+        Affecte la valeur 'valeur' à l'attribut de nom 'nom-attr'
+        """
+        # il faudra être prudent sur les changements de nom : interdire de changer
+        # le nom d'un mot-clé qui serait utilisé dans une règle ???
+        self.entites_attributs[nom_attr].valeur = valeur
+        
+    def addentite(self,name,pos):
+        """
+        Permet d'ajouter un nouveau fils a self
+        """
+        self.init_modif()
+        if name == 'new_simp':
+            objet = Accas.SIMP(typ=('bidon',))
+        objet_cata = make_mc_cata(objet,self)
+        self.entites_fils.insert(pos,objet_cata)
+        return objet_cata
+
+    def init_modif(self):
+        self.state = 'modified'
+        if hasattr(self,'pere'):
+            self.pere.init_modif()
+
+    def verif_nom(self,cr='non'):
+        """
+        Méthode appelée par EFICAS et ACCAS
+        Booléenne : retourne 1 si l'attribut nom est valide, 0 sinon
+        """
+        if self.entites_attributs['nom'].valeur == '':
+            if cr == 'oui' : self.cr.fatal("L'objet de type %s n'est pas nommé" %self.__class__.__name__)
+            return 0
+        return 1
+    
+    def verif_defaut(self,cr='non'):
+        """
+        Méthode de vérification de validité du défaut
+        """
+        defaut = self.get_valeur_attribut('defaut')
+        if self.get_valeur_attribut('domaine_validite') == 'discret' :
+            if defaut not in self.get_valeur_attribut('into'):
+                if cr == 'oui' : self.cr.fatal("La valeur %s n'est pas autorisée" %str(defaut))
+                return 0
+            return 1
+        else:
+            if defaut == None : return 1
+            typ = self.get_valeur_attribut('type')
+            # on attend un TXM ?
+            if 'TXM' in typ :
+                if type(defaut) == types.StringType : return 1
+            val_min = self.get_valeur_attribut('val_min')
+            val_max = self.get_valeur_attribut('val_max')
+            # on attend un reel ?
+            if 'R' in typ :
+                if type(defaut) == types.StringType:
+                    try :
+                        nb = string.atof(defaut)
+                    except:
+                        nb=None
+                else:
+                    nb = defaut
+                if nb != None :
+                    test = 1
+                    if val_min != '**' : test = (nb >= val_min)
+                    if val_max != '**' : test = test*(nb <= val_max)
+                    if test : return 1
+            # on attend un entier ?
+            if 'I' in typ :
+                if type(defaut)==types.StringType:
+                    try:
+                        nb = string.atoi(defaut)
+                    except:
+                        pass
+                else:
+                    nb = defaut
+                if nb != None :
+                    test = 1
+                    if val_min != '**' : test = (nb >= val_min)
+                    if val_max != '**' : test = test*(nb <= val_max)
+                    if test : return 1
+            # si on passe par là, c'est que l'on n'a pas su évaluer defaut
+            if cr == 'oui' : self.cr.fatal("La valeur %s n'est pas une valeur permise" %str(defaut))
+            return 0
+
+    def verif_val_min(self,cr='non'):
+        """
+        Méthode de vérification de val_min.
+        Booléenne : retourne 1 si val_min est valide, 0 sinon
+        """
+        val_min = self.get_valeur_attribut('val_min')
+        if not val_min :
+            if cr == 'oui' : self.cr.fatal('val_min ne peut valoir None')
+            return 0
+        if val_min == '**': return 1
+        # val_min doit à ce stade être :
+        # - soit un entier ou un réel
+        # - soit une chaîne de caractères représentant un entier ou un réel (provient d'EFICAS)
+        if type(val_min) == types.StringType :
+            try :
+                val_min = string.atoi(val_min)
+            except:
+                try:
+                    val_min = string.atof(val_min)
+                except:
+                    if cr == 'oui' : self.cr.fatal("%s n'est ni un entier ni un réel" %str(val_min))
+                    return 0
+        # A ce stade, val_min doit être un entier ou un réel : on vérifie ...
+        if type(val_min) not in (types.IntType,types.FloatType) :
+            if cr == 'oui' : self.cr.fatal("%s n'est pas d'un type autorisé" %str(val_min))
+            return 0
+        # A ce stade valeur est un entier ou un réel : on peut comparer à val_max
+        val_max = self.get_valeur_attribut('val_max')
+        if val_max == '**' or val_min < val_max : return 1
+        # erreur : val_min est supérieur à val_max !!!
+        if cr == 'oui' : self.cr.fatal("%s n'est pas inférieur à %s" %(str(val_min),str(val_max)))
+        return 0
+
+    def verif_val_max(self,cr='non'):
+        """
+        Méthode de vérification de val_max.
+        Booléenne : retourne 1 si val_max est valide, 0 sinon
+        """
+        val_max = self.get_valeur_attribut('val_max')
+        if not val_max :
+            if cr == 'oui' : self.cr.fatal('val_max ne peut valoir None')
+            return 0
+        if val_max == '**': return 1
+        # val_max doit à ce stade être :
+        # - soit un entier ou un réel
+        # - soit une chaîne de caractères représentant un entier ou un réel (provient d'EFICAS)
+        if type(val_max) == types.StringType :
+            try :
+                val_max = string.atoi(val_max)
+            except:
+                try:
+                    val_max = string.atof(val_max)
+                except:
+                    if cr == 'oui' : self.cr.fatal("%s n'est ni un entier ni un réel" %str(val_max))
+                    return 0
+        # A ce stade, val_max doit être un entier ou un réel : on vérifie ...
+        if type(val_max) not in (types.IntType,types.FloatType) :
+            if cr == 'oui' : self.cr.fatal("%s n'est pas d'un type autorisé" %str(val_max))
+            return 0
+        # A ce stade valeur est un entier ou un réel : on peut comparer à val_max
+        val_min = self.get_valeur_attribut('val_min')
+        if val_min == '**' or val_min < val_max : return 1
+        # erreur : val_min est supérieur à val_max !!!
+        if cr == 'oui' : self.cr.fatal("%s n'est pas supérieur à %s" %(str(val_max),str(val_min)))
+        return 0
+    
+class OPER_CATA(OBJET_CATA):
+    attributs = ['ang','docu','fr','niveau','nom','op','op_init','reentrant','regles','repetable','sd_prod']
+  
+class PROC_CATA(OBJET_CATA):
+    attributs = ['ang','docu','fr','niveau','nom','op','op_init','regles','repetable']
+
+class MACRO_CATA(OBJET_CATA):
+    attributs = ['ang','docu','fr','niveau','nom','op','op_init','reentrant','regles','repetable','sd_prod']
+    
+class BLOC_CATA(OBJET_CATA):
+    attributs = ['ang','condition','docu','fr','nom','regles']
+
+class FACT_CATA(OBJET_CATA):
+    attributs=['ang','defaut','docu','fr','max','min','nom','regles','statut']
+
+class SIMP_CATA(OBJET_CATA):
+    attributs=['ang','defaut','docu','fr','homo','into','max','min','nom','position','statut','type','val_min','val_max']
+    attributs_defauts={'ang':'','defaut':None,'fr':'','homo':1,'into':None,'max':1,'min':1,'nom' : '','position':'local',
+                       'regles':None,'statut':'f','type':None,'val_min':'**','val_max':'**','docu':''}
+                
+    def build_entites_fils(self):
+        pass
+
+    def isvalid(self,cr='non'):
+        """
+        Mde appelpar l'externe (EFICAS et ACCAS).
+        Boolne : retourne 1 si l'objet est valide, 0 sinon
+        """
+        if self.state == 'unchanged':
+            return self.valid
+        else:
+            valid = 1
+            valid = valid*self.verif_nom(cr=cr)
+            valid = valid*self.verif_defaut(cr=cr)
+            valid = valid*self.verif_val_min(cr=cr)*self.verif_val_max(cr=cr)
+            if hasattr(self,'valid'):
+                old_valid = self.valid
+            else:
+                old_valid = None
+            self.valid = valid
+            self.state='unchanged'
+            if old_valid :
+                if old_valid != self.valid : self.init_modif_up()
+            return self.valid
+
+class NIVEAU_CATA(OBJET_CATA):
+  def __init__(self,objet,pere,nom):
+    self.pere = pere
+    self.nom = nom
+    self.state = 'undetermined'
+    self.cr = CR()
+    self.objet = objet
+    self.entites_fils=[]
+    self.entites_attributs = {}
+
+  def register(self,fils):
+    """ 
+        Enregistre la commande 굡pe :
+         - si editmode = 0 : on est en mode relecture d'un fichier de commandes
+         auquel cas on ajoute etape ࡬a fin de la liste self.etapes
+         - si editmode = 1 : on est en mode ajout d'굡pe depuis eficas auquel cas
+         cette mode ne fait rien, c'est addentité enregistre etape à¡¬a bonne place
+         dans self.etapes 
+    """
+    self.entites_fils.append(fils)
+
+  def unregister(self,etape):
+    self.entites_fils.remove(etape)
+
+  def isvalid(self,cr='non'):
+    """ Mode boolne qui retourne 0 si le niveau est invalide, 1 sinon """
+    if self.state == 'unchanged':
+        return self.valid
+    else:
+        valid = 1
+        if len(self.entites_fils) == 0:
+            #valid = self.Accas.valide_vide
+            valid = 1
+        else:
+            for commande in self.entites_fils :
+                if hasattr(commande,'isvalid'):
+                    if not commande.isvalid() :
+                        valid = 0
+                        break
+                else:
+                    print str(commande)," n'a pas de methode isvalid"
+        if hasattr(self,'valid'):
+            old_valid = self.valid
+        else:
+            old_valid = None
+        self.valid = valid
+        self.state='unchanged'
+        if old_valid:
+            if old_valid != self.valid : self.init_modif_up()
+        return self.valid
+            
+
+class ATTR_CATA(OBJET_CATA):
+    def __init__(self,nom,valeur=None):
+        self.nom = nom
+        self.valeur = valeur
+        self.cr = CR()
+        self.state='undetermined'
+        self.entites_attributs={}
+        self.entites_fils=()
+
+    def isvalid(self,cr='non'):
+        return 1
+
+def isCMD(cmd):
+   return isinstance(cmd,Accas.OPER) or isinstance(cmd,Accas.PROC) or isinstance(cmd,Accas.MACRO) or isinstance(cmd,Accas.FORM)
+
diff --git a/Editeur/eficas.py b/Editeur/eficas.py
new file mode 100644 (file)
index 0000000..c1d683c
--- /dev/null
@@ -0,0 +1,109 @@
+"""
+    Ce module contient la classe EFICAS qui est l'application
+    proprement dite. Elle est dérivée de la classe APPLI
+"""
+# Modules Python
+import string
+from Tkinter import Label
+import Pmw
+from tkCommonDialog import Dialog
+from tkFileDialog import *
+from tkMessageBox import askyesno,showerror
+import traceback
+
+# Modules Eficas
+import appli
+from widgets import Fenetre
+
+class EFICAS(appli.APPLI):
+
+  extensions=['readercata','bureau','browser','options']
+
+  def get_texte_infos(self):
+     texte=appli.APPLI.get_texte_infos(self)
+     texte = texte + 'Catalogue utilisé : %s\n' %  self.bureau.fic_cata
+     return texte
+
+  def exitEFICAS(self):
+     self.bureau.exitEFICAS()
+
+  def browse(self,result):
+      if result == 'Browse':
+        self.ulfile = askopenfilename(title="Choix fichier :")
+        self._ulfile.setentry(self.ulfile)
+      elif result == 'OK':
+        self.ulfile = self._ulfile.get()
+        # On utilise le convertisseur défini par format_fichier
+        source=self.get_source(self.ulfile)
+        if source:
+           # On a réussi à convertir le fichier self.ulfile
+           self.dialog.deactivate(result)
+           self.text=source
+        else:
+           # Une erreur a été rencontrée
+           self.text=''
+      elif result == 'Cancel':
+        self._ulfile.setentry('')
+        self.dialog.deactivate(result)
+        self.ulfile = None
+        self.text=''
+
+  def get_file(self,unite=None,fic_origine = ''):
+      """ 
+          Retourne le nom du fichier correspondant a l unite logique unite (entier)
+      """
+      if unite :
+          titre = "Choix unite %d " %unite
+      else:
+          titre = "Choix d'un fichier de poursuite"
+      self.dialog=Pmw.Dialog(self.top,
+                             title = titre,
+                             buttons = ('OK', 'Browse','Cancel'),
+                             defaultbutton='OK',
+                             command=self.browse,
+                             )
+      self.dialog.withdraw()
+      if unite :
+          texte = "Le fichier %s contient une commande INCLUDE \n" % fic_origine
+          texte = texte+'Donnez le nom du fichier correspondant\n à l unité logique %d' % unite
+      else:
+          texte="Le fichier %s contient une commande %s\n" %(fic_origine,'POURSUITE')
+          texte = texte+'Donnez le nom du fichier dont vous \n voulez faire une poursuite'
+      w = Label(self.dialog.interior(),
+                text = texte)
+      w.pack(padx = 10, pady = 10)
+      if unite != None :
+          labeltexte = 'Fichier pour unite %d :' % unite
+      else:
+          labeltexte = 'Fichier à poursuivre :'
+      self._ulfile=Pmw.EntryField(self.dialog.interior(),
+                                  labelpos = 'w',
+                                  label_text = labeltexte,
+                                  )
+      self._ulfile.pack(fill='x', expand=1, padx=10, pady=5)
+      self._ulfile.component('entry').focus_set()
+      self.dialog.activate(geometry='centerscreenalways')
+      return self.ulfile,self.text
+
+  def get_source(self,file):
+      import convert
+      format=self.format_fichier.get()
+      # Il faut convertir le contenu du fichier en fonction du format
+      if convert.plugins.has_key(format):
+         # Le convertisseur existe on l'utilise
+         p=convert.plugins[format]()
+         p.readfile(file)
+         text=p.convert('execnoparseur')
+         if not p.cr.estvide():
+            self.affiche_infos("Erreur à la conversion")
+            Fenetre(self,
+                    titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier",
+                    texte = str(p.cr)).wait()
+            return text
+         return text
+      else:
+         # Il n'existe pas c'est une erreur
+         self.affiche_infos("Type de fichier non reconnu")
+         showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
+         return None
+
diff --git a/Editeur/eficas_go.py b/Editeur/eficas_go.py
new file mode 100644 (file)
index 0000000..71f4bd0
--- /dev/null
@@ -0,0 +1,26 @@
+"""
+    Ce module permet de lancer l'application EFICAS en affichant
+    un ecran Splash pour faire patentier l'utilisateur
+"""
+# Modules Python
+import Tkinter
+
+# Modules Eficas
+import import_code
+import splash
+
+def lance_eficas(code,fichier=None):
+    """
+        Lance l'appli EFICAS
+    """
+    root = Tkinter.Tk()
+    splash.init_splash(root,code=code,titre="Lancement d'EFICAS pour %s" %code)
+    splash._splash.configure(text="Chargement d'EFICAS en cours.\n Veuillez patienter ...")
+    import eficas
+    if fichier :
+        eficas.EFICAS(root,code=code,fichier = fichier)
+    else:
+        eficas.EFICAS(root,code=code)
+
+    root.mainloop()
+
diff --git a/Editeur/faq.py b/Editeur/faq.py
new file mode 100644 (file)
index 0000000..8caa7ef
--- /dev/null
@@ -0,0 +1,32 @@
+"""
+   Ce module sert a afficher le texte du FAQ EFICAS
+   et à attendre l'acquittement par l'utilisateur
+"""
+# Modules Python
+import os
+import Pmw
+from Tkinter import END
+
+# Modules Eficas
+import prefs
+import fontes
+
+class FAQ:
+   def __init__(self,parent):
+      self.parent=parent
+      self.Dialog = Pmw.Dialog(parent,
+                               buttons=('Lu',),
+                               title="FAQs et limitations d'EFICAS",
+                               command = self.lu_FAQ)
+      txt = open(os.path.join(prefs.INSTALLDIR,'Editeur','faqs.txt'),'r').read()
+      Texte = Pmw.ScrolledText(self.Dialog.interior(),
+                               text_font=fontes.standard)
+      Texte.insert(END,txt)
+      Texte.pack(expand=1,fill='both')
+      self.Dialog.activate(geometry = 'centerscreenalways')
+
+   def lu_FAQ(self,event=None):
+      self.Dialog.destroy()
+
+def affiche(parent):
+   FAQ(parent)
diff --git a/Editeur/faqs.txt b/Editeur/faqs.txt
new file mode 100755 (executable)
index 0000000..0050429
--- /dev/null
@@ -0,0 +1,46 @@
+
+-------------------------------------------------------------------------------------------------------------
+                       FAQs et Limitations d'EFICAS
+-------------------------------------------------------------------------------------------------------------
+
+
+1. Mots réservés :
+
+       Tous les mots du langage Python sont des mots réservés.
+       On ne peut donc pas appeler une variable ou un concept 'fin' ou 'dir'
+       Pour la liste complète de ces mots-clés, veuillez vous référer à la 
+       documentation Python
+
+2. Concepts réentrants :
+
+       Ne pas indiquer par un '&' devant son nom qu'un concept est utilisé comme
+       concept réentrant. En effet EFICAS le sait !
+
+3. Carte commentaire :
+
+       La carte commentaire est désormais le '#' (dièse) au lieu du '%' (pourcent)
+   Les commentaires sont gérés comme des objets de même niveau que les
+   commandes ; il n'est plus possible de placer des commentaires "dans"
+   une commande. Attention, lors de la traduction d'un fichier de version 5
+   en 6, les commentaires "dans" les commandes seront perdus.
+
+4. Nommer le concept produit par un opérateur :
+
+       Vous ne pouvez nommer le concept produit d'un opérateur que lorsque
+       celui-ci aura été entièrement et correctement rempli.
+
+5. Règle de rémanence dans les mots-clés facteurs répétés :
+
+       La règle de rémanence qui permettait pour certains mots-clés facteurs
+       et pour certains de leurs mots-clés simples de ne pas répeter la valeur
+       de ces derniers dans toutes les occurrences du mot-clé facteur n'est pas 
+       connue d'EFICAS.
+       En conséquence, vous devez répéter les mots-clés simples concernés dans 
+       toutes les occurrences des mots-clés facteurs.
+
+6. Besoin d'aide ?
+       
+       La documentation d'utilisation d'EFICAS a pris un peu de retard sur le produit ...
+       Néanmoins, vous disposez sur la plupart des panneaux contextuels ( les panneaux à
+       droite de l'arbre) d'une aide en ligne que vous pouvez activer en maintenant le 
+       bouton droit de votre souris enfoncé.
diff --git a/Editeur/fenetre_mc_inconnus.py b/Editeur/fenetre_mc_inconnus.py
new file mode 100644 (file)
index 0000000..113ec4e
--- /dev/null
@@ -0,0 +1,197 @@
+"""
+"""
+# Modules Python
+from Tkinter import *
+import copy
+
+# Modules Eficas
+from centerwindow import centerwindow
+
+class fenetre_mc_inconnus :
+    """
+       Cette classe sert à construire la fenêtre qui apparaît dans EFICAS 
+       lorsque des mots-clés inconnus ont été trouvés dans le fichier de 
+       commandes que l'on est en train de lire
+    """
+    def __init__(self,l_mc):
+       self.l_mc = l_mc
+       self.fenetre = Toplevel()
+       self.fenetre.geometry("400x400+0+0")
+       self.fenetre.title("Mots-clés inconnus dans le fichier de commandes")
+       self.init()
+       self.init_frames()
+       self.init_label()
+       self.init_liste_mc()
+       self.init_boutons()
+       centerwindow(self.fenetre)
+
+    def init(self) :
+       """
+       Initialise les structures de données
+       """
+       self.new_l_mc = []
+       for mc in self.l_mc :
+           self.new_l_mc.append(copy.copy(mc))
+       self.mc_courant = None
+       self.var_quit = IntVar(0)
+       self.entry_courante = None
+              
+    def init_frames(self):
+       """
+       Création des 2 frames devant contenir le label et la liste des MC inconnus 
+       """
+       self.frame1 = Frame(self.fenetre)
+       self.frame2 = Frame(self.fenetre)
+       self.frame3 = Frame(self.fenetre)
+       self.frame1.place(relx=0,rely=0,relheight=0.2,relwidth=1)
+       self.frame2.place(relx=0,rely=0.2,relheight=0.6,relwidth=1)
+       self.frame3.place(relx=0,rely=0.8,relheight=0.2,relwidth=1)
+       self.frame21 = Frame(self.frame2)
+       self.frame22 = Frame(self.frame2)
+       self.frame21.place(relx=0,rely=0,relwidth=0.6,relheight=1)
+       self.frame22.place(relx=0.6,rely=0,relwidth=0.4,relheight=1)
+    
+    def init_label(self):
+       """
+       Affichage du label dans la zone concernée
+       """
+       txt = " Un ou plusieurs mots-clés inconnus ont été trouvés dans le fichier de commandes."
+       txt = txt + "En cliquant sur leur nom, vous pourrez soit corriger l'orthographe soit supprimer ce mot-clé"
+       self.fenetre.update_idletasks()
+       Label(self.frame1,
+             text = txt,
+            wraplength = int(self.frame1.winfo_width()*0.8),
+            justify = 'center').place(relx=0.5,rely=0.5,anchor='center')   
+    
+    
+    def init_liste_mc(self):
+       """
+       Affiche les mots-clés à modifier ou supprimer  
+       """
+       for mc in self.l_mc :
+           # mc est une liste :
+           # mc contient comme premiers arguments l'étape et éventuellement les blocs, mcfact ...
+          # et contient comme 2 derniers éléments le nom du mot-clé et sa valeur
+          path_mc = self.get_path(mc[0:-2])
+          nom_mc  = mc[-2]
+          Label(self.frame21,text = path_mc).pack(side='left')
+          e = Entry(self.frame22)
+          e.pack(side='left')
+          e.insert(END,nom_mc)
+          e.bind("<Button-1>",lambda event,en=e,m=mc,s=self : s.select_mc(m,en))
+          e.bind("<Return>",lambda e,s=self : s.modifie_mc())
+          e.configure(relief='flat',state='disabled')
+
+    def init_boutons(self):
+        """
+       Construit les boutons Modifier,Supprimer et Fermer 
+       Les deux premiers sont inactifs tant qu'aucun mot-clé n'est sélectionné
+       """
+       self.b_mod = Button(self.frame3,
+                           text = "Modifier",
+                           disabledforeground = 'grey35',
+                           state='disabled',
+                           command = self.modifie_mc)
+       self.b_sup = Button(self.frame3,
+                           text = "Supprimer",
+                           disabledforeground = 'grey35',
+                           state='disabled',
+                           command = self.supprime_mc)
+       self.b_quit = Button(self.frame3,
+                           text = "Fermer",
+                           command = self.quit)
+       self.b_mod.place(relx=0.25,rely=0.5,anchor='center')
+       self.b_sup.place(relx=0.50,rely=0.5,anchor='center')
+       self.b_quit.place(relx=0.75,rely=0.5,anchor='center')
+                           
+    def wait_new_list(self):
+        """
+       Cette méthode rend cette toplevel bloquante.
+       Dès que la variable var_quit est modifiée, on continue l'exécution de cette
+       méthode (et on quitte)
+       """
+       self.fenetre.wait_variable(self.var_quit)
+       self.fenetre.destroy()
+       return self.new_l_mc
+                          
+    def get_path(self,l_o):
+        """
+       Construit la chaîne de caractère contenant le chemin d'accès complet du mot-clé
+       """
+       txt = ''
+       for o in l_o :
+           print o
+          txt = txt + o.nom+'/'
+       # on enlève le dernier slash en trop
+       txt = txt[0:-1]
+       return txt    
+    
+    def select_mc(self,mc,entry):
+        """
+       Enregistre le mot-clé passé en argument comme mot-clé courant
+       Active les boutons Modifier et Supprimer
+       """
+       self.desactive_entry()
+       self.mc_courant     = mc
+       self.entry_courante = entry
+       self.active_boutons()
+       self.active_entry()
+
+    def modifie_mc(self):
+        """
+       Modifie le nom du mot-clé en prenant la nouvelle valeur lue dans entry_courante
+       """
+       new_nom_mc = self.entry_courante.get()
+       index = self.l_mc.index(self.mc_courant)
+       new_mc = self.new_l_mc[index]
+       new_mc[-2] = new_nom_mc
+       objet_pere = self.mc_courant[-3]
+       
+       self.desactive_boutons()
+       self.desactive_entry()
+
+    def supprime_mc(self):
+        """
+       Supprime le mot-clé courant de la liste
+       """
+       index = self.l_mc.index(self.mc_courant)
+       self.new_l_mc[index] = None
+       self.desactive_boutons()
+       self.desactive_entry()  
+       
+    def desactive_boutons(self):
+        """
+       Désactive les boutons Modifier et Supprimer
+       """
+       self.b_mod.configure(state='disabled')
+       self.b_sup.configure(state='disabled')
+               
+    def active_boutons(self):
+        """
+       Active les boutons Modifier et Supprimer
+       """
+       self.b_mod.configure(state='normal')
+       self.b_sup.configure(state='normal')
+
+    def desactive_entry(self):
+        """
+       Désactive l'entry courante si elle existe
+       """
+       if self.entry_courante :
+          self.entry_courante.configure(state='disabled',relief='flat')
+          
+    def active_entry(self):
+        """
+       Active l'entry courante si elle existe
+       """
+       if self.entry_courante :
+          self.entry_courante.configure(state='normal',relief='sunken')
+                  
+    def quit(self):
+        """
+       Permet de fermer la fenêtre
+       """
+       self.var_quit.set(1)
+
+if __name__ == '__main__':
+   fenetre_mc_inconnus(('toto','titi'))
diff --git a/Editeur/fontes.py b/Editeur/fontes.py
new file mode 100644 (file)
index 0000000..013f6d2
--- /dev/null
@@ -0,0 +1,16 @@
+standard = ("Times",10)
+standard_italique = ("Times",10,'italic')
+standard_gras = ("Times",10,'bold')
+standard_gras_souligne = ("Times",10,'bold','underline')
+
+canvas = ('times',8)
+canvas_italique = ('times',8,'italic')
+canvas_gras = ("Times",8,'bold')
+canvas_gras_italique = ("Times",10,'bold','italic')
+
+standard12 = ("Times",12)
+standard12_gras = ("Times",12,'bold')
+standard12_gras_italique = ( "times",12,'bold','italic')
+
+standardcourier10 = ("Courier",10)
+
diff --git a/Editeur/icons/About24.gif b/Editeur/icons/About24.gif
new file mode 100755 (executable)
index 0000000..9e11689
Binary files /dev/null and b/Editeur/icons/About24.gif differ
diff --git a/Editeur/icons/Copy24.gif b/Editeur/icons/Copy24.gif
new file mode 100755 (executable)
index 0000000..c665d07
Binary files /dev/null and b/Editeur/icons/Copy24.gif differ
diff --git a/Editeur/icons/Cut24.gif b/Editeur/icons/Cut24.gif
new file mode 100755 (executable)
index 0000000..5c37d3a
Binary files /dev/null and b/Editeur/icons/Cut24.gif differ
diff --git a/Editeur/icons/Delete24.gif b/Editeur/icons/Delete24.gif
new file mode 100755 (executable)
index 0000000..96d799a
Binary files /dev/null and b/Editeur/icons/Delete24.gif differ
diff --git a/Editeur/icons/Help24.gif b/Editeur/icons/Help24.gif
new file mode 100755 (executable)
index 0000000..a2848d8
Binary files /dev/null and b/Editeur/icons/Help24.gif differ
diff --git a/Editeur/icons/New24.gif b/Editeur/icons/New24.gif
new file mode 100755 (executable)
index 0000000..1cc488d
Binary files /dev/null and b/Editeur/icons/New24.gif differ
diff --git a/Editeur/icons/Open24.gif b/Editeur/icons/Open24.gif
new file mode 100755 (executable)
index 0000000..2086bc2
Binary files /dev/null and b/Editeur/icons/Open24.gif differ
diff --git a/Editeur/icons/Paste24.gif b/Editeur/icons/Paste24.gif
new file mode 100755 (executable)
index 0000000..26cc4c5
Binary files /dev/null and b/Editeur/icons/Paste24.gif differ
diff --git a/Editeur/icons/Save24.gif b/Editeur/icons/Save24.gif
new file mode 100755 (executable)
index 0000000..bfa98a8
Binary files /dev/null and b/Editeur/icons/Save24.gif differ
diff --git a/Editeur/icons/Zoom24.gif b/Editeur/icons/Zoom24.gif
new file mode 100755 (executable)
index 0000000..86ae863
Binary files /dev/null and b/Editeur/icons/Zoom24.gif differ
diff --git a/Editeur/icons/arrow_left.gif b/Editeur/icons/arrow_left.gif
new file mode 100755 (executable)
index 0000000..cfd0d07
Binary files /dev/null and b/Editeur/icons/arrow_left.gif differ
diff --git a/Editeur/icons/arrow_right.gif b/Editeur/icons/arrow_right.gif
new file mode 100755 (executable)
index 0000000..b4e9b7c
Binary files /dev/null and b/Editeur/icons/arrow_right.gif differ
diff --git a/Editeur/icons/ast-green-ball.gif b/Editeur/icons/ast-green-ball.gif
new file mode 100755 (executable)
index 0000000..8686504
Binary files /dev/null and b/Editeur/icons/ast-green-ball.gif differ
diff --git a/Editeur/icons/ast-green-los.gif b/Editeur/icons/ast-green-los.gif
new file mode 100755 (executable)
index 0000000..0c9dbd0
Binary files /dev/null and b/Editeur/icons/ast-green-los.gif differ
diff --git a/Editeur/icons/ast-green-percent.gif b/Editeur/icons/ast-green-percent.gif
new file mode 100755 (executable)
index 0000000..d4ff8e2
Binary files /dev/null and b/Editeur/icons/ast-green-percent.gif differ
diff --git a/Editeur/icons/ast-green-square.gif b/Editeur/icons/ast-green-square.gif
new file mode 100755 (executable)
index 0000000..04ad5ad
Binary files /dev/null and b/Editeur/icons/ast-green-square.gif differ
diff --git a/Editeur/icons/ast-green-text.gif b/Editeur/icons/ast-green-text.gif
new file mode 100755 (executable)
index 0000000..64d5da0
Binary files /dev/null and b/Editeur/icons/ast-green-text.gif differ
diff --git a/Editeur/icons/ast-red-ball.gif b/Editeur/icons/ast-red-ball.gif
new file mode 100755 (executable)
index 0000000..e7291fd
Binary files /dev/null and b/Editeur/icons/ast-red-ball.gif differ
diff --git a/Editeur/icons/ast-red-los.gif b/Editeur/icons/ast-red-los.gif
new file mode 100755 (executable)
index 0000000..53d3ade
Binary files /dev/null and b/Editeur/icons/ast-red-los.gif differ
diff --git a/Editeur/icons/ast-red-percent.gif b/Editeur/icons/ast-red-percent.gif
new file mode 100755 (executable)
index 0000000..344bde4
Binary files /dev/null and b/Editeur/icons/ast-red-percent.gif differ
diff --git a/Editeur/icons/ast-red-square.gif b/Editeur/icons/ast-red-square.gif
new file mode 100755 (executable)
index 0000000..977610c
Binary files /dev/null and b/Editeur/icons/ast-red-square.gif differ
diff --git a/Editeur/icons/ast-red-text.gif b/Editeur/icons/ast-red-text.gif
new file mode 100755 (executable)
index 0000000..0f2f412
Binary files /dev/null and b/Editeur/icons/ast-red-text.gif differ
diff --git a/Editeur/icons/ast-white-percent.gif b/Editeur/icons/ast-white-percent.gif
new file mode 100755 (executable)
index 0000000..c4e86cc
Binary files /dev/null and b/Editeur/icons/ast-white-percent.gif differ
diff --git a/Editeur/icons/ast-white-square.gif b/Editeur/icons/ast-white-square.gif
new file mode 100755 (executable)
index 0000000..41130fe
Binary files /dev/null and b/Editeur/icons/ast-white-square.gif differ
diff --git a/Editeur/icons/ast-white-text.gif b/Editeur/icons/ast-white-text.gif
new file mode 100755 (executable)
index 0000000..3322de3
Binary files /dev/null and b/Editeur/icons/ast-white-text.gif differ
diff --git a/Editeur/icons/ast-yel-ball.gif b/Editeur/icons/ast-yel-ball.gif
new file mode 100755 (executable)
index 0000000..a577e97
Binary files /dev/null and b/Editeur/icons/ast-yel-ball.gif differ
diff --git a/Editeur/icons/ast-yel-los.gif b/Editeur/icons/ast-yel-los.gif
new file mode 100755 (executable)
index 0000000..eadd7c0
Binary files /dev/null and b/Editeur/icons/ast-yel-los.gif differ
diff --git a/Editeur/icons/ast-yel-percent.gif b/Editeur/icons/ast-yel-percent.gif
new file mode 100755 (executable)
index 0000000..348b782
Binary files /dev/null and b/Editeur/icons/ast-yel-percent.gif differ
diff --git a/Editeur/icons/ast-yel-square.gif b/Editeur/icons/ast-yel-square.gif
new file mode 100755 (executable)
index 0000000..5f9ec19
Binary files /dev/null and b/Editeur/icons/ast-yel-square.gif differ
diff --git a/Editeur/icons/ast-yellow-text.gif b/Editeur/icons/ast-yellow-text.gif
new file mode 100755 (executable)
index 0000000..01a04e3
Binary files /dev/null and b/Editeur/icons/ast-yellow-text.gif differ
diff --git a/Editeur/icons/code_aster.gif b/Editeur/icons/code_aster.gif
new file mode 100755 (executable)
index 0000000..2e4e691
Binary files /dev/null and b/Editeur/icons/code_aster.gif differ
diff --git a/Editeur/icons/code_descartes.gif b/Editeur/icons/code_descartes.gif
new file mode 100755 (executable)
index 0000000..0f35865
Binary files /dev/null and b/Editeur/icons/code_descartes.gif differ
diff --git a/Editeur/icons/code_saturne.gif b/Editeur/icons/code_saturne.gif
new file mode 100755 (executable)
index 0000000..361b878
Binary files /dev/null and b/Editeur/icons/code_saturne.gif differ
diff --git a/Editeur/icons/logo_edf.gif b/Editeur/icons/logo_edf.gif
new file mode 100755 (executable)
index 0000000..9738ad6
Binary files /dev/null and b/Editeur/icons/logo_edf.gif differ
diff --git a/Editeur/icons/minusnode.gif b/Editeur/icons/minusnode.gif
new file mode 100755 (executable)
index 0000000..6cca2bf
Binary files /dev/null and b/Editeur/icons/minusnode.gif differ
diff --git a/Editeur/icons/plusnode.gif b/Editeur/icons/plusnode.gif
new file mode 100755 (executable)
index 0000000..13ace90
Binary files /dev/null and b/Editeur/icons/plusnode.gif differ
diff --git a/Editeur/images.py b/Editeur/images.py
new file mode 100644 (file)
index 0000000..31f8e2e
--- /dev/null
@@ -0,0 +1,47 @@
+"""
+    Ce module joue le role de cache pour les images stockées
+    dans le repertoire ICONDIR
+"""
+
+import os
+import Tkinter
+
+if __name__ == '__main__':
+   # Programme de test
+   import sys
+   import images
+   root=Tkinter.Tk()
+   frame = Tkinter.Frame(root)
+   frame.pack(expand=1,fill='both')
+
+   for name in ('About24','Save24'):
+      Tkinter.Label(frame, image=images.get_image(name)).pack(side=Tkinter.TOP)
+
+   root.mainloop()
+   sys.exit()
+
+try:
+   import prefs
+   ICONDIR=prefs.ICONDIR
+except:
+   # Par defaut on utilise le repertoire local icons
+   ICONDIR=os.path.join(os.path.abspath(os.path.dirname(__file__)),'icons')
+
+dico_images={}
+
+def get_image(name):
+    if dico_images.has_key(name):
+        return dico_images[name]
+    else : 
+        fic_image = os.path.join(ICONDIR,name)
+        if not os.path.isfile(fic_image):
+           file, ext = os.path.splitext(fic_image)
+           fic_image = file + '.gif'
+        image = Tkinter.PhotoImage(file=fic_image)
+        dico_images[name]=image
+        return image
+
+def update_cache():
+   global dico_images
+   dico_images={}
+
diff --git a/Editeur/import_code.py b/Editeur/import_code.py
new file mode 100644 (file)
index 0000000..1152f1b
--- /dev/null
@@ -0,0 +1,16 @@
+"""
+    Ce module réalise toutes les mises à jour du chemin pour 
+    les imports de modules Python
+"""
+import sys
+import prefs
+# Ce chemin permet d'importer les modules Noyau et Validation
+# représentant le code utilisé (si fourni)
+if prefs.CODE_PATH:
+   sys.path[:0]=[prefs.CODE_PATH]
+   import Noyau,Validation
+   del sys.path[0]
+
+# Ensuite on utilise les packages de l'intallation
+sys.path[:0]=[prefs.INSTALLDIR]
+import Accas
diff --git a/Editeur/jdcdisplay.py b/Editeur/jdcdisplay.py
new file mode 100644 (file)
index 0000000..d85ab06
--- /dev/null
@@ -0,0 +1,219 @@
+"""
+   Ce module contient la classe JDCDISPLAY qui réalise l'affichage
+   du jeu de commandes sous la forme d'un arbre et de panneaux qui portent
+   les informations attachées au noeud de l'arbre sélectionné
+"""
+# Modules Python
+import Tkinter
+import Pmw
+
+# Modules Eficas
+import panels
+from treeitemincanvas import TREEITEMINCANVAS
+from tkMessageBox import showinfo,showerror
+
+class CONFIG:
+   isdeveloppeur='NON'
+
+class JDCDISPLAY:
+   """
+       Cette classe ajoute à la class TREEITEMINCANVAS l'affichage des infos
+       attachées au noeud sélectionné dans un notebook
+       L'objet item associé au jdc est créé par la classe TREEITEMINCANVAS
+   """
+   def __init__(self,jdc,nom_jdc,appli=None,parent=None):
+      self.jdc=jdc
+      self.nom_jdc=nom_jdc
+      self.fichier=None
+
+      if not appli:
+         class Appli:
+            def __init__(self):
+               self.CONFIGURATION=CONFIG()
+            def affiche_infos(self,message):
+               print message
+               return
+
+            def efface_aide(self,event):
+               return
+
+            def affiche_aide(self,event,aide):
+               print aide
+               return
+
+         appli=Appli()
+      self.appli=appli
+
+      if not parent:
+         parent=Tkinter.Tk()
+         Pmw.initialise(parent)
+      self.parent=parent
+      self.node_selected = None
+      self.modified='n'
+
+      self.pane=Pmw.PanedWidget(self.parent,orient='horizontal')
+      self.pane.add('treebrowser',min=0.5)
+      self.pane.add('selected',min=0.5)
+      self.pane.pack(expand=1,fill='both')
+      self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'),
+                 self.appli,self.select_node)
+
+   def select_node(self,node):
+      """
+          Cette méthode est appelée à chaque fois qu'un noeud est sélectionné
+          dans l'arbre.
+          Elle permet l'affichage du panneau correspondant au noeud sélectionné
+      """
+      if node is not self.node_selected :
+         self.create_panel(node)
+      # on conserve la trace du noeud sélectionné et de celui d'avant
+      if self.node_selected :
+          self.ancien_node = self.node_selected
+          self.node_selected = node
+      else:
+          self.ancien_node = self.node_selected = node
+
+   def create_panel(self,node):
+      """
+         Lance la génération du panneau contextuel de l'objet sélectionné 
+         dans l'arbre
+      """
+      if node.item.isactif():
+          if hasattr(node.item,"panel"):
+              return node.item.panel(self,self.pane.pane('selected'),node)
+          else:
+              raise Exception("Le noeud sélectionné n'a pas de panel associé")
+      else:
+          return panels.Panel_Inactif(self,self.pane.pane('selected'),node)
+
+   def init_modif(self):
+      """
+          Met l'attribut modified à 'o' : utilisé par Eficas pour savoir 
+          si un JDC doit être sauvegardé avant destruction ou non
+      """
+      self.modified = 'o'
+
+   def stop_modif(self):
+      """
+          Met l'attribut modified à 'n' : utilisé par Eficas pour savoir 
+          si un JDC doit être sauvegardé avant destruction ou non
+      """
+      self.modified = 'n'
+
+   def mainloop(self):
+      self.parent.mainloop()
+
+   def ReplaceObjectNode(self,node,new_object,nom_sd=None):
+      """
+      Cette méthode sert à remplacer l'objet pointé par node par
+      new_object.
+      Si nom_sd : on remplace un OPER et on essaie de renommer la
+      nouvelle sd par nom_sd
+      """
+      child = node.append_brother(new_object,retour='oui')
+      if child == 0:
+          self.appli.affiche_infos("Impossible de remplacer l'objet du noeud courant")
+      else:
+          self.init_modif()
+          node.delete()
+          if nom_sd:
+              child.item.nomme_sd(nom_sd)
+          child.update()
+
+   def doCut(self):
+      """
+      Stocke dans Eficas.noeud_a_editer le noeud à couper
+      """
+      if not self.node_selected.item.iscopiable():
+          showinfo("Copie impossible",
+                   "Cette version d'EFICAS ne permet que la copie d'objets de type 'Commande' ou mot-clé facteur")
+          return
+      self.edit="couper"
+      self.appli.noeud_a_editer = self.node_selected
+
+   def doCopy(self):
+      """
+      Stocke dans Eficas.noeud_a_editer le noeud à copier
+      """
+      if not self.node_selected.item.iscopiable():
+          showinfo("Copie impossible",
+                   "La copie d'un tel objet n'est pas permise")
+          return
+      self.edit="copier"
+      self.appli.noeud_a_editer = self.node_selected
+
+   def doPaste(self):
+      """
+      Lance la copie de l'objet placé dans self.appli.noeud_a_editer
+      Ne permet que la copie d'objets de type Commande ou MCF
+      """
+      objet_a_copier = self.appli.noeud_a_editer.item.get_copie_objet()
+      if objet_a_copier.__class__.__name__ in ('ETAPE','PROC_ETAPE','MACRO_ETAPE'):
+          self.doPaste_Commande(objet_a_copier)
+      elif objet_a_copier.__class__.__name__ == "MCFACT":
+          self.doPaste_MCF(objet_a_copier)
+      else:
+          showinfo("Copie impossible",
+                   "Vous ne pouvez copier que des commandes ou des mots-clés facteurs !")
+          return
+
+   def doPaste_Commande(self,objet_a_copier):
+      """
+      Réalise la copie de l'objet passé en argument qui est nécessairement une commande
+      """
+      # il faut vérifier que le noeud sélectionné (noeud courant) est bien
+      # une commande ou un JDC sinon la copie est impossible ...
+      if self.node_selected.item.isCommande() :
+          child = self.node_selected.append_brother(objet_a_copier,retour='oui')
+      elif self.node_selected.item.isJdc() :
+          child = self.node_selected.append_child(objet_a_copier,retour='oui')
+      else:
+          showinfo("Copie impossible",
+                   "Vous ne pouvez coller la commande copiée à ce niveau de l'arborescence !")
+          self.appli.affiche_infos("Copie refusée")
+          return
+      # il faut déclarer le JDCDisplay_courant modifié
+      self.init_modif()
+      # suppression éventuelle du noeud sélectionné
+      if self.edit == "couper":
+          self.appli.noeud_a_editer.delete()
+      if child == 0:
+          # la copie est impossible
+          if self.appli.message != '':
+              showerror("Copie refusée",self.appli.message)
+              self.appli.message = ''
+          self.appli.affiche_infos("Copie refusée")
+      # on rend la copie à nouveau possible en libérant le flag edit
+      self.edit="copier"
+
+   def doPaste_MCF(self,objet_a_copier):
+      """
+      Réalise la copie de l'objet passé en argument qui est nécessairement un MCF
+      """
+      if self.node_selected.item.isCommande() :
+          # le noeud courant est une ETAPE
+          child = self.node_selected.append_child(objet_a_copier,retour='oui')
+      elif self.node_selected.item.isMCList() :
+          # le noeud courant est une MCList
+          child = self.node_selected.parent.append_child(objet_a_copier,retour='oui')
+      elif self.node_selected.item.isMCFact():
+          # le noeud courant est un MCFACT
+          child = self.node_selected.parent.append_child(objet_a_copier,retour='oui')
+      else:
+          showinfo("Copie impossible",
+                   "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
+          self.appli.affiche_infos("Copie refusée")
+          return
+      # il faut déclarer le JDCDisplay_courant modifié
+      self.init_modif()
+      # suppression éventuelle du noeud sélectionné
+      if self.edit == "couper":
+          self.appli.noeud_a_editer.delete()
+      if child == 0:
+          if self.appli.message != '':
+              showerror("Copie refusée",self.appli.message)
+              self.appli.message = ''
+          self.appli.affiche_infos("Copie refusée")
+      # on rend la copie à nouveau possible en libérant le flag edit
+      self.edit="copier"
+
diff --git a/Editeur/menubar.py b/Editeur/menubar.py
new file mode 100644 (file)
index 0000000..ad2366e
--- /dev/null
@@ -0,0 +1,31 @@
+"""
+"""
+from Tkinter import Menu
+
+class MENUBAR:
+   def __init__(self,appli,parent):
+      # L'attribut appli pointe vers l'objet application qui détient la menubar et les autres composants
+      self.appli=appli
+      # L'attribut parent pointe vers l'objet graphique parent de la menubar
+      self.parent=parent
+      self.menubar=Menu(self.parent)
+      self.parent.configure(menu=self.menubar)
+      self.init()
+
+   labels= ('Fichier','Edition','Jeu de commandes','Catalogue','Browsers','Options')
+
+   def init(self):
+      self.menudict={}
+      for label in self.labels:
+         menu=Menu(self.menubar,tearoff=0)
+         self.menudict[label]=menu
+         self.menubar.add_cascade(label=label,menu=menu)
+
+      #self.optionmenu.add_command(label='Catalogue développeur',command=self.choix_cata_developpeur)
+
+      #self.browsermenu.add_command(label='Browser catalogue',command = self.browser_catalogue)
+      #self.browsermenu.add_command(label='Shell',command = self.shell)
+      #self.browsermenu.add_command(label='Editeur catalogue',command = self.edite_catalogue)
+
+
+
diff --git a/Editeur/options.py b/Editeur/options.py
new file mode 100644 (file)
index 0000000..0101dd0
--- /dev/null
@@ -0,0 +1,57 @@
+"""
+"""
+# Modules Python
+import os,string
+from tkFileDialog import *
+
+# Modules Eficas
+
+
+class OPTIONS:
+
+   menu_defs=[
+              ('Options',[
+                           ("Catalogue développeur",'choix_cata_developpeur'),
+                         ]
+              )
+             ]
+
+   button_defs=[]
+
+   def __init__(self,appli,parent):
+      self.appli=appli
+      self.parent=parent
+
+   def choix_cata_developpeur(self):
+      """ 
+          Cette méthode demande à l'utilisateur-développeur d'indiquer quel catalogue
+          il veut utiliser en remplacement du catalogue standard du code
+          NB : il faut que le développeur ait les droits d'écriture dans le répertoire où
+          se trouve le catalogue 
+      """
+      file = askopenfilename(title="Choix d'un catalogue personnel",
+                             defaultextension=".py",
+                             filetypes = ( ("Catalogue", "cata*.py"),))
+      if file != '':
+          self.parent.update_idletasks()
+          self.appli.reset_affichage_infos()
+          rep_fic = os.path.dirname(file)
+          nom_fic = string.split(os.path.basename(file),'.')[0]
+          rep_courant = os.getcwd()
+          os.chdir(rep_fic)
+          self.cata = __import__(nom_fic)
+          self.code = self.cata.CODE
+          os.chdir(rep_courant)
+          self.fic_cata = file
+          fic_cata_p = nom_fic+'_pickled.py'
+          self.fic_cata_p = os.path.join(rep_fic,fic_cata_p)
+          pile_erreurs = self.cata.erreurs_cata
+          if pile_erreurs.existe_message() :
+              messages = pile_erreurs.retourne_messages()
+              print messages
+          else :
+              # XXX ne doit pas fonctionner
+              self.catalo = catabrowser.CataItem(cata=self.cata)
+              self.Retrouve_Ordre_Cata('personnel')
+          pile_erreurs.efface()
+
diff --git a/Editeur/panels.py b/Editeur/panels.py
new file mode 100644 (file)
index 0000000..8338308
--- /dev/null
@@ -0,0 +1,465 @@
+#@ MODIF panels Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+import string
+import os
+from Tkinter import *
+import Pmw
+
+from widgets import ListeChoix
+
+SEPARATEUR = '-'*30
+
+class Panel(Frame) :
+  """
+  Classe servant de classe mère à toutes celles représentant les
+  panneaux à afficher en fonction de la nature de l'objet en cours
+  Elle est toujours dérivée.
+  """
+  def __init__(self,parent,panneau,node) :
+      self.parent=parent
+      self.panneau = panneau
+      self.node=node
+      Frame.__init__(self,self.panneau)
+      self.place(x=0,y=0,relheight=1,relwidth=1)
+      self.creer_boutons()
+      self.init()
+
+  def creer_boutons(self):
+      """
+      Méthode créant les boutons se trouvant dans la partie contextuelle d'EFICAS
+      (à droite sous les onglets )
+      """
+      self.fr_but = Frame(self,height=30)
+      self.fr_but.pack(side='bottom',fill='x')
+      self.bouton_com = Button(self.fr_but,
+                               text = 'Commentariser',
+                               command = self.ajout_commentaire,
+                               width=14)
+      self.bouton_sup = Button(self.fr_but,
+                               text = "Supprimer",
+                               command=self.supprimer,
+                               width=14)
+      self.bouton_doc = Button(self.fr_but,
+                               text="Documentation",
+                               command=self.visu_doc,
+                               width=14)
+      self.bouton_cata = Button(self.fr_but,
+                                text = "Catalogue",
+                                command = self.show_catalogue,
+                                width=14)
+      if self.parent.appli.CONFIGURATION.isdeveloppeur == 'OUI':
+          self.bouton_sup.place(relx=0.25,rely = 0.5,relheight = 0.8,anchor='center')
+          self.bouton_cata.place(relx=0.5,rely = 0.5,relheight = 0.8,anchor='center')
+          self.bouton_doc.place(relx=0.75,rely = 0.5,relheight = 0.8,anchor='center')
+      else:
+          self.bouton_sup.place(relx=0.3,rely = 0.5,relheight = 0.8,anchor='center')
+          self.bouton_doc.place(relx=0.7,rely = 0.5,relheight = 0.8,anchor='center')
+
+  def show_catalogue(self):
+      try:
+          genea = self.node.item.get_genealogie()
+          self.parent.appli.browser_catalogue_objet(genea)
+      except Exception,e:
+          traceback.print_exc()
+      
+  def efface(self):
+      self.node.efface()
+
+# ------------------------------------------------------------------------
+#     Méthodes permettant d'ajouter des commentaires, des paramètres
+#                     et des objets EVAL.
+#       Ces méthodes sont utilisées par les panneaux des JDC,ETAPE,
+#                 COMMENTAIRE et PARAMETRE
+# ------------------------------------------------------------------------
+
+  def ajout_commentaire(self,ind='after'):
+      """
+      Ajoute un commentaire à l'intérieur du JDC :
+      - si ind='after'  : l'ajoute après l'objet courant
+      - si ind='before' : l'ajoute avant.
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      return self.node.append_brother("COMMENTAIRE",ind)
+    
+  def ajout_commentaire_first(self):
+      """
+      Ajoute un commentaire en début de JDC
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      return self.node.append_child("COMMENTAIRE",'first')
+
+  def ajout_parametre(self,ind='after'):
+      """
+      Ajoute un parametre à l'intérieur du JDC :
+      - si ind='after'  : l'ajoute après l'objet courant
+      - si ind='before' : l'ajoute avant.
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      return self.node.append_brother("PARAMETRE",ind)
+    
+  def ajout_parametre_first(self):
+      """
+      Ajoute un parametre en début de JDC
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      return self.node.append_child("PARAMETRE",'first')
+
+  def ajout_parametre_eval(self,ind='after'):
+      """
+      Ajoute un paramètre EVAL à l'intérieur du JDC :
+      - si ind='after'  : l'ajoute après l'objet courant
+      - si ind='before' : l'ajoute avant.
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      return self.node.append_brother("PARAMETRE_EVAL",ind)
+    
+  def ajout_parametre_eval_first(self):
+      """
+      Ajoute un paramètre EVAL en début de JDC
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      return self.node.append_child("PARAMETRE_EVAL",'first')
+    
+# ------------------------------------------------------------------------
+   
+  def visu_doc(self):
+      """ Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader
+        - Ne fonctionne pas sous UNIX (chemin d'accès Acrobat Reader)
+        - indication du chemin d'accès aux fichiers pdf à revoir : trop statique"""
+      cle_doc = self.node.item.get_docu()
+      if cle_doc == None : return
+      cle_doc = string.replace(cle_doc,'.','')
+      cle_doc = string.replace(cle_doc,'-','')
+      commande = self.parent.appli.CONFIGURATION.exec_acrobat
+      nom_fichier = cle_doc+".pdf"
+      fichier = os.path.abspath(os.path.join(self.parent.appli.CONFIGURATION.path_doc,
+                                       nom_fichier))
+      if os.name == 'nt':
+          os.spawnv(os.P_NOWAIT,commande,(commande,fichier,))
+      elif os.name == 'posix':
+          script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier)
+          pid = os.system(script)
+      
+  def supprimer(self):
+      """
+      Suppression du noeud courant
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      pere = self.node.parent
+      self.node.delete()
+      pere.select()
+      
+  def affiche(self):
+      """ Force l'affichage des fenêtres en cours """
+      self.tkraise()
+
+  def selectMC(self,name):
+      """ On retrouve le mot-clé sous le curseur pour affichage du fr """
+      cmd=self.node.item.get_definition()
+      texte_infos = ''
+      for e in cmd.entites.keys() :
+          if e == name :
+              texte_infos=cmd.entites[e].fr
+              break
+      if texte_infos == '' : texte_infos="Pas d'infos disponibles"
+      #EFICAS.affiche_infos(texte_infos)
+      self.parent.appli.affiche_infos(texte_infos)
+
+  def defMC(self,name):
+      """ On ajoute un mot-clé à la commande : subnode """
+      if name == SEPARATEUR:return
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != "COMMENTAIRE":
+          self.node.append_child(name)
+      else :
+          self.ajout_commentaire()    
+
+  def selectCmd(self,name):
+      """ On retrouve la commande sous le curseur pour affichage du fr """
+      if name != 'COMMENTAIRE' and name != SEPARATEUR:
+          #EFICAS.affiche_infos(self.parent.appli.cataitem.d_fils[name].fr)
+          #self.parent.appli.affiche_infos(self.parent.appli.cataitem.d_fils[name].fr)
+          self.parent.appli.affiche_infos(self.parent.jdc.get_cmd(name).fr)
+          
+  def defCmd(self,name):
+      """
+      On ajoute une commande après la commande selectionnée : after
+      ou bien on ajoute un commentaire
+      """
+      if name == SEPARATEUR:return
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != "COMMENTAIRE":
+          new_node = self.node.append_brother(name,'after')
+      else :
+          new_node = self.ajout_commentaire()
+
+  def defCmdFirst(self,name):
+      """ On ajoute une commande ou un commentaire au début du fichier de commandes """
+      if name == SEPARATEUR:return
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != "COMMENTAIRE":
+          new_node = self.node.append_child(name,'first')
+      else :
+          new_node = self.ajout_commentaire_first()
+        
+class OngletPanel(Panel) :
+  """ Cette classe est virtuelle et doit être dérivée
+      Elle contient les principales méthodes d'affichage des différents onglets"""
+
+  def raisecmd(self,page):
+      self.nb.page(page).focus_set()
+      if page == 'Concept':
+          try:
+              self._any.focus()
+          except:
+              pass
+
+  def affiche(self):
+      page=self.nb.getcurselection()
+      self.nb.page(page).focus_set()
+      if page == 'Concept':self._any.component('entry').focus_set()
+      self.tkraise()
+
+# ------------------------------------------------------------------------
+#     Méthodes permettant d'afficher des pages partagées par différents
+#           types d'objets (règles,mots-clés,concept,...)
+# ------------------------------------------------------------------------
+
+  def makeConceptPage(self,page):
+      """
+      Crée la page de saisie du nom du concept
+      """
+      self.label = Label(page,text='Nom du concept :')
+      self.label.place(relx=0.1,rely=0.4)
+      self._any = Entry(page,relief='sunken')
+      self._any.place(relx=0.35,rely=0.4,relwidth=0.5)
+      self._any.bind("<Return>",lambda e,s=self:s.execConcept())
+      self._any.insert(0,self.node.item.GetText())
+      type_sd = self.node.item.get_type_sd_prod()
+      if type_sd :
+          txt = "L'opérateur courant retourne un objet de type %s" %type_sd
+          self.label = Label(page, text = txt)
+          self.label.place(relx=0.5,rely=0.55,anchor='n')
+      self._any.focus()
+      # aide associée au panneau
+      bulle_aide="""Tapez dans la zone de saisie le nom que vous voulez donner
+      au concept retoruné par l'opérateur courant et pressez <Return> pour valider"""
+      page.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      page.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+        
+  def makeMoclesPage(self,page):
+      """
+      Crée la page qui affiche la liste des mots-clés que l'on peut
+      encore ajouter
+      """
+      genea =self.node.item.get_genealogie()
+      jdc = self.node.item.get_jdc()
+      liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico)
+      liste_commandes = (("<Enter>",self.selectMC),
+                         ("<Leave>",self.deselectMC),
+                         ("<Double-Button-1>",self.defMC))
+      Liste = ListeChoix(self,page,liste_mc,liste_commandes = liste_commandes,titre = "Mots-clés permis")
+      Liste.affiche_liste()
+      # aide associée au panneau
+      bulle_aide="""Double-cliquez sur le mot-clé que vous voulez ajouter à
+      la commande en cours d'édition"""
+      Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+  def makeCommentairePage(self,page):
+      label = Label(page,text = "Insérer un commentaire :")
+      label.grid(column = 0, row = 2)
+      but_avant = Button(page,text = "AVANT",command = lambda s=self :s.ajout_commentaire(ind = 'before'))
+      but_apres = Button(page,text = "APRES",command = self.ajout_commentaire)
+      but_avant.grid(column = 1,row =2)
+      but_apres.grid(column = 1,row =3)
+      
+  def makeCommandePage(self,page):
+      frame1 = Frame(page,height = 20)
+      frame1.pack(side='top',fill='x')
+      label = Label(frame1,text ="La commande choisie sera ajoutée\n APRES la commande courante")
+      label.pack(side='top')
+      frame2 = Frame(page)
+      frame2.pack(side='top',fill='both',expand=1)
+      liste_cmd = self.get_liste_cmd()
+      liste_commandes = (("<Enter>",self.selectCmd),
+                         ("<Leave>",self.deselectCmd),
+                         ("<Double-Button-1>",self.defCmd))
+      Liste = ListeChoix(self,frame2,liste_cmd,liste_commandes = liste_commandes,filtre='oui',titre = "Commandes")
+      Liste.affiche_liste()
+      # aide associée au panneau
+      bulle_aide="""Double-cliquez sur la commande que vous voulez ajouter au jeu de commandes"""
+      Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+  def makeJDCPage(self,page):
+      """
+      Crée la page correspondant à un objet de type JDC
+      """
+      liste_cmd = self.get_liste_cmd()
+      liste_commandes = (("<Enter>",self.selectCmd),
+                         ("<Leave>",self.deselectCmd),
+                         ("<Double-Button-1>",self.defCmdFirst))
+      Liste = ListeChoix(self,page,liste_cmd,liste_commandes = liste_commandes,filtre='oui',titre = "Commandes")
+      Liste.affiche_liste()
+       # aide associée au panneau
+      bulle_aide="""Double-cliquez sur la commande que vous voulez ajouter au jeu de commandes"""
+      Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+  def makeReglesPage(self,page) :
+      """
+      Crée la page qui affiche la liste des règles avec celle qui ne sont
+      pas respectées en rouge
+      """
+      regles = []
+      regles = self.node.item.get_regles()
+      dictionnaire = self.node.item.get_mc_presents()
+      texte_regles = []
+      l_regles_en_defaut=[]
+      if len(regles) > 0:
+        i = 0
+        for regle in regles :
+          texte_regles.append(regle.gettext())
+          texte,test = regle.verif(dictionnaire)
+          if test == 0 : l_regles_en_defaut.append(i)
+          i = i+1
+      Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles")
+      Liste.affiche_liste()
+      # aide associée au panneau
+      bulle_aide="""Ce panneau contient la liste des règles qui s'appliquent à l'objet
+      en cours d'édition.
+      - en noir : règles valides
+      - en rouge : règles violées"""
+      Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+  def makeParamCommentPage_for_etape(self,page):
+      """
+      Crée la page qui offre le choix à l'utilisateur d'ajouter un commentaire
+      ou un paramètre, avant ou après le noeud courant dans l'arbre.
+      Cette page est destinée aux objets de niveau ETAPE cad à toutes les CMD,
+      les commentaires inter commandes et les paramètres
+      """
+      # les frame ...
+      self.frame_comment = Frame(page,bd=1,relief='raised')
+      self.frame_param   = Frame(page,bd=1,relief='raised')
+      self.frame_eval    = Frame(page,bd=1,relief='raised')
+      self.frame_boutons = Frame(page,bd=1,relief='raised')
+      self.frame_comment.place(relx=0,rely=0,relwidth=1,relheight=0.28)
+      self.frame_param.place(relx=0,rely=0.28,relwidth=1,relheight=0.28)
+      self.frame_eval.place(relx=0,rely=0.56,relwidth=1,relheight=0.28)
+      self.frame_boutons.place(relx=0,rely=0.84,relwidth=1,relheight=0.16)
+      # remplissage de la frame commentaire
+      Label(self.frame_comment,text = "Insérer un commentaire :").place(relx=0.1,rely=0.5,anchor='w')
+      but_comment_avant = Button(self.frame_comment,
+                                 text = "AVANT "+self.node.item.get_nom(),
+                                 command = lambda s=self :s.ajout_commentaire(ind = 'before'))
+      but_comment_apres = Button(self.frame_comment,
+                                 text = "APRES "+self.node.item.get_nom(),
+                                 command = self.ajout_commentaire)
+      but_comment_avant.place(relx=0.6,rely=0.3,anchor='w',relwidth=0.3)
+      but_comment_apres.place(relx=0.6,rely=0.7,anchor='w',relwidth=0.3)
+      # remplissage de la frame paramètre
+      Label(self.frame_param,text = "Insérer un paramètre :").place(relx=0.1,rely=0.5,anchor='w')
+      but_param_avant = Button(self.frame_param,
+                                 text = "AVANT "+self.node.item.get_nom(),
+                                 command = lambda s=self :s.ajout_parametre(ind = 'before'))
+      but_param_apres = Button(self.frame_param,
+                                 text = "APRES "+self.node.item.get_nom(),
+                                 command = self.ajout_parametre)
+      but_param_avant.place(relx=0.6,rely=0.3,anchor='w',relwidth=0.3)
+      but_param_apres.place(relx=0.6,rely=0.7,anchor='w',relwidth=0.3)
+      # remplissage de la frame eval
+      Label(self.frame_eval,text="Insérer un paramètre EVAL :").place(relx=0.1,rely=0.5,anchor='w')
+          #Label(self.frame_eval,text='Non encore disponible').place(relx=0.6,rely=0.5,anchor='w')
+      but_eval_avant = Button(self.frame_eval,
+                              text = "AVANT "+self.node.item.get_nom(),
+                              command = lambda s=self :s.ajout_parametre_eval(ind = 'before'))
+      but_eval_apres = Button(self.frame_eval,
+                              text = "APRES "+self.node.item.get_nom(),
+                              command = self.ajout_parametre_eval)
+      but_eval_avant.place(relx=0.6,rely=0.3,anchor='w',relwidth=0.3)
+      but_eval_apres.place(relx=0.6,rely=0.7,anchor='w',relwidth=0.3)      
+      # remplissage de la frame boutons
+      Button(self.frame_boutons,
+             text="Commentariser toute la commande",
+             command = self.comment_commande).place(relx=0.5,rely=0.5,anchor='center')
+    
+  def deselectMC(self,name):
+      #EFICAS.affiche_infos('')
+      self.parent.appli.affiche_infos('')
+    
+  def get_liste_cmd_old(self):
+      listeCmd = self.cata.listCmd()
+      return listeCmd
+
+  def get_liste_cmd(self):
+      listeCmd = self.node.item.object.niveau.definition.get_liste_cmd()
+      return listeCmd
+
+  def deselectCmd(self,name):
+      #EFICAS.affiche_infos('')
+      self.parent.appli.affiche_infos('')
+    
+  def execConcept(self):
+      """
+      Nomme le concept SD retourné par l'étape
+      """
+      if not hasattr(self,'valeur_choisie'):
+          nom = self._any.get()
+      else:
+          nom = self.valeur_choisie.get()
+      nom = string.strip(nom)
+      if nom == '' : return # si pas de nom, on ressort sans rien faire ...
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      # Pourquoi node.etape ???
+      #test,mess = self.node.etape.item.nomme_sd(nom)
+      test,mess = self.node.item.nomme_sd(nom)
+      #EFICAS.affiche_infos(mess)
+      self.parent.appli.affiche_infos(mess)
+      self.node.racine.update()
+  
+  def changed(self):
+      pass
+
+  def comment_commande(self):
+    """
+    Cette méthode a pour but de commentariser la commande pointée par self.node
+    """
+    commande_comment = self.node.item.get_objet_commentarise()
+    #XXX il faudrait ici aussi eviter l'appel à EFICAS
+    self.parent.appli.bureau.JDCDisplay_courant.ReplaceObjectNode(self.node,commande_comment,None)
+    #EFICAS.JDCDisplay_courant.ReplaceObjectNode(self.node,commande_comment,None)
+      
+class Panel_Inactif(Panel):
+  """
+     Cette classe sert à définir un panneau dans lequel on dit que le noeud 
+     sélectionné n'est pas actif
+  """
+  def __init__(self,parent,panneau,node) :
+      self.parent=parent
+      self.panneau = panneau
+      self.node=node
+      Frame.__init__(self,self.panneau)
+      self.place(x=0,y=0,relheight=1,relwidth=1)
+      self.creer_texte()
+
+  def creer_texte(self):
+      texte = "Le noeud sélectionné ne correspond pas à un objet actif\n"
+      texte = texte + "Seules les commandes placées entre \nDEBUT/POURSUITE et FIN sont actives"
+      longueur = int(self.panneau.winfo_width()*0.8)
+      self.label = Label(self,text=texte,wraplength=longueur,justify='center')
+      self.label.place(relx=0.5,rely=0.4,relwidth=0.8,anchor='center')
+      self.bouton_sup = Button(self,
+                               text = "Supprimer",
+                               command=self.supprimer,
+                               width=14)
+      self.bouton_sup.place(relx=0.5,rely=0.8,anchor='center')
+
+
diff --git a/Editeur/readercata.py b/Editeur/readercata.py
new file mode 100644 (file)
index 0000000..47667a0
--- /dev/null
@@ -0,0 +1,297 @@
+"""
+    Ce module sert à lire un catalogue et à construire
+    un objet CataItem pour Eficas.
+    Il s'appuie sur la classe READERCATA
+"""
+# Modules Python
+import os,sys,py_compile
+import traceback
+import cPickle
+import Pmw
+from tkMessageBox import showinfo,showerror
+
+# Modules Eficas
+import prefs
+import splash
+import fontes
+import analyse_catalogue
+from Noyau.N_CR import CR
+from widgets import Fenetre
+
+#import catabrowser
+
+class READERCATA:
+
+   menu_defs=[
+              ('Catalogue',[
+                           ("Rapport de validation catalogue",'visuCRCATA'),
+                         ]
+              )
+             ]
+
+   button_defs=[]
+
+   def __init__(self,appli,parent):
+      self.appli=appli
+      self.parent=parent
+      self.code=self.appli.code
+      self.appli.format_fichier.set('python')
+      self.OpenCata()
+
+      self.cataitem=None
+      #XXX CCAR : Pour le moment je ne construis pas le CATAItem
+      #self.cataitem = catabrowser.CATAItem(self,"Catalogue "+self.code,
+                                           #self.cata,
+                                           #objet_cata_ordonne = self.cata_ordonne_dico)
+
+   def OpenCata(self):
+      """ 
+          Ouvre le catalogue standard du code courant, cad le catalogue présent
+          dans le répertoire Cata 
+      """
+      message1 = "Compilation des fichiers Eficas \n\n Veuillez patienter ..."
+      splash._splash.configure(text = message1)
+      if len(self.appli.CONFIGURATION.catalogues) == 1:
+          self.fic_cata = self.appli.CONFIGURATION.catalogues[0][2]
+          self.code = self.appli.CONFIGURATION.catalogues[0][0]
+          self.version_code = self.appli.CONFIGURATION.catalogues[0][1]
+          self.appli.format_fichier.set(self.appli.CONFIGURATION.catalogues[0][3])
+      elif len(self.appli.CONFIGURATION.catalogues) == 0:
+          # aucun catalogue défini dans le fichier Accas/editeur.ini
+          if self.code == 'ASTER' :
+              self.fic_cata = os.path.join(prefs.CODE_PATH,'Cata','cata.py')
+          elif self.code == 'SATURNE' :
+              self.fic_cata = os.path.join(prefs.CODE_PATH,'Cata','cata_saturne.py')
+          elif self.code == 'DESCARTES':
+              self.fic_cata = os.path.join(prefs.CODE_PATH,'Cata','cata_descartes.py')
+          else :
+              print 'Code inconnu'
+              sys.exit(0)
+      else:
+          # plusieurs catalogues sont disponibles : il faut demander à l'utilisateur
+          # lequel il veut utiliser ...
+          self.ask_choix_catalogue()
+      if self.fic_cata == None :
+          self.parent.destroy()
+          sys.exit(0)
+      # détermination de fic_cata_c et fic_cata_p
+      self.fic_cata_c = self.fic_cata + 'c'
+      self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py'
+      # compilation éventuelle du catalogue
+      test = self.compile_cata(self.fic_cata,self.fic_cata_c)
+      if not test : showerror("Compilation catalogue","Impossible de compiler le catalogue %s" %self.fic_cata)
+      # import du catalogue
+      self.cata = self.import_cata(self.fic_cata)
+      if not self.cata : showerror("Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata)
+      # analyse du catalogue (ordre des mots-clés)
+      #XXX A priori ceci fait double emploi. Il faut d'abord calculer l'ordre
+      # puis fabriquer le CATAItem
+      #CCAR :self.catalo = catabrowser.CATAItem(self,"Catalogue",self.cata)
+      self.Retrouve_Ordre_Cata_Standard()
+      # chargement et analyse des catalogues développeur (le cas échéant)
+      if self.appli.CONFIGURATION.isdeveloppeur == 'OUI' :
+          init_rep_cata_dev(self.fic_cata,self.appli.CONFIGURATION.path_cata_dev)
+          fic_cata_dev = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py')
+          if os.path.isfile(fic_cata_dev):
+              # il y a bien un catalogue développeur : il faut récupérer le module_object associé ...
+              test = self.compile_cata(fic_cata_dev,fic_cata_dev+'c')
+              if not test :
+                  showinfo("Compilation catalogue développeur",
+                           "Erreur dans la compilation du catalogue développeur")
+                  self.cata = (self.cata,)
+              else:
+                  self.cata_dev =self.import_cata(fic_cata_dev)
+                  self.Retrouve_Ordre_Cata_Developpeur()
+                  self.cata = (self.cata,self.cata_dev)
+          else:
+              self.cata = (self.cata,)
+      else:
+          self.cata = (self.cata,)
+
+   def import_cata(self,cata):
+      """ 
+          Réalise l'import du catalogue dont le chemin d'accès est donné par cata
+      """
+      import imp
+      splash._splash.configure(text = "Chargement du catalogue")
+      nom_cata = os.path.splitext(os.path.basename(cata))[0]
+      rep_cata = os.path.dirname(cata)
+      sys.path[:0] = [rep_cata]
+      try :
+          f,p,d = imp.find_module(nom_cata)
+          o = imp.load_module(nom_cata,f,p,d)
+          return o
+      except Exception,e:
+          traceback.print_exc()
+          return 0
+
+   def Retrouve_Ordre_Cata_Standard(self):
+      """ 
+          Retrouve l'ordre des mots-clés dans le catalogue, cad :
+           - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
+               l'ordre des mots-clés dans le catalogue
+           - s'il n'a pas été modifié, relie le fichier pickle 
+      """
+      time1 = os.path.getmtime(self.fic_cata)
+      try :
+          time2 = os.path.getmtime(self.fic_cata_p)
+      except:
+          time2 = 0
+      if time2 > time1 :
+          # l'objet catalogue n'a pas été modifié depuis le dernier "pickle"
+          self.Get_Ordre_Cata()
+      else :
+          # le catalogue a été modifié depuis le dernier "pickle" :
+          # il faut retrouver l'ordre du catalogue et refaire pickle
+          self.Get_Ordre_Cata(mode='cata')
+      self.appli.affiche_infos("Catalogue standard chargé")
+
+   def Get_Ordre_Cata(self,mode='pickle'):
+      """ 
+          Retrouve l'ordre du catalogue :
+            - mode='pickle ': tente de relire le fichier pickle et sinon lance l'analyse du catalogue
+            - mode='cata'   : force l'analyse du catalogue directement sans relire le pickle
+      """
+      if mode == 'pickle' :
+          try:
+              f = open(self.fic_cata_p)
+              u = cPickle.Unpickler(f)
+              splash._splash.configure(text = "Analyse du catalogue")
+              self.cata_ordonne_dico = u.load()
+              f.close()
+          except :
+              # on peut ne pas arriver à relire le fichier pickle s'il a été altéré
+              # ou (le plus probable) s'il a été créé sous un autre OS
+              self.Get_Ordre_Cata(mode='cata')
+      elif mode == 'cata':
+          splash._splash.configure(text = "Analyse du catalogue",barre='oui')
+          cata_ordonne = analyse_catalogue.analyse_catalogue(self,self.fic_cata)
+          self.cata_ordonne_cr = cata_ordonne.cr
+          self.cata_ordonne_dico = cata_ordonne.dico
+          splash._splash.configure(text = "Sauvegarde des informations sur le catalogue")
+          f = open(self.fic_cata_p,'w+')
+          p = cPickle.Pickler(f)
+          p.dump(self.cata_ordonne_dico)
+          f.close()
+      else :
+          raise Exception("Appel à un mode inconnu de Get_Ordre_Cata : %s" % mode)
+          return
+
+   def ask_choix_catalogue(self):
+      """
+      Ouvre une fenêtre de sélection du catalogue dans le cas où plusieurs
+      ont été définis dans Accas/editeur.ini
+      """
+      # construction du dictionnaire et de la liste des catalogues
+      self.dico_catalogues = {}
+      defaut = None
+      for catalogue in self.appli.CONFIGURATION.catalogues:
+          if catalogue[0] == self.code :
+              self.dico_catalogues[catalogue[1]] = catalogue
+              if len(catalogue) == 5 :
+                  if catalogue[4]=='defaut' : defaut = catalogue[1]
+      liste_choix = self.dico_catalogues.keys()
+      liste_choix.sort()
+      # test si plusieurs catalogues ou non
+      if len(liste_choix) == 0:
+          showerror("Aucun catalogue déclaré pour %s" %self.code)
+          self.quit()
+      elif len(liste_choix) == 1:
+          self.fic_cata = self.dico_catalogues[liste_choix[0]][2]
+          self.version_code = liste_choix[0]
+          return
+      # création d'une boîte de dialogue modale
+      self.fenetre_choix_cata = Pmw.Dialog(self.parent,
+                                           buttons=('OK','ANNULER'),
+                                           defaultbutton = 'OK',
+                                           title = "Choix d'une version du code %s" %self.code,
+                                           command = self.chooseCata)
+      # construction des radioboutons
+      label = `len(liste_choix)`+' versions du code %s sont disponibles\n' %self.code
+      label = label + 'Veuillez choisir celle avec laquelle vous souhaitez travailler :'
+      self.radiobutton = Pmw.RadioSelect(self.fenetre_choix_cata.interior(),
+                                         buttontype='radiobutton',
+                                         labelpos = 'w',
+                                         label_text = label,
+                                         label_font = fontes.standard,
+                                         orient='vertical')
+      for choix in liste_choix :
+          self.radiobutton.add(choix)
+      if defaut == None :
+          # aucun catalogue par défaut n'a été spécifié dans Accas/editeur.ini
+          defaut = liste_choix[0]
+      self.radiobutton.invoke(defaut)
+      self.radiobutton.pack(fill='x',padx=10,pady=10)
+      # centrage de la fenêtre
+      self.fenetre_choix_cata.activate(geometry='centerscreenalways')
+
+   def chooseCata(self,txt):
+      """ 
+          Méthode activée lorsque l'utilisateur a fait son choix et cliqué sur 'OK' ou sur 'ANNULER'
+      """
+      if txt == 'OK' :
+          version_cata = self.radiobutton.getcurselection()
+          self.fic_cata = self.dico_catalogues[version_cata][2]
+          self.version_code = version_cata
+          self.appli.format_fichier.set(self.dico_catalogues[version_cata][3])
+          self.fenetre_choix_cata.destroy()
+      else:
+          self.parent.destroy()
+
+   def compile_cata(self,cata,catac):
+      """ 
+           Teste si le catalogue a bien besoin d'être recompilé et si oui, le compile et
+           affiche un message dans le splash . Retourne 1 si la compilation s'est bien déroulée,
+           0 sinon.
+      """
+      time1 = os.path.getmtime(cata)
+      try:
+          time2 = os.path.getmtime(catac)
+      except:
+          time2 = 0
+      if time1 > time2:
+          try:
+              # le catalogue doit être recompilé avant d'être importé
+              splash._splash.configure(text="Compilation du catalogue\nCela peut prendre une trentaine de secondes ...")
+              py_compile.compile(cata)
+          except:
+              return 0
+      return 1
+
+
+#--------------------------------------------------------------------------------
+# Méthodes concernant la barre de progression lors de l'analyse du catalogue
+#--------------------------------------------------------------------------------
+
+   def configure_barre(self,nbcommandes):
+      """ Configure la barre de progression en lui passant comme paramètre le
+          nombre de commandes du catalogue qui lui sert à déterminer la longueur de son incrément """
+      try:
+          splash._splash.configure(barre='oui',ratio = nbcommandes)
+      except:
+          pass
+
+   def update_barre(self):
+      """ Update la position de la barre de progression : la fait progresser de son incrément """
+      try:
+          splash._splash.update_barre()
+      except:
+          pass
+
+   def visuCRCATA(self):
+      """
+      Méthode permettant l'affichage du rapport de validation
+      """
+      cr = CR( debut = "Début rapport de validation du catalogue",
+               fin = "Fin rapport de validation du catalogue")
+      titre="rapport de validation du catalogue"
+      if hasattr(self,'cata_ordonne_cr') :
+          cr.add(self.cata_ordonne_cr)
+      if hasattr(self,'cata_dev_ordonne_cr') :
+          cr.add(self.cata_dev_ordonne_cr)
+      for cata in self.cata:
+          if hasattr(cata,'JdC'):
+              cr.add(cata.JdC.report())
+      texte_cr = str(cr)
+      self.visu_texte_cr = Fenetre(self.appli,titre=titre,texte=texte_cr)
+
diff --git a/Editeur/splash.py b/Editeur/splash.py
new file mode 100644 (file)
index 0000000..c3e5339
--- /dev/null
@@ -0,0 +1,131 @@
+"""
+    Ce module permet de créer, mettre à jour et détruire
+    un écran Splash
+"""
+from Tkinter import *
+
+from centerwindow import centerwindow
+from Tools.foztools.foztools import Slider
+import fontes
+import images
+
+_splash=None
+
+def init_splash(*pos,**args):
+   global _splash
+   _splash=SplashScreen(*pos,**args)
+
+def fini_splash():
+   global _splash
+   _splash.quit()
+   _splash=None
+
+class SplashScreen(Toplevel):
+    """ 
+        Provides a splash screen. Usage:
+        Subclass and override 'CreateWidgets()'
+        In constructor of main window/application call
+        - S = SplashScreen(main=self)        (if caller is Toplevel)
+        - S = SplashScreen(main=self.master) (if caller is Frame)
+        - S.quit()  after you are done creating your widgets etc.
+    """
+    def __init__(self, master=None,**args):
+        Toplevel.__init__(self, master, relief='groove',
+                          borderwidth=5)
+        self.main = master
+        if self.main != None :
+            self.main.iconify()
+        self.withdraw()
+        self.frame = Frame(self)
+        self.frame.pack(expand=1,fill='both')
+        self.init(args)
+        self.geometry("300x200")
+        self.resizable(0,0)
+        centerwindow(self)
+        self.CreateWidgets()
+        self.deiconify()
+
+    def init(self,args={}):
+        self.text = StringVar()
+        self.text.set('')
+        self.text2 = StringVar()
+        self.text2.set('')
+        self.icone = 'logo_edf.gif'
+        self.barre = 'non'
+        if args == {} : return
+        if args.has_key('text'):
+            self.text.set(args['text'])
+        if args.has_key('info'):
+            self.text2.set(args['info'])
+        if args.has_key('titre'):
+            self.title(args['titre'])
+        if args.has_key('code'):
+            self.code = args['code']
+        else:
+            self.code = 'inconnu'
+        if args.has_key('icone'):
+            self.icone = args['icone']
+        if self.code == 'ASTER' :
+            self.icone = 'code_aster.gif'
+        elif self.code == 'SATURNE':
+            self.icone = 'code_saturne.gif'
+        elif self.code == 'DESCARTES':
+            self.icone = 'code_descartes.gif'
+
+    def CreateWidgets(self):
+        self.catIcon = images.get_image(self.icone)
+        self.label = Label(self.frame, image=self.catIcon)
+        self.label.pack(side=TOP)
+        self.label = Label(self.frame, textvariable=self.text,font = fontes.standard_gras)
+        self.label.pack(side=TOP,expand=1,fill='both')
+        self.label2 = Label(self.frame, textvariable=self.text2,font = fontes.standard_italique)
+        self.label2.pack(side=TOP,expand=1,fill='both')
+        self.progress = Slider(self.frame,value=0,max=100,orientation='horizontal',
+                               fillColor='#00008b',width=200,height=30,
+                               background='white',labelColor='red')
+        centerwindow(self)
+
+    def update_barre(self,event=None):
+        """ Permet de faire avancer la barre de progression """
+        try:
+            self.progress.value = self.progress.value+self.increment
+            self.progress.update()
+        except:
+            pass
+
+    def configure_barre(self):
+        """ 
+             Calcule l'incrément de progression de la barre en fonction
+             du nombre d'opérations à effectuer afin que le compteur
+             soit à 100% à la fin des opérations
+        """
+        self.increment = 100./self.ratio
+        self.progress.update()
+
+    def configure(self,**args):
+        if args.has_key('text'):
+            self.text.set(args['text'])
+        if args.has_key('info'):
+            self.text2.set(args['info'])
+        if args.has_key('titre'):
+            self.title(args['titre'])
+        if args.has_key('barre'):
+            old = self.barre
+            self.barre = args['barre']
+            if self.barre == 'oui' and old == 'non':
+                self.progress.frame.pack(in_=self.frame,side='top')
+            elif self.barre == 'non' and old == 'oui':
+                self.progress.frame.pack_forget()
+        if args.has_key('ratio'):
+            self.ratio = args['ratio']
+            self.configure_barre()
+        self.update()
+
+    def quit(self):
+        self.progress = None
+        self.destroy()
+        if self.main:
+           self.main.update()
+           self.main.deiconify()
+           centerwindow(self.main,parent='sans')
+
diff --git a/Editeur/statusbar.py b/Editeur/statusbar.py
new file mode 100644 (file)
index 0000000..6c0687a
--- /dev/null
@@ -0,0 +1,30 @@
+"""
+"""
+# Modules Python
+import Tkinter
+
+class STATUSBAR:
+   def __init__(self,parent):
+      self.parent=parent
+      self.frame = Tkinter.Frame(parent,bd=1, relief=Tkinter.RAISED)
+      self.frame.pack(side=Tkinter.BOTTOM, fill=Tkinter.X)
+      self.label = Tkinter.Label (self.frame,
+                                        fg='black',
+                                        text='',
+                                        justify='left',
+                                        relief='sunken',
+                                        bg='gray95')
+      self.label.pack(side='left',expand=1,fill='both')
+
+   def affiche_infos(self,texte):
+      if len(texte)>150 :
+          texte_infos=texte[0:150]
+      else :
+          texte_infos=texte
+      self.label.configure(text=texte_infos)
+
+
+   def reset_affichage_infos(self):
+      """ Efface tout message présent dans le panneau en bas d'EFICAS """
+      self.affiche_infos('')
+
diff --git a/Editeur/toolbar.py b/Editeur/toolbar.py
new file mode 100644 (file)
index 0000000..e99a56d
--- /dev/null
@@ -0,0 +1,163 @@
+"""
+"""
+# Modules Python
+import string
+from Tkinter import *
+import Pmw
+
+# Modules Eficas
+import images
+
+class TOOLBAR:
+  def __init__(self,appli,parent):
+      # parent représente l'objet graphique parent
+      self.parent=parent
+      # appli représente l'objet application parent
+      self.appli=appli
+      self.balloon = None
+      self.l_boutons_a_activer = []
+      self.barreboutons=Frame(self.parent,relief='ridge',bd=2)
+      self.barreboutons.pack(anchor='nw',expand=0,fill=X)
+      # bouton Infos à l'extrême droite de la barre des boutons
+      b = Button(self.barreboutons,
+                 image = images.get_image('About24'),
+                 command = self.view_infos)
+      b.pack(side='right')
+      texte = "Infos EFICAS"
+      b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t,pos='right'))
+      b.bind("<Leave>", self.efface_balloon)
+
+      #self.creer_boutons()
+
+  def creer_boutons(self):
+      self.l_boutons = (('New24',self.appli.newJDC,"Création d'un nouveau fichier",'always'),
+                        ('Open24',self.appli.openJDC,"Ouverture d'un fichier existant",'always'),
+                        ('Save24',self.appli.saveJDC,"Sauvegarde du fichier courant",'always'),
+                        ('Zoom24',self.appli.visuJDC,"Visualisation du fichier de commandes",'always'),
+                        None,
+                        ('Copy24',self.appli.copy,"Copie l'objet courant",'jdc'),
+                        ('Cut24',self.appli.cut,"Coupe l'objet courant",'jdc'),
+                        ('Paste24',self.appli.paste,"Colle l'objet copié après l'objet courant",'jdc'),
+                        None,
+                        ('Delete24',self.appli.delete,"Supprime l'objet courant",'jdc'),
+                        ('Help24',self.appli.view_doc,"Documentation de l'objet courant",'jdc')
+                        )
+      # liste des boutons à activer quand statut != 'always'
+      self.l_boutons_a_activer = [] 
+
+      for bouton in self.l_boutons :
+          if not bouton :
+              # on veut afficher un bouton vide (=espace entre boutons)
+              Button(self.barreboutons,
+                     image = images.get_image('New24'),
+                     relief = 'flat').pack(side='left')
+              continue
+          nom_fic,commande,texte,statut = bouton
+          b = Button(self.barreboutons,
+                     image = images.get_image(nom_fic),
+                     command = commande,
+                     relief='flat')
+          b.pack(side='left')
+          b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t))
+          b.bind("<Leave>", self.efface_balloon)
+          if statut != 'always':
+              self.l_boutons_a_activer.append(b)
+      # bouton Infos à l'extrême droite de la barre des boutons
+      b = Button(self.barreboutons,
+                 image = images.get_image('About24'),
+                 command = self.view_infos)
+      b.pack(side='right')
+      texte = "Infos EFICAS"
+      b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t,pos='right'))
+      b.bind("<Leave>", self.efface_balloon)
+      # inactive les boutons qui doivent l'être tant qu'aucun JDC courant
+      self.inactive_boutons()
+
+  def inactive_boutons(self):
+      """
+      Inactive les boutons de la liste self.l_boutons_a_activer
+      --> cette méthode est appelée dès qu'il n'y a pas de JDC courant
+      """
+      for but in self.l_boutons_a_activer:
+          but.configure(state='disabled')
+
+  def active_boutons(self):
+      """
+      Active les boutons de la liste self.l_boutons_a_activer
+      --> cette méthode est appelée dès qu'il y a un JDC courant
+      """
+      for but in self.l_boutons_a_activer:
+          but.configure(state='normal')
+
+  def affiche_balloon(self,event,bouton,bulle,pos='left'):
+      """
+      Affiche le balloon bulle associé au bouton bouton
+      """
+      etat = bouton.cget('state')
+      if etat != 'normal' : return
+      geom = bouton.winfo_geometry()
+      l_args = string.split(geom,'+')
+      x = eval(l_args[1])+event.x+10
+      self.balloon = Label(self.parent,
+                           text = bulle,
+                           background="yellow",
+                           borderwidth=2,
+                           relief='ridge')
+      if pos == 'left':
+          self.balloon.place(in_=self.parent,x=x,y=32)
+      else:
+          self.balloon.place(in_=self.parent,x=x,y=32,anchor='ne')
+
+  def efface_balloon(self,event=None):
+      """
+      Efface le balloon courant
+      """
+      if self.balloon :
+          self.balloon.destroy()
+          self.balloon = None
+
+  def view_infos(self):
+      """
+      Permet d'afficher des infos sur la session courante d'EFICAS
+      """
+      self.fen_infos = Pmw.Dialog(self.parent,
+                                  title = 'Informations session EFICAS',
+                                  buttons = ('Fermer',),
+                                  command = self.close_infos)
+      self.fen_infos.withdraw()
+      texte_infos = self.appli.get_texte_infos()
+      Label(self.fen_infos.interior(),
+            text = texte_infos,
+            anchor='center').pack(side='top',anchor='center')
+      self.fen_infos.activate(geometry = 'centerscreenalways')
+
+  def close_infos(self,lbl):
+      """
+      Ferme la fenêtre des infos
+      """
+      self.fen_infos.destroy()
+
+  def creer_boutons_extension(self,l_boutons,extension):
+      for bouton in l_boutons :
+          if not bouton :
+              # on veut afficher un bouton vide (=espace entre boutons)
+              Button(self.barreboutons,
+                     image = images.get_image('New24'),
+                     relief = 'flat').pack(side='left')
+              continue
+          nom_fic,commande,texte,statut = bouton
+          commande=getattr(extension,commande)
+          b = Button(self.barreboutons,
+                     image = images.get_image(nom_fic),
+                     command = commande,
+                     relief='flat')
+          b.pack(side='left')
+          b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t))
+          b.bind("<Leave>", self.efface_balloon)
+          if statut != 'always':
+              self.l_boutons_a_activer.append(b)
+
+      # inactive les boutons qui doivent l'être tant qu'aucun JDC courant
+      self.inactive_boutons()
+
+
diff --git a/Editeur/tooltip.py b/Editeur/tooltip.py
new file mode 100644 (file)
index 0000000..d43992c
--- /dev/null
@@ -0,0 +1,78 @@
+"""
+    Ce module propose la classe TOOLTIP pour
+    mettre en oeuvre les bulles d'aide
+"""
+
+import Tkinter
+
+class TOOLTIP:
+    def __init__(self,widget):
+        self.widget=widget
+        self.text = None
+        self.timer = None
+        self.tooltip = None
+        self.label = None
+        self.bindings = []
+        self.bindings.append(self.widget.bind("<Enter>", self._enter))
+        self.bindings.append(self.widget.bind("<Leave>", self._leave))
+        self.bindings.append(self.widget.bind("<ButtonPress>", self._leave))
+        # user overrideable settings
+        self.time = 1000                    # milliseconds
+        self.relief = Tkinter.SOLID
+        self.justify = Tkinter.LEFT
+        self.fg = "#000000"
+        self.bg = "#ffffe0"
+        self.xoffset = 20
+        self.yoffset = 1
+
+    def setText(self, text):
+        self.text = text
+
+    def _unbind(self):
+        if self.bindings and self.widget:
+            self.widget.unbind("<Enter>", self.bindings[0])
+            self.widget.unbind("<Leave>", self.bindings[1])
+            self.widget.unbind("<ButtonPress>", self.bindings[2])
+            self.bindings = []
+
+    def destroy(self):
+        self._unbind()
+        self._leave()
+
+    def _enter(self, *event):
+        after_cancel(self.timer)
+        self.timer = after(self.widget, self.time, self._showTip)
+
+    def _leave(self, *event):
+        after_cancel(self.timer)
+        self.timer = None
+        if self.tooltip:
+            self.label.destroy()
+            destruct(self.label)
+            self.label = None
+            self.tooltip.destroy()
+            destruct(self.tooltip)
+            self.tooltip = None
+
+    def _showTip(self):
+        if self.tooltip or not self.text:
+            return
+        c = self.widget.__class__
+        if c in (Tkinter.Button,):
+            if self.widget["state"] == Tkinter.DISABLED:
+                return
+        x = self.widget.winfo_rootx()
+        y = self.widget.winfo_rooty() + self.widget.winfo_height()
+        x = x + self.xoffset
+        y = y + self.yoffset
+        self.tooltip = Tkinter.Toplevel()
+        self.tooltip.wm_iconify()
+        self.tooltip.wm_overrideredirect(1)
+        self.tooltip.wm_protocol("WM_DELETE_WINDOW", self.destroy)
+        self.label = Tkinter.Label(self.tooltip, text=self.text,
+                         relief=self.relief, justify=self.justify,
+                         fg=self.fg, bg=self.bg, bd=1, takefocus=0)
+        self.label.pack(ipadx=1, ipady=1)
+        self.tooltip.wm_geometry("%+d%+d" % (x, y))
+        self.tooltip.wm_deiconify()
+
diff --git a/Editeur/treeitemincanvas.py b/Editeur/treeitemincanvas.py
new file mode 100644 (file)
index 0000000..5ec2643
--- /dev/null
@@ -0,0 +1,38 @@
+"""
+"""
+# Modules Python
+import Tkinter,Pmw
+
+# Modules Eficas
+import Objecttreeitem
+import treewidget
+
+class TREEITEMINCANVAS:
+   def __init__(self,object,nom="",parent=None,appli=None,sel=None):
+      self.object=object
+      self.nom=nom
+
+      if not appli:
+         class Appli:
+            def affiche_infos(self,message):
+               pass
+         appli=Appli()
+      self.appli=appli
+
+      if not parent:
+         parent=Tkinter.Tk()
+         Pmw.initialise(parent)
+      self.parent=parent
+
+      self.item=Objecttreeitem.make_objecttreeitem(self.appli,self.nom,self.object)
+      self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1)
+      self.canvas.pack(padx=10,pady=10,fill = 'both', expand = 1)
+      if not sel:
+         def sel(event=None):
+            return
+      self.tree=treewidget.Tree(self.appli,self.item,self.canvas,command=sel)
+      self.tree.draw()
+
+   def mainloop(self):
+      self.parent.mainloop()
+
diff --git a/Editeur/treewidget.py b/Editeur/treewidget.py
new file mode 100644 (file)
index 0000000..a0d6554
--- /dev/null
@@ -0,0 +1,774 @@
+#@ MODIF treewidget Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+import os,sys,string,re,types
+from Tkinter import *
+
+
+import fontes
+import images
+
+#
+__version__="$Name: V1_1p1 $"
+__Id__="$Id: treewidget.py,v 1.1.1.1 2001/12/04 15:38:23 eficas Exp $"
+#
+
+Fonte_Standard = fontes.standard
+
+class Tree :
+    def __init__(self,appli,jdc_item,scrolledcanvas,command = None):
+        self.item = jdc_item
+        self.scrolledcanvas = scrolledcanvas
+        self.canvas = self.scrolledcanvas.component('canvas')
+        self.canvas.bind("<Key-Prior>", self.page_up)
+        self.canvas.bind("<Key-Next>", self.page_down)
+        self.canvas.bind("<Key-Up>", self.unit_up)
+        self.canvas.bind("<Key-Down>", self.unit_down)             
+        self.tree = self
+        self.command = command
+        self.appli = appli
+        self.parent = None
+        self.racine = self
+        self.node_selected = None
+        self.build_children()
+
+    def page_up(self,event):
+        event.widget.yview_scroll(-1, "page")
+    def page_down(self,event):
+        event.widget.yview_scroll(1, "page")
+    def unit_up(self,event):
+        event.widget.yview_scroll(-1, "unit")
+    def unit_down(self,event):
+        event.widget.yview_scroll(1, "unit")              
+
+    def build_children(self):
+        """ Construit la liste des enfants de self """
+        self.children = []
+        child = Node(self,self.item,self.command)
+        self.children.append(child)
+        child.state='expanded'
+
+    def draw(self):
+        """ Dessine l'arbre """
+        lasty = 8
+        x = 5
+        for child in self.children:
+            child.draw(x,lasty)
+            lasty = child.lasty + 15
+            child.trace_ligne()
+        #self.update()
+        self.children[0].select()
+        self.resizescrollregion()
+
+    def deselectall_old(self):
+        """ déselectionne tous les éléments de l'arbre """
+        for child in self.children:
+            child.deselect()
+
+    def deselectall(self):
+        """ déselectionne tous les éléments de l'arbre """
+        if self.node_selected :
+            self.node_selected.deselect()
+            
+    def update(self):
+        """ Update tous les éléments de l'arbre """
+        for child in self.children:
+            child.update()
+
+    def resizescrollregion(self):
+        self.scrolledcanvas.resizescrollregion()
+
+    def select_next(self,event):
+        self.node_selected.select_next()
+
+    def select_previous(self,event):
+        self.node_selected.select_previous()
+
+    def full_creation(self,name,index):
+        # A changer lorsqu'il y aura plusieurs jdc ouverts en même temps
+        self.children[0].full_creation(name,index)
+
+    def verif_all(self):
+        for child in self.children :
+            self.verif_all_children()
+            
+class Node :
+    def __init__(self,parent,item,command=None):
+        self.parent = parent
+        self.item = item
+        self.command = command
+        self.tree = self.parent.tree
+        self.appli = self.parent.appli
+        self.canvas = self.parent.canvas
+        self.init()
+        #self.build_children()
+
+    def init(self):
+        self.state='collapsed'
+        self.displayed = 0
+        self.selected = 0
+        self.x = self.y  =None
+        self.lasty = 0
+        self.children = None
+        self.id = []
+        # etape = noeud d'étape auquel appartient self
+        # = self si c'est lui-même
+        if isinstance(self.parent,Tree) :
+            # on est  sur un noeud de JDC
+            self.racine=self
+            self.etape=None
+            self.nature='JDC'
+        elif isinstance(self.parent.parent,Tree) :
+            # on est sur un noeud d'étape
+            self.racine = self.parent
+            self.etape=self
+            self.nature = 'ETAPE'
+        else :
+            # on est sur un noeud de mot-clé
+            self.racine = self.parent.racine
+            self.etape=self.parent.etape
+            self.nature = 'MOTCLE'
+
+    def build_children(self):
+        """ Construit la liste des enfants de self """
+        self.children = []
+        sublist = self.item._GetSubList()
+        if not sublist : return
+        for item in sublist :
+            child = Node(self,item,self.command)
+            self.children.append(child)
+            
+    #-----------------------------------------------
+    # Méthodes de sélection/déselection d'un noeud
+    #-----------------------------------------------
+    
+    def select(self, event=None):
+        """
+        Rend le noeud courant (self) sélectionné et déselectionne
+        tous les autres
+        """
+        if not self.children : self.build_children()
+        self.tree.deselectall()
+        self.selected = 1
+        self.tree.node_selected = self
+        if self.command:apply(self.command,(self,))
+        self.highlight()
+        self.canvas.focus_force()
+        #self.make_visible()
+
+    def deselect_old(self, event=None):
+        """ Déselectionne self """
+        self.selected = 0
+        if self.displayed == 1:
+            self.dehighlight()
+        for child in self.children:
+            child.deselect()
+
+    def deselect(self, event=None):
+        """ Déselectionne self """
+        self.selected = 0
+        if self.displayed == 1 : self.dehighlight()
+            
+    def make_visible(self):
+        """ Rend l'objet self visible cad déplace le scroll pour que self soit dans
+        la fenêtre de visu"""
+        x0,y0,x1,y1 = self.canvas.bbox(ALL)
+        self.canvas.yview("moveto",self.y/y1)
+        
+    def select_next(self,ind=0):
+        """ on doit chercher à sélectionner dans l'ordre:
+                - son premier fils s'il est affiché
+                - son frère cadet s'il existe
+                - son oncle (benjamin de son père)
+                - ... appel récursif ...
+        """
+        if self.state=='expanded' and len(self.children) > ind:
+            self.children[ind].select()
+        else :
+            index = self.parent.children.index(self) + 1
+            if isinstance(self.parent,TREE) :
+                try:
+                    self.children[ind].select()
+                except:
+                    self.children[0].select()
+            else :                
+                self.parent.select_next(index)
+
+    def select_previous(self):
+        """ on doit d'abord sélectionner(dans l'ordre) :
+             - son frère aîné
+             - son père
+        """
+        index = self.parent.children.index(self) + 1
+        try :
+            self.parent.children[index].select()
+        except:
+            self.parent.select()
+    #-----------------------------------------------
+    # Méthodes de recherche d'informations
+    #-----------------------------------------------
+    def geticonimage(self,name=None):
+        """
+        Retourne l'image qui doit être associée à self
+        """
+        if not name :
+            name = self.item.GetIconName()
+        if not name or name == 'aucune' :
+            return None
+        return images.get_image(name)
+
+    def get_nb_children(self):
+        """ Retourne le nombre d'enfants affichés de self """
+        nb = 0
+        if self.state =='collapsed' :  return nb
+        for child in self.children :
+            nb = nb + 1 + child.get_nb_children()
+        return nb
+
+    def get_liste_id(self):
+        """ Retourne la liste de tous les id (filiation comprise) de self """
+        liste = self.id
+        for child in self.children:
+            liste.extend(child.get_liste_id())
+        return liste
+
+    def get_node_fils(self,name) :
+        """ Retourne le fils de self de nom name s'il existe"""
+        for child in self.children:
+            if child.item.get_nom() == name: return child
+        return None
+    #-----------------------------------------------
+    # Méthodes d'affichage d'un noeud
+    #-----------------------------------------------
+    def draw(self,x,y):
+        """ Permet de tracer le noeud self """
+        # le début du noeud est en x,y
+        self.x = x
+        self.y = y
+        self.lasty = y
+        self.displayed = 1
+        self.id=[]
+        # choix de l'icone à afficher : + ou -
+        if self.item.IsExpandable():
+            if self.state == 'expanded':
+                iconname = "minusnode"
+                callback = self.collapse
+            else:
+                iconname = "plusnode"
+                callback = self.expand
+            image = self.geticonimage(name=iconname)
+            self.icone_id = self.canvas.create_image(self.x, self.y, image=image)
+            self.canvas.tag_bind(self.icone_id, "<1>", callback)
+            self.id.append(self.icone_id)
+        # création de la ligne horizontale
+        self.ligne_id = self.canvas.create_line(self.x,self.y,self.x+10,self.y)
+        self.id.append(self.ligne_id)
+        self.canvas.tag_lower(self.ligne_id)
+        # affichage de l'icone (carre ,rond, ovale ...) de couleur
+        image = self.geticonimage()
+        if image != None :
+            self.image_id = self.canvas.create_image(self.x+15,self.y,image = image)
+            self.canvas.tag_bind(self.image_id,"<1>",self.select)
+            self.id.append(self.image_id)
+        else:
+            self.image_id = None
+        # affichage du texte : nom de l'objet (ETAPE ou MOT-CLE) et sa valeur
+        self.drawtext()
+        if self.state == 'expanded' :
+            if not self.children : self.build_children()
+            if len(self.children) > 0:
+                self.drawchildren()
+                self.lasty = self.children[-1].lasty
+   
+    def drawchildren(self):
+        """ Dessine les enfants de self """
+        y = self.y + 20
+        x = self.x + 15
+        for child in self.children:
+            child.draw(x,y)
+            nb = child.get_nb_children()
+            y = y + 20*(nb+1)
+
+    def drawtext(self):
+        """ Affiche les deux zones de texte après l'icône de couleur de l'objet """
+        if self.image_id != None :
+            textx = self.x + 30
+        else:
+            textx = self.x + 15
+        texty = self.y
+        # nom,fonte et couleur de l'objet du noeud à afficher
+        labeltext,fonte,couleur = self.item.GetLabelText()
+        if labeltext    == ''   : labeltext = '   '
+        if fonte        == None : fonte = Fonte_Standard
+        if couleur      == None : couleur = 'black'
+        # création du widget label
+        self.label = Label(self.canvas,
+                           text = labeltext,
+                           fg = couleur,
+                           bg = 'gray95',
+                           font=fonte)
+        self.label_id = self.canvas.create_window(textx,texty,window=self.label,anchor='w')
+        self.id.append(self.label_id)
+        # bindings sur le widget label
+        self.label.bind("<1>", self.select)
+        self.label.bind("<Enter>",self.enter)
+        self.label.bind("<Leave>",self.leave)
+        # valeur de cet objet à afficher
+        x0, y0, x1, y1 = self.canvas.bbox(self.label_id)
+        textx = max(x1, 200) + 10
+        text = self.item.GetText() or " "
+        self.text = Label(self.canvas, text=text,
+                            bd=0, padx=2, pady=2,background='gray95',
+                            font=fonte)
+        if self.selected:
+            self.highlight()
+        else:
+            self.dehighlight()
+        self.text_id = self.canvas.create_window(textx, texty,anchor="w", window=self.text)
+        self.id.append(self.text_id)
+        
+    def highlight(self,event=None):
+        """ Met en surbrillance self"""
+        if hasattr(self,'label'):
+            self.label.configure(fg='white',bg='#00008b')
+            
+    def dehighlight(self,event=None):
+        """ Rétablit l'affichage normal de self"""
+        if hasattr(self,'label'):
+            self.label.configure(fg='black',bg='gray95')
+
+    def enter(self,event=None):
+        """ Met en surbrillance self et affiche le fr de l'objet """
+        self.highlight()
+        fr = self.item.get_fr()
+        self.appli.affiche_infos(fr)
+        
+    def leave(self,event=None):
+        """ Rétablit l'affichage normal de self et efface le fr de l'objet """
+        if not self.selected :
+            self.dehighlight()
+        self.appli.affiche_infos('')
+
+    def collapse_children(self):
+        """ Collapse récursivement tous les descendants de self """
+        if not self.children : return
+        for child in self.children:
+            child.state='collapsed'
+            child.displayed = 0
+            child.collapse_children()
+            
+    def collapse(self,event = None):
+        """ Collapse self et descendants et retrace self """
+        nb = self.get_nb_children()
+        self.state = 'collapsed'
+        self.collapse_children()
+        self.efface()
+        try:
+            self.move(-20*nb)
+        except:
+            pass
+        self.draw(self.x,self.y)
+        self.select()
+        self.update()
+
+    def expand(self,event = None):
+        """ Expanse self et le retrace """
+        if not self.item.isactif() : return
+        if not self.children : self.build_children()
+        self.state = 'expanded'
+        nb = self.get_nb_children()
+        self.move(20*nb)
+        self.efface()
+        self.draw(self.x,self.y)
+        self.select()
+        self.update()
+
+    def redraw(self,nb):
+        """ Redessine self :  nb est le décalage à introduire
+            en dessous de self pour le redessiner """
+        # nb = nombre d'items de décalage
+        self.move(20*nb)
+        # on efface self et on le redessine
+        self.efface()
+        self.draw(self.x,self.y)
+        self.update()
+        
+    def update_coords(self):
+        """ Permet d'updater les coordonnes de self et de tous ses enfants"""
+        if self.displayed == 0 : return
+        if self.image_id != None :
+            coords = self.canvas.coords(self.image_id)
+            self.x = coords[0]-15
+        else:
+            coords = self.canvas.coords(self.label_id)
+            self.x = coords[0]-15
+        self.y = coords[1]
+        if self.state == 'expanded' :
+            for child in self.children:
+                if child.displayed != 0:
+                    child.update_coords()
+
+    def update_icone(self):
+        """ Met à jour les icônes de tous les noeuds : teste la validité de l'objet
+        Cette méthode est très lente, trop !!"""
+        if self.image_id != None :
+            image = self.geticonimage()
+            self.canvas.itemconfig(self.image_id,image=image)
+        if self.state == 'expanded':
+            for child in self.children:
+                if child.displayed != 0:
+                    child.update_icone()
+
+    def update_texte(self):
+        """ Met à jour les noms des SD et valeurs des mots-clés """
+        text = self.item.GetText()
+        if text == None : text = ''
+        self.text.configure(text=text)
+        if self.state == 'expanded' :
+            for child in self.children:
+                if child.displayed != 0 : child.update_texte()
+        
+    def update(self,event=None) :
+        """ Classe Node :
+            Cette méthode est appelée pour demander l update d un noeud 
+             d'un jeu de commandes
+             Cette demande est transmise au noeud racine (le JDC) qui update
+             tout l arbre représentant le jeu de commandes
+             Pendant cette mise à jour, on appelle la méthode isvalid qui
+             fera l update de tous les objets déclarés modifiés lors des
+             actions précédentes
+             La métode isvalid est en général appelée par l intermédiaire de
+             update_icone -> geticonimage -> GetIconName
+        """
+        self.racine.update_coords()
+        self.racine.trace_ligne()
+        self.racine.update_icone()
+        self.racine.update_texte()
+        self.tree.resizescrollregion()
+
+    def efface(self):
+        """ Efface du canvas les id associés à self : cad les siens et ceux
+            de ses enfants """
+        for id in self.id :
+            self.canvas.delete(id)
+        if not self.children : return
+        for child in self.children:
+            child.efface()
+
+    def move(self,dy):
+        """ Déplace de l'incrément dy tous les id en dessous de self """
+        # il faut marquer tous les suivants de self
+        bbox1 = self.canvas.bbox(ALL)
+        self.canvas.dtag(ALL,'move')
+        self.canvas.delete('line')
+        try:
+            self.canvas.addtag_overlapping('move',bbox1[0],self.y +10,bbox1[2],bbox1[3])
+        except:
+            print self
+            print self.item
+            print self.item.object
+            print self.item.object.definition.label
+            print 'y=',self.y
+            print 'dy=',dy
+        # on déplace tous les items de dy
+        self.canvas.move('move',0,dy)
+        # il faut réactualiser la zone de scroll
+        self.tree.resizescrollregion()
+
+    def trace_ligne(self):
+        """ Dessine les lignes verticales entre frères et entre père et premier fils"""
+        if self.state=='collapsed' : return
+        #if self.displayed == 0 : return
+        if len(self.children)==0 : return
+        # on est bien dans le cas d'un noeud expansé avec enfants ...
+        # il faut rechercher l'ordonnée du dernier fils de self
+        y_end = self.children[-1].y
+        ligne = self.canvas.create_line(self.x+15,self.y,self.x+15,y_end,tags='line')
+        self.canvas.tag_lower(ligne)
+        for child in self.children :
+            try:
+                child.trace_ligne()
+            except:
+                print child
+                print child.item.object
+
+    def make_visible_OBSOLETE(self,nb):
+        """ Cette méthode a pour but de rendre le noeud self (avec tous ses descendants
+        affichés) visible dans le canvas """
+        x = self.canvas.canvasx(self.canvas.cget('width'))
+        y = self.canvas.canvasy(self.canvas.cget('height'))
+        #print 'x,y =',x,y
+        x0,y0,x1,y1 = self.canvas.bbox(ALL)
+        #print 'x0,y1=',x0,y1
+        y_deb = self.y
+        nb = self.get_nb_children()
+        y_fin = y_deb + 20*nb
+        #print 'y_deb,y_fin=',y_deb,y_fin
+        
+    #------------------------------------------------------------------
+    # Méthodes de création et destruction de noeuds
+    # Certaines de ces méthodes peuvent être appelées depuis l'externe
+    #------------------------------------------------------------------
+    def replace_node(self,node1,node2):
+        """ Remplace le noeud 1 par le noeud 2 dans la liste des enfants de self"""
+        index= self.children.index(node1)
+        self.delete_node_child(node1)
+        self.children.insert(index,node2)
+        
+    def full_creation(self,name,pos=None):
+        """
+        Interface avec ACCAS : création de l'objet de nom name et
+        du noeud associé. Retourne le noeud fils ainsi créé
+        """
+        item = self.item.additem(name,pos)
+        if item == None or item == 0:
+            # impossible d'ajouter le noeud de nom : name
+            return 0
+        nature = item.get_nature()
+        #if nature =="COMMANDE" or nature == "OPERATEUR" or nature == "PROCEDURE":
+        if nature in ("COMMANDE","OPERATEUR","PROCEDURE","COMMENTAIRE",
+                      "PARAMETRE","COMMANDE_COMMENTARISEE","PARAMETRE_EVAL"):
+            # on veut ajouter une commande ou un commentaire ou un paramètre
+            # il ne faut pas rechercher un même objet déjà existant
+            # à modifier : il faut tester l'attribut 'repetable' 
+            enfant = None
+        else :
+            enfant = self.get_node_fils(item.get_nom())
+        if enfant :
+            # un fils de même nom existe déjà : on remplace
+            # un MCFACT (ou une MCList) par une (autre) MCList
+            child = Node(self,item,self.command)
+            self.replace_node(enfant,child)
+        else :            
+            child = Node(self, item,self.command)
+            if pos is None:
+                self.children.append(child)
+            else :
+                self.children.insert(pos,child)
+        return child
+
+    def append_brother(self,name,pos='after',retour='non'):
+        """
+        Permet d'ajouter un frère à self
+        par défaut on l'ajoute après self
+        Méthode externe
+        """
+        # on veut ajouter le frère de nom name directement avant ou après self
+        index = self.parent.children.index(self)
+        if pos == 'before':
+            index = index
+        elif pos == 'after':
+            index = index +1
+        else:
+            print str(pos)," n'est pas un index valide pour append_brother"
+            return
+        return self.parent.append_child(name,pos=index,retour=retour)
+    
+    def append_node_child(self,fils,pos=None,verif='oui'):
+        """
+        Fait appel à la création complète de fils et à la vérification
+        des conditions en fonction du contexte
+        Attention : fils peut être un nom ou déjà un object (cas d'une copie)
+        """
+        if not self.children : self.build_children()
+        if pos == None :
+            #pos = len(self.children)
+            if type(fils) == types.InstanceType:
+                pos = self.item.get_index_child(fils.nom)
+            else:
+                pos = self.item.get_index_child(fils)
+        child = self.full_creation(fils,pos)
+        if child == 0 :
+            # on n'a pas pu créer le noeud fils
+            return 0
+        child.displayed = 1
+        self.state = 'expanded'
+        if verif == 'oui':
+            if not child.children : child.build_children()
+            test = child.item.isMCList()
+            if test :
+                child.children[-1].verif_condition()
+            else :
+                child.verif_condition()
+            self.verif_condition()
+        return child
+            
+    def append_child(self,name,pos=None,verif='oui',retour='non'):
+        """
+        Permet d'ajouter un fils à self
+        on peut l'ajouter en fin de liste (défaut) ou en début
+        Méthode externe
+        """
+        if pos == 'first':
+            index = 0
+        elif pos == 'last':
+            index = len(self.children)
+        elif pos != None and type(pos) == types.IntType :
+            # on donne la position depuis l'extérieur
+            # (appel de append_child par append_brother par exemple)
+            index = pos
+        else :
+            if type(name) == types.InstanceType:
+                index = self.item.get_index_child(name.nom)
+            else:
+                index = self.item.get_index_child(name)
+        nbold = self.get_nb_children()
+        self.state='expanded'
+        child = self.append_node_child(name,pos=index)
+        if child == 0 :
+            # on n'a pas pu créer le fils
+            return 0
+        nbnew = self.get_nb_children()
+        self.redraw(nbnew-nbold)
+        child.select()
+        child.expand()
+        #child.make_visible()
+        if retour == 'oui': return child
+
+    def delete_node_child(self,child):
+        """ Supprime child des enfants de self et les id associés """
+        child.efface()
+        child.displayed = 0
+        self.children.remove(child)
+        self.canvas.update()
+        
+    def delete_child(self,child):
+        """ 
+            Supprime child des enfants de self, tous les id associés
+            ET l'objet associé 
+        """
+        if self.item.suppitem(child.item):
+            self.delete_node_child(child)
+            return 1
+        else :
+            return 0
+                    
+    def delete(self):
+        """ Méthode externe pour la destruction du noeud ET de l'objet
+            Gère l'update du canvas"""
+        if self.parent.item.isMCList():
+            pere = self.parent.parent
+            nbold = pere.get_nb_children()
+            if self.parent.delete_child(self):
+                self.parent.traite_mclist()
+            if self.item.get_position() == 'global':
+                self.etape.verif_all()
+            elif self.item.get_position() == 'global_jdc':
+                self.racine.verif_all()
+            else:
+                self.parent.verif_condition()
+            nbnew = pere.get_nb_children()
+        else:
+            pere = self.parent
+            nbold = pere.get_nb_children()
+            if self.parent.delete_child(self):
+                if self.item.get_position() == 'global':
+                    self.etape.verif_all()
+                elif self.item.get_position() == 'global_jdc':
+                    self.racine.verif_all()
+                else:
+                    self.parent.verif_condition()
+            else :
+                print 'Erreur dans la destruction de ',self.item.get_nom(),' dans delete'
+            nbnew = pere.get_nb_children()
+        pere.redraw(nbnew-nbold)
+
+    def copynode(self,node,pos) :
+        """ node est le noeud à copier à la position pos de self ( = parent de node) """
+        objet_copie = node.item.get_copie_objet()
+        child = self.full_creation(node.item,pos)
+        child.displayed = node.displayed
+        #child.image_id = node.image_id
+        #child.label_id = node.label_id
+        if child.item.get_nature() == "MCList":
+            child.item.object[-1].mc_liste = objet_copie.mc_liste
+        else :
+            try :
+                child.item.object.mc_liste = objet_copie.mc_liste
+            except:
+                pass
+    #--------------------------------------------------------------
+    # Méthodes de vérification du contexte et de validité du noeud
+    #--------------------------------------------------------------
+    def traite_mclist(self):
+        """ Dans le cas d'une MCList il faut vérifier qu'elle n'est pas vide
+            ou réduite à un seul élément suite à une destruction
+        """
+        # self représente une MCList
+        if len(self.item) == 0 :
+            # la liste est vide : il faut la supprimer
+            self.delete()
+        elif len(self.item) == 1:
+            # il ne reste plus qu'un élément dans la liste
+            # il faut supprimer la liste et créer directement l'objet
+            index = self.parent.children.index(self)
+            noeud = self.children[0]
+            if self.parent.delete_child(self):
+                self.parent.append_node_child(noeud.item,pos=index,verif='non')
+            #if self.parent.delete_child(self):
+            #    self.parent.copynode(self.children[0],index)
+            #else :
+            #    print 'erreur dans la destruction de :',self.item.get_nom(),' dans traite_mclist'
+        else :
+            return
+
+    def verif_all(self):
+        self.verif_all_children()
+            
+    def verif_all_children(self):
+        if not self.children : self.build_children()
+        if self.nature != 'JDC' :
+            self.verif()
+        for child in self.children :
+            child.verif_all_children()
+
+    def verif(self) :
+        """ 
+            Lance la vérification des conditions des blocs de self et le cas
+            échéant redessine self 
+        """
+        nbold = self.get_nb_children()
+        test = self.verif_condition()
+        nbnew = self.get_nb_children()
+        if test != 0 :
+            self.redraw(nbnew-nbold)
+
+    def verif_condition(self):
+        """
+        on lance la vérification des conditions de chaque bloc de self
+        on crée ou supprime les noeuds concernés
+        (self est d'un niveau inférieur ou égal à l'ETAPE)
+        """
+        if self.item.object.__class__.__name__ == 'ETAPE_NIVEAU': return 0
+        test = 0
+        l_bloc_arajouter,l_bloc_aenlever = self.verif_condition_bloc()
+        if len(l_bloc_arajouter) > 0:
+            test = 1
+            for mc in l_bloc_arajouter:
+                self.append_node_child(mc,verif='non')
+        if len(l_bloc_aenlever) > 0:
+            test = 1
+            for mc in l_bloc_aenlever:
+                mocle = self.get_node_fils(mc)
+                self.delete_child(mocle)
+        l_mc_presents = self.item.get_liste_mc_presents()
+        l_mc_arajouter= self.verif_condition_regles(l_mc_presents)
+        if len(l_mc_arajouter) > 0:
+            test = 1
+            for mc in l_mc_arajouter:
+                self.append_node_child(mc,verif='non')
+        if len(l_mc_arajouter)+len(l_bloc_arajouter)+len(l_bloc_aenlever) != 0 :
+            self.verif_condition()
+        return test
+        
+    def verif_condition_bloc(self):
+        return self.item.verif_condition_bloc()
+
+    def verif_condition_regles(self,l_mc_presents):
+        return self.item.verif_condition_regles(l_mc_presents)
+    
+
diff --git a/Editeur/utils.py b/Editeur/utils.py
new file mode 100644 (file)
index 0000000..9f09ecd
--- /dev/null
@@ -0,0 +1,79 @@
+"""
+    Ce module contient des utilitaires divers
+"""
+import os
+
+def substract_list(liste1,liste2):
+  """ 
+      Enlève tous les éléments de liste2 présents dans liste1 et retourne liste1
+  """
+  for item in liste2:
+    try:
+      liste1.remove(item)
+    except:
+      pass
+  return liste1
+
+def get_rep_user():
+  """
+      Détermine sur quelle plate-forme s'exécute Eficas et recherche
+      le répertoire de l'utilisateur /$home/Eficas_install
+  """
+  if os.name not in ('posix','nt'):
+    print "Système non reconnu par Eficas"
+    print "Prévenir la maintenance"
+    sys.exit(0)
+  if os.name == 'nt':
+    try:
+      drive = os.environ['HOMEDRIVE']
+      nom_user = os.environ['USERNAME']
+      rep_user_eficas = drive+'\\'+nom_user+'\\'+'Eficas_install'
+    except:
+      rep_user_eficas = os.path.join('C:','Eficas_install')
+  else :
+    rep_user_eficas = os.path.join(os.environ['HOME'],'Eficas_install')
+  if os.path.exists(rep_user_eficas):
+    if os.path.isfile(rep_user_eficas) :
+      print "Un fichier de nom %s existe déjà : impossible de créer un répertoire de même nom" %rep_user_eficas
+      sys.exit(0)
+  else :
+    try:
+      os.mkdir(rep_user_eficas)
+    except:
+      print "Création du répertoire %s impossible\n Vérifiez vos droits d'accès" %rep_user_eficas
+  return rep_user_eficas
+
+def read_file(file):
+  """
+      ouvre le fichier file et retourne son contenu
+      si pbe retourne None
+  """
+  try :
+    f=open(file)
+    text=f.read()
+    f.close()
+    return text
+  except:
+    return None
+
+def save_in_file(file,text):
+  """
+      crée le fichier file (ou l'écrase s'il existe) et écrit text dedans
+      retourne 1 si OK 0 sinon
+  """
+  try :
+    f=open(file,'w+')
+    f.write(text)
+    f.close()
+    return 1
+  except:
+    return 0
+
+def extension(pathAndFile):
+    """ Return ext if path/filename.ext is given """
+    return os.path.splitext(pathAndFile)[1][1:]
+
+def stripPath(pathAndFile):
+    """ Return filename.ext if path/filename.ext is given """
+    return os.path.split(pathAndFile)[1]
+
diff --git a/Editeur/widgets.py b/Editeur/widgets.py
new file mode 100644 (file)
index 0000000..5b5d4ea
--- /dev/null
@@ -0,0 +1,808 @@
+#@ MODIF widgets Editeur  DATE 05/09/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# ----------------------------------------------------------
+#   Cette classe sert à définir les widgets utilisés par
+#          EFICAS
+# ----------------------------------------------------------
+
+from Tkinter import *
+import Pmw
+import os,sys,re,string
+import types,fnmatch
+from tkFileDialog import *
+from tkMessageBox import showinfo,askyesno,showerror,askretrycancel
+
+import fontes
+import prefs
+from utils import save_in_file
+from centerwindow import centerwindow
+
+from Noyau.N_utils import repr_float
+    
+class Fenetre :
+    """ Cette classe permet de créer une fenêtre Toplevel dans laquelle
+        on peut afficher un texte et qui permet de le sauver"""
+    def __init__(self,appli,titre="",texte=""):
+        self.appli=appli
+        self.fenetre = Toplevel()
+        self.fenetre.configure(width = 800,height=500)
+        self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
+        self.fenetre.title("Visualisation du "+titre)
+        self.texte = string.replace(texte,'\r\n','\n')
+        self.titre = titre
+        fonte=fontes.standardcourier10
+        # définition des frames
+        self.frame_texte = Frame(self.fenetre)
+        self.frame_boutons = Frame(self.fenetre)
+        self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.9)
+        self.frame_boutons.place(relheight=0.1,relx=0,rely=0.9,relwidth=1.)
+        # définition de la zone texte et du scrollbar
+        self.zone_texte = Text(self.frame_texte,font=fonte)
+        self.zone_texte.bind("<Key-Prior>", self.page_up)
+        self.zone_texte.bind("<Key-Next>", self.page_down)
+        self.zone_texte.bind("<Key-Up>", self.unit_up)
+        self.zone_texte.bind("<Key-Down>", self.unit_down)
+        self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview)
+        #self.scroll_h = Scrollbar (self.frame_texte,command = self.zone_texte.xview)
+        self.scroll_v.pack(side='right',fill ='y')
+        #self.scroll_h.pack(side='bottom',fill ='x')
+        self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10)
+        self.zone_texte.configure(yscrollcommand=self.scroll_v.set)
+        # définition des boutons
+        self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit)
+        self.but_save = Button(self.frame_boutons,text = "sauver",command = self.save)
+        self.but_quit.place(relx=0.4,rely=0.5,anchor='center')
+        self.but_save.place(relx=0.6,rely=0.5,anchor='center')
+        # affichage du texte
+        self.affiche_texte(self.texte)
+        centerwindow(self.fenetre)
+
+    def page_up(self,event):
+        event.widget.yview_scroll(-1, "page")
+    def page_down(self,event):
+        event.widget.yview_scroll(1, "page")
+    def unit_up(self,event):
+        event.widget.yview_scroll(-1, "unit")
+    def unit_down(self,event):
+        event.widget.yview_scroll(1, "unit")
+
+    def wait(self):
+        self.fenetre.grab_set()
+        self.fenetre.wait_window(self.fenetre)
+
+    def quit(self):
+        self.fenetre.destroy()
+
+    def efface_scroll(self):
+        """ Efface le scroll lorsqu'il n'est pas nécessaire : ne marche pas"""
+        self.scroll_v.pack_forget()
+        #self.scroll_h.pack_forget()
+
+    def affiche_texte(self,texte):
+        """ Affiche le texte dans la fenêtre """
+        if texte != "" :
+            self.zone_texte.insert(END,texte)
+            try:
+                self.fenetre.update_idletasks()
+                x0,y0,x1,y1 = self.zone_texte.bbox(END)
+                if (y1-y0) < 300 : self.efface_scroll()
+            except:
+                pass
+
+    def save(self):
+        """ Permet de sauvegarder le texte dans un fichier dont on a demandé le nom
+        à l'utilisateur """
+        file = asksaveasfilename(defaultextension = '.comm',
+                               initialdir = self.appli.CONFIGURATION.rep_user,
+                               title="Sauvegarde du "+self.titre)
+        if file != '':
+            if not save_in_file(file,self.texte) :
+                showerror("Sauvegarde impossible",
+                       "Impossible de sauvegarder le texte dans le fichier spécifié\n"+
+                          "Vérifiez les droits d'écriture")
+            else:
+                showinfo("Sauvegarde effectuée","Sauvegarde effectuée dans le fichier %s" %file)
+
+class FenetreDeSelection(Fenetre):
+    """ Classe dérivée de Fenêtre permettant la récupération d'une zone de texte sélectionnée.\r
+        Cette classe est utilisée pour affecter une liste de valeurs à un mot-clé.\r
+    """\r
+    def __init__(self,panel,item,appli,titre="",texte=""):\r
+        Fenetre.__init__(self,appli,titre=titre,texte=texte)\r
+        self.fenetre.configure(width = 320,height=400)\r
+        centerwindow(self.fenetre)
+        self.panel = panel
+        self.item = item
+        self.fenetre.title(titre)
+        self.but_save.configure(text="Ajouter",command=self.traite_selection)\r
+        # séparateur par défaut\r
+        self.separateur = ";"\r
+        # création de la zone de saisie du séparateur\r
+        l_separateurs_autorises = self.get_separateurs_autorises()\r
+        self.choix_sep = Pmw.ComboBox(self.frame_boutons,\r
+                                      label_text = "Séparateur :",\r
+                                      labelpos = 'w',\r
+                                      listheight = 100,\r
+                                      selectioncommand = self.choose_separateur,\r
+                                      scrolledlist_items = l_separateurs_autorises)\r
+        self.choix_sep.component('entry').configure(width=6)\r
+        self.choix_sep.place(relx=0.01,rely=0.5,anchor='w')\r
+        self.choix_sep.selectitem(self.separateur)\r
+        # Replacement\r
+        self.but_quit.place_forget()\r
+        self.but_save.place_forget()\r
+        self.but_save.place(relx=0.6,rely=0.5,anchor='center')\r
+        self.but_quit.place(relx=0.8,rely=0.5,anchor='center')\r
+\r
+    def get_separateurs_autorises(self):\r
+        """\r
+        Retourne la liste des séparateurs autorisés\r
+        """\r
+        return ['espace',';',',']\r
+\r
+    def choose_separateur(self,nom_sep):\r
+        """\r
+        Affecte à self.separateur le caractère séparateur correspondant à nom_sep\r
+        """\r
+        if nom_sep == 'espace' :\r
+            self.separateur = ' '\r
+        else:\r
+            self.separateur = nom_sep\r
+        \r
+    def traite_selection(self):\r
+        """ Cette méthode effectue tous les traitements nécessaires pour vérifier\r
+            et affecter la liste de valeurs à l'objet réprésenté par self.item\r
+        """\r
+        # Récupère la liste des chaines de caractères de la zone sélectionnée\r
+        message,liste = self.recupere_liste()\r
+        if self.test_probleme(message,"Sélectionnez des données") == 0:\r
+            return\r
+        # Vérifie que le nombre de données est dans les limites attendues\r
+        message = self.verif_liste(liste)\r
+        if self.test_probleme(message,"Vérifiez le nombre de données") == 0:\r
+            return\r
+        # Crée une liste de valeurs du type attendu\r
+        message,liste_valeurs = self.creation_liste_valeurs(liste)\r
+        if self.test_probleme(message,"Vérifiez le type des données") == 0:\r
+            return\r
+        # Vérifie que chaque valeur est dans le domaine exigé\r
+        message = self.verif_valeurs(liste_valeurs)\r
+        if self.test_probleme(message,"Vérifiez le domaine des valeurs") == 0:\r
+            return\r
+        # Ajoute les valeurs dans la liste de valeurs du mot-clé\r
+        self.ajouter_valeurs(liste_valeurs)\r
+        self.appli.affiche_infos("Liste de valeurs acceptée")\r
+\r
+    def test_probleme(self, message, message_eficas):\r
+        """ Cette méthode affiche un message d'erreur si message != ''\r
+            et retourne 0, sinon retourne 1 sans rien afficher.\r
+        """\r
+        if message != "":\r
+            showinfo("Problème",message)\r
+            self.fenetre.tkraise()\r
+            self.appli.affiche_infos(message_eficas)\r
+            return 0\r
+        else:\r
+            return 1\r
+\r
+    def recupere_liste(self):\r
+        """ Cette méthode récupère le texte de la zone sélectionnée, construit et\r
+            retourne une liste avec les chaines qui se trouvent entre les séparateurs.\r
+            S'il n'y a pas de données selectionnées, elle retourne un message d'erreur\r
+            et une liste vide.\r
+        """\r
+        message = ""\r
+        try:\r
+            selection=self.fenetre.selection_get()\r
+        except:\r
+            message = "Pas de donnée sélectionnée"\r
+            return message,None\r
+        # les retours chariots doivent être interprétés comme des séparateurs\r
+        selection = string.replace(selection,'\n',self.separateur)\r
+        # on splitte la sélection suivant le caractère séparateur\r
+        liste_chaines = string.split(selection,self.separateur)\r
+        l_chaines = []\r
+        for chaine in liste_chaines:\r
+            chaine = string.strip(chaine)\r
+            if chaine != '' : l_chaines.append(chaine)\r
+        return message,l_chaines\r
+\r
+    def verif_liste(self, liste):\r
+        """ Cette méthode effectue des tests sur le nombre d'éléments de la liste\r
+            et retourne 1 si la liste est correcte, sinon 0 et le message d'erreur\r
+            correspondant.\r
+        """\r
+        message = ""\r
+        # nombre d'éléments sélectionnés\r
+        nombre_elements = len(liste)\r
+        # nombre d'éléments déja dans la liste du panel\r
+        nombre_in_liste = len(self.panel.Liste_valeurs.get_liste())\r
+        multiplicite = self.item.GetMultiplicite()\r
+        if (nombre_elements % multiplicite) != 0:\r
+            message = "Vous devez sélectionner "+str(multiplicite)+" * n données"\r
+            return message\r
+        nombre_valeurs = nombre_elements / multiplicite\r
+        cardinalite = self.item.GetMinMax()\r
+        if nombre_valeurs < cardinalite[0]:\r
+            message = "Vous devez sélectionner au moins "+str(cardinalite[0])+" valeurs"\r
+            return message\r
+        if cardinalite[1] != "**" and nombre_valeurs > (long(cardinalite[1])-nombre_in_liste):\r
+            message = "La liste ne peut avoir plus de "+str(cardinalite[1])+" valeurs"\r
+            return message\r
+\r
+        return message\r
+\r
+    def creation_liste_valeurs(self, liste):\r
+        """ Cette méthode crée et retourne une liste de valeurs du type attendu\r
+            par le mot-clé. La liste de valeurs est créée à partir de la liste\r
+            de chaines de caractères transmise.\r
+        """\r
+        type_attendu = self.item.GetType()[0]\r
+        if type_attendu == 'R':\r
+            return self.convertir(liste, f_conversion= float)\r
+        elif type_attendu == 'I':\r
+            return self.convertir(liste, f_conversion= int)\r
+        elif type_attendu == 'TXM':\r
+            return self.convertir(liste)\r
+        else:\r
+            message = "Seuls les entiers, les réels et les chaines de caractères sont convertis"\r
+            return message,None\r
+\r
+    def convertir(self, liste, f_conversion=None):\r
+        """ Cette méthode essaie de convertir les éléments de la liste avec la\r
+            fonction f_conversion si elle existe, et retourne la liste des\r
+            éléments dans le type voulu en cas de succès, sinon retourne None.\r
+        """\r
+        liste_valeurs = []\r
+        message = ""\r
+        for chaine in liste:\r
+            if f_conversion:\r
+                try:\r
+                    liste_valeurs.append(f_conversion(chaine))\r
+                except:\r
+                    message = "Impossible de convertir "+chaine+" dans le type attendu"\r
+                    return message,None\r
+            else:\r
+                liste_valeurs.append(chaine)\r
+        return message,liste_valeurs\r
+\r
+    def verif_valeurs(self, liste_valeurs):\r
+        """ Cette méthode teste tous les éléments de la liste, et retourne 1 si chaque\r
+            élément est dans le domaine voulu.\r
+        """\r
+        message = ""\r
+        for valeur in liste_valeurs:\r
+            test = self.item.IsInIntervalle(valeur)\r
+            if test == 0:\r
+                intervalle = str(self.item.GetIntervalle()[0])+","+str(self.item.GetIntervalle()[1])\r
+                message = "La valeur "+str(valeur)+" n'est pas dans l'intervalle ["+intervalle+"]"\r
+                return message\r
+        return message\r
+\r
+    def ajouter_valeurs(self, liste_valeurs):\r
+        """ Cette méthode ajoute les nouvelles valeurs à la liste existante."""\r
+        liste = self.panel.Liste_valeurs.get_liste()\r
+        liste.extend(liste_valeurs)\r
+        self.panel.Liste_valeurs.put_liste(liste)
+
+class Formulaire:
+    """\r
+    Cette classe permet de créer une boîte Dialog dans laquelle
+    on affiche un formulaire à remplir par l'utilisateur\r
+    """
+    def __init__(self,fen_pere,obj_pere=None,titre="",texte="",items=(),mode='query',commande=None):\r
+        if items in ((),[]) : return
+        self.items = items
+        self.titre = titre
+        self.texte = texte
+        self.fen_pere = fen_pere
+        self.obj_pere = obj_pere
+        self.mode= mode
+        self.command = commande
+        self.display()
+
+    def display(self):\r
+        self.init_validateurs()
+        self.init_fenetre()
+        self.init_texte()
+        self.init_items_formulaire()
+        self.fenetre.activate(geometry='centerscreenalways')
+\r
+    def init_validateurs(self):\r
+        """\r
+        Crée le dictionnaire des validateurs des objets reconnus par le formulaire\r
+        """\r
+        self.d_validateurs = {}\r
+        self.d_validateurs['rep']  = self.repvalidator\r
+        self.d_validateurs['file'] = self.filevalidator\r
+        self.d_validateurs['cata']= self.catavalidator\r
+        
+    def init_fenetre(self):\r
+        """\r
+        Crée la fenêtre Dialog\r
+        """
+        if self.mode == 'query':
+            buttons=('Valider','Annuler')
+            defaultbutton = 'Valider'
+        elif self.mode == 'display':
+            if self.command :
+                buttons=(self.command[0],'OK')
+                defaultbutton = 'OK'
+            else:
+                buttons=('OK')
+                defaultbutton = 'OK'
+        self.fenetre = Pmw.Dialog(self.fen_pere,
+                                  buttons=buttons,
+                                  defaultbutton = defaultbutton,
+                                  title = self.titre,
+                                  command = self.execute)\r
+        self.fenetre.withdraw()
+        
+    def init_texte(self):\r
+        """\r
+        Crée le label qui affiche le texte à l'intérieur du panneau\r
+        """
+        fonte=fontes.standard\r
+        fr_texte = Frame(self.fenetre.interior(),height=60)\r
+        fr_texte.pack(side='top',fill='x',expand=1)
+        Label(fr_texte,text = self.texte, font=fonte).place(relx=0.5,rely=0.5,anchor='center')
+\r
+    def init_items_formulaire(self):\r
+        """\r
+        Crée et affiche les items dans la boîte de dialogue\r
+        """\r
+        self.radiobut = 0\r
+        self.widgets = []\r
+        self.item_widgets = {}\r
+        length_maxi = 0\r
+        for item in self.items:
+            if len(item[0])>length_maxi : length_maxi = len(item[0])\r
+        window = self.fenetre.interior()\r
+        for item in self.items :\r
+            label,nature,nom_var,defaut = item\r
+            # création de la frame\r
+            fr_item = Frame(window,height=40,width=700)\r
+            fr_item.pack(side='top',fill='x',expand=1)\r
+            # création du label\r
+            Label(fr_item,text = label).place(relx=0.05,rely=0.4)\r
+            if nature in ('rep','file','cata'):
+                # création de l'entry\r
+                e_item = Entry(fr_item) \r
+                e_item.place(relx=0.5,rely=0.4,relwidth=0.45)\r
+                self.widgets.append(e_item)\r
+                self.item_widgets[item] = e_item\r
+                if defaut : e_item.insert(0,str(defaut))\r
+            elif nature == 'YesNo':\r
+                # création de la StringVar\r
+                var = StringVar()\r
+                setattr(self,'item_'+nom_var,var)\r
+                var.set(defaut)\r
+                # création du radiobouton\r
+                rb1 = Radiobutton(fr_item,text='OUI',variable=var,value='OUI')\r
+                rb2 = Radiobutton(fr_item,text='NON',variable=var,value='NON')\r
+                rb1.place(relx=0.65,rely=0.5,anchor='center')\r
+                rb2.place(relx=0.80,rely=0.5,anchor='center')\r
+                self.widgets.append((rb1,rb2))\r
+                self.item_widgets[item] = var\r
+        # détermination de la méthode à appliquer sur les boutons\r
+        if self.mode == 'query':\r
+            function = self.active\r
+        elif self.mode == 'display':\r
+            function = self.inactive\r
+        else:\r
+            return\r
+        # on applique la méthode sur les boutons (activation ou désactivation)    \r
+        for widget in self.widgets :\r
+            if type(widget) == types.TupleType:\r
+                for widg in widget :\r
+                    apply(function,(widg,),{})\r
+            else:\r
+                apply(function,(widget,),{})\r
+\r
+    def active(self,widget):\r
+        """\r
+        Active le widget passé en argument\r
+        """\r
+        widget.configure(state='normal',bg='white')\r
+\r
+    def inactive(self,widget):\r
+        """\r
+        Inactive le widget passé en argument\r
+        """\r
+        if not isinstance(widget,Radiobutton) :\r
+            widget.configure(state='disabled',bg='gray95')\r
+        else :\r
+            widget.configure(state='disabled')\r
+\r
+# --------------------------------------------------------------------------------\r
+#       Validateurs des noms de répertoire, de fichiers et de catalogues\r
+# --------------------------------------------------------------------------------\r
+
+    def repvalidator(self,text):
+        """\r
+        Teste si text peut faire référence à un répertoire ou non\r
+        Retourne 1 si valide, 0 sinon\r
+        """\r
+        return os.path.isdir(text),'Répertoire introuvable : %s' %text
+
+    def filevalidator(self,text):
+        """\r
+        Teste si text peut faire référence à un fichier ou non\r
+        Retourne 1 si valide, 0 sinon\r
+        """\r
+        return os.path.isfile(text),'Fichier introuvable : %s' %text
+\r
+    def catavalidator(self,text):\r
+        """\r
+        Teste si  text est un chemin d'accès valide à un catalogue\r
+        Retourne 1 si valide, 0 sinon\r
+        """\r
+        return os.path.isfile(text),"Catalogue introuvable : %s" %text\r
+\r
+# --------------------------------------------------------------------------------\r
+#       Méthodes callbacks des boutons et de fin\r
+# --------------------------------------------------------------------------------\r
+        
+    def execute(self,txt):\r
+        """\r
+        Cette commande est activée à chaque clic sur un bouton.\r
+        Redirige l'action sur la bonne méthode en fonction du bouton activé\r
+        """
+        if txt == 'Valider':
+            self.fini()
+        elif txt in ('OK','Annuler'):
+            self.quit()
+        elif txt == 'Modifier':
+            self.resultat = apply(self.command[1],(),{})
+            self.fenetre.destroy()
+        else :
+            print "Nom de bouton inconnu"
+            self.quit()
+
+    def fini(self):\r
+        """\r
+        Commande qui termine le panneau et sauvegarde les nouvelles options\r
+        dans l'objet resultat (dictionnaire)\r
+        """
+        dico={}
+        for item,widget in self.item_widgets.items():\r
+            nom_var = item[2]\r
+            type_var = item[1]
+            valeur = widget.get()\r
+            if self.d_validateurs.has_key(type_var):\r
+                test = self.d_validateurs[type_var](valeur)\r
+                if not test :\r
+                    # une entrée n'est pas valide --> on la met en surbrillance et on quitte la méthode\r
+                    # sans tuer la fenêtre bien sûr\r
+                    widget.selection_range(0,END)\r
+                    return
+            dico[nom_var] = valeur
+        self.fenetre.destroy()    
+        self.resultat=dico\r
+        
+    def quit(self):
+        self.fenetre.destroy()
+        self.resultat=None
+        
+class ListeChoix :
+    """ Cette classe est utilisée pour afficher une liste de choix passée en paramètre
+        en passant les commandes à lancer suivant différents bindings """
+    def __init__(self,parent,page,liste,liste_commandes=[],liste_marques =[],active ='oui',filtre='non',titre=''):
+        self.parent = parent
+        self.page = page
+        self.liste = liste
+        self.dico_labels={}
+        self.selection = None
+        self.liste_commandes = liste_commandes
+        self.liste_marques = liste_marques
+        self.arg_selected=''
+        self.active = active
+        self.titre = titre
+        self.filtre = filtre
+        self.init()
+
+    def init(self):        
+        self.make_label_titre()
+        self.make_entry_filtre()
+        self.make_text_box()
+        try:
+            self.entry.component('entry').focus()
+        except:
+            pass
+
+    def make_label_titre(self):
+        """ Crée le label correspondant au titre """
+        if self.titre == '' : return
+        fonte_titre = fontes.standard_gras_souligne
+        self.label = Label(self.page,
+                           text = self.titre,
+                           font = fonte_titre)
+        self.label.pack(side='top',pady=2)
+        
+    def make_entry_filtre(self):
+        """ Crée l'entry permettant à l'utilisateur d'entrer un filtre de sélection dans la liste """
+        if self.filtre != 'oui' : return
+        self.entry = Pmw.EntryField(self.page,labelpos='w',
+                                    label_text="Filtre :",
+                                    command=self.entry_changed)
+        self.entry.pack(side='top',pady=2)
+        
+    def make_text_box(self):
+        """ Crée la fenêtre texte dans laquelle sera affichée la liste """
+        self.MCbox = Text (self.page,relief='sunken',bg='gray95',bd=2)
+        self.MCscroll = Scrollbar (self.page,command = self.MCbox.yview)
+        self.MCscroll.pack(side='right',fill ='y',pady=2)
+        self.MCbox.pack(fill='y',expand=1,padx=2,pady=2)
+        self.MCbox.configure(yscrollcommand=self.MCscroll.set)
+
+    def affiche_liste(self):
+        """ Affiche la liste dans la fenêtre"""
+        i=0
+        self.MCbox.config(state=NORMAL)
+        self.MCbox.delete(1.0,END)
+        for objet in self.liste :
+          if type(objet) == types.InstanceType:
+              try:
+                  mot = objet.nom
+              except:
+                  mot = str(objet)
+          elif type(objet) in (types.StringType,types.IntType):
+              mot = objet
+          elif type(objet) == types.FloatType :
+              mot = repr_float(objet)
+          else:
+              mot=`objet`
+          label = Label(self.MCbox,
+                        text = mot,
+                        fg = 'black',bg = 'gray95',justify = 'left')
+          self.dico_labels[mot]=label
+          self.MCbox.window_create(END,
+                                   window=label,
+                                   stretch = 1)
+          self.MCbox.insert(END,'\n')
+          if self.active == 'oui':
+              label.bind(self.liste_commandes[0][0],lambda e,s=self,c=self.liste_commandes[0][1],x=objet,l=label : s.selectitem(x,l,c))
+              label.bind(self.liste_commandes[1][0],lambda e,s=self,c=self.liste_commandes[1][1],x=objet,l=label : s.deselectitem(l,x,c))
+              label.bind(self.liste_commandes[2][0],lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitem(x,l,c))
+          try :
+              self.liste_marques.index(i)
+              self.markitem(label)
+          except:
+              pass
+          i=i+1
+        self.MCbox.config(state=DISABLED)
+        self.selection = None
+
+    def chooseitem(self,mot,label,commande):
+        """ Active la méthode de choix passée en argument"""
+        commande(mot)
+        
+    def selectitem(self,mot,label,commande) :
+        """ Met l'item sélectionné (représenté par son label) en surbrillance
+            et lance la commande associée au double-clic"""
+        if self.selection != None :
+            self.deselectitem(self.selection[1],self.selection[0],self.selection[2],)
+        self.highlightitem(label)
+        self.selection = (mot,label,commande)
+        self.arg_selected = mot
+        commande(mot)
+
+    def highlightitem(self,label) :
+        """ Met l'item représenté par son label en surbrillance """
+        label.configure(bg='#00008b',fg='white')
+        
+    def markitem(self,label):
+        """ Met l'item (représenté par son label) en rouge """
+        label.configure(bg='gray95',fg='red')
+        
+    def deselectitem(self,label,mot='',commande=None) :
+        """ Remet l'item (représenté par son label) en noir"""
+        label.configure(bg='gray95',fg='black')
+        self.arg_selected = ''
+        if commande != None : commande(mot)
+
+    def entry_changed(self,event=None):
+        """ Cette méthode est invoquée chaque fois que l'utilisateur modifie le contenu
+        de l'entry et frappe <Return>"""
+        if self.arg_selected != '' : self.deselectitem(self.dico_labels[self.arg_selected])
+        filtre = self.entry.get()+"*"
+        FILTRE = string.upper(filtre)
+        for arg in self.liste :
+            if fnmatch.fnmatch(arg,filtre) or fnmatch.fnmatch(arg,FILTRE) :
+                self.highlightitem(self.dico_labels[arg])
+                index = self.MCbox.index(self.dico_labels[arg])
+                self.MCbox.see(index)
+                self.arg_selected = arg
+                break
+
+    def get_liste_old(self):
+        return self.liste
+
+    def get_liste(self):
+        l=[]
+        for val in self.liste:
+            try:
+                val = eval(val)
+                l.append(val)
+            except:
+                l.append(val)
+        return l
+    
+    def put_liste(self,liste):
+        self.liste = liste
+        self.affiche_liste()
+        
+class Affichage :
+  """ Cette classe permet d'afficher au lancement d'EFICAS le message
+      d'attente et la barre de progression"""
+  def __init__(self,master,message,barre ='oui'):
+      from Tools.foztools.foztools import Slider
+      fonte=fontes.standard12_gras
+      self.master=master
+      self.frame = Frame(self.master)
+      self.frame.pack(expand=1,fill='both')
+      self.mess = Label(self.frame,text=message,justify='center',
+                        bd=2,relief='groove',font=fonte)
+      self.mess.pack(in_ = self.frame,side='top',expand=1,fill='both')
+      self.progress = Slider(self.frame,value=0,max=100,orientation='horizontal',
+                             fillColor='#00008b',width=200,height=30,
+                             background='white',labelColor='red')
+      if barre == 'oui':
+          self.progress.frame.pack(in_=self.frame,side='top')
+      self.master.update()
+      if barre == 'oui':
+          self.progress.frame.after(1000,self.update)
+
+  def configure(self,**options):
+      if options.has_key('message'):
+          self.mess.configure(text=options['message'])
+      if options.has_key('barre'):
+          if options['barre'] == 'oui' :
+              self.progress.frame.pack(in_=self.frame,side='top')
+          elif options['barre'] == 'non' :
+              self.progress.frame.pack_forget()
+      self.master.update_idletasks()
+      
+  def quit(self):
+      self.frame.destroy()
+      self.master.update()
+
+  def update(self,event=None):
+      """ Permet de faire avancer la barre de progression """
+      try :
+          bar=self.progress
+          bar.value = bar.value+self.increment
+          bar.update()
+          self.master.after(100,self.update)
+      except:
+          pass
+
+  def configure_barre(self,nb):
+      """ Calcule l'incrément de progression de la barre en fonction
+          du nombre d'opérations à effectuer afin que le compteur
+          soit à 100% à la fin des opérations"""
+      self.increment = 100./nb
+      self.progress.update()
+
+class Ask_Format_Fichier :
+    """\r
+    Cette classe permet de créer une fenêtre Toplevel dans laquelle
+    on propose le choix du format de fichier de commandes à ouvrir\r
+    """
+    def __init__(self,appli):
+        self.fenetre = Toplevel()
+        self.fenetre.configure(width = 250,height=150)
+        self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
+        self.fenetre.title("Choix du format du fichier de commandes")
+        # définition des frames
+        self.frame_texte = Frame(self.fenetre)
+        self.frame_radioboutons = Frame(self.fenetre)
+        self.frame_bouton_ok = Frame(self.fenetre)
+        self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.3)
+        self.frame_radioboutons.place(relheight=0.5,relx=0,rely=0.3,relwidth=1.)
+        self.frame_bouton_ok.place(relheight=0.2,relx=0,rely=0.8,relwidth=1.)
+        # définition de la zone texte et du scrollbar
+        zone_texte = Label(self.frame_texte,text = "Format du fichier à ouvrir :")
+        zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10)
+        # définition des radioboutons
+        Radiobutton(self.frame_radioboutons,text='Format Aster (Code_Aster --> v5)',
+                    variable=appli.format_fichier,value='Aster').pack(anchor='n')
+        Radiobutton(self.frame_radioboutons,text='Format Python (Code_Aster v6-->)',
+                    variable=appli.format_fichier,value='Python').pack(anchor='n')
+        # création du bouton OK
+        Button(self.frame_bouton_ok,text='OK',command=self.quit).pack(anchor='n')
+        # centrage de la fenêtre
+        centerwindow(self.fenetre)
+
+    def quit(self):
+        self.fenetre.destroy()
+
+class BARRE_K2000(Toplevel):
+    def __init__(self,master=None,text = ""):
+        Toplevel.__init__(self,master,relief='groove')
+        self.master.iconify()
+        self.geometry("250x100+0+0")
+        self.protocol("WM_DELETE_WINDOW",self.quit)
+        # frame principale dans self (= Toplevel)
+        self.frame = Frame(self)
+        self.frame.place(relwidth=1,relheight=1)
+        # frame contenant le texte à afficher 
+        self.frame_text = Frame(self.frame)
+        self.frame_text.place(relwidth=1,relheight=0.75,rely=0)
+        # frame contenant le canvas de la barre
+        self.frame_canv = Frame(self.frame)
+        self.frame_canv.place(relwidth=1,relheight=0.25,rely=0.75)
+        # canvas dans lequel sera affichée la barre K2000
+        self.canvas = Canvas(self.frame_canv)
+        self.canvas.place(relx=0.5,rely=0.5,relheight=0.8,relwidth=0.8,anchor='center')
+        # on affiche le texte et la barre
+        self.build_text(text)
+        self.build_batons()
+        #self.overrideredirect(1)
+        # on active la barre ...
+        self.master.after(1000,self.launch)
+        # on centre la fenêtre
+        centerwindow(self)
+        self.focus()
+
+    def build_text(self,text):
+        """
+        Affichage de text dans frame_text
+        """
+        self.texte_var = StringVar()
+        self.texte_var.set(text)
+        Label(self.frame_text,textvariable=self.texte_var).place(relx=0.5,rely=0.5,anchor='center')
+        
+    def build_batons(self):
+        """
+        Construit la suite de bâtons dans le canvas
+        """
+        self.l_batons=[]
+        self.black = -1
+        self.sens = 'D'
+        self.quit = 0
+        for i in range(0,40):
+            id = self.canvas.create_rectangle(i*5,0,(i+1)*5,20,fill='gray90',outline='')
+            self.l_batons.append(id)
+
+    def launch(self):
+        """
+        Active la barre K2000 en affichant les bâtons avec des couleurs en dégradé
+        """
+        if self.quit == 1 :
+            self.destroy()
+            self.master.deiconify()
+            return
+        if self.sens == 'D':
+            self.black = self.black+1
+            l_bat = self.l_batons[0:self.black+1]
+            l_bat.reverse()
+        elif self.sens == 'G':
+            self.black = self.black-1
+            l_bat = self.l_batons[self.black:]
+        i=0
+        for bat in l_bat :
+            num_color = 5+i*10
+            if num_color < 10 : color = 'black'
+            elif num_color > 90 : color = 'white'
+            else: color = 'gray'+`num_color`
+            self.canvas.itemconfigure(bat,fill=color)
+            i=i+1
+        if self.black == len(self.l_batons) :
+            self.sens = 'G'
+        if self.black == 0 and self.sens == 'G':self.sens = 'D'
+        self.after(80,self.launch)
+
+    def update_text(self,new_text):
+        """
+        Remplace le texte affiché par new_text
+        """
+        self.texte_var.set(new_text)
+        
+    def quit(self):
+        self.quit = 1        
diff --git a/Exemples/README b/Exemples/README
new file mode 100644 (file)
index 0000000..01553ea
--- /dev/null
@@ -0,0 +1,4 @@
+Ce répertoire contient une série d'exemples localisés
+dans des sous-répertoires de nom exNNN où NNN est le numéro
+de l'exemple
+
diff --git a/Exemples/__init__.py b/Exemples/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/cyclops/__init__.py b/Exemples/cyclops/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/cyclops/main.py b/Exemples/cyclops/main.py
new file mode 100644 (file)
index 0000000..f37253d
--- /dev/null
@@ -0,0 +1,82 @@
+"""
+   Vérification des cycles de références d'objets dans Accas
+
+   Cet exemple met en oeuvre plusieurs éléments de définition et
+   après l'opération de vérification du dictionnaire d
+   et l'appel à la méthode supprime de l'objet o 
+   exécute l'utilitaire Cyclops pour vérifier qu'il ne reste plus
+   de cycles de références.
+"""
+
+import sys
+sys.path[:0]=['../..','../../..']
+
+from Accas import SIMP,FACT,BLOC
+from Accas import AU_MOINS_UN
+
+# Construction objet de définition
+
+cata= FACT(mcf1=FACT(a=SIMP(typ='I'),b=SIMP(typ='I')),
+           mcf2=FACT(c=SIMP(typ='I'),d=SIMP(typ='I')),
+           a    =SIMP(typ='I'),
+           bloc1=BLOC(condition="a==1",
+                       c=SIMP(typ='I'),
+                       d=SIMP(typ='I')
+                     ),
+           sect3=FACT(c=SIMP(typ='I'),d=SIMP(typ='I')),
+           regles=AU_MOINS_UN('sect3'),
+          )
+
+# Vérification objet de définition
+cr=cata.report()
+if cr.estvide():
+   print "L'objet de définition est valide "
+else:
+   print cr
+
+
+d= {'mcf1':{'a':1,'b':2},
+    'mcf2':({'c':3},{'c':5}),
+    'sect3':{'c':3,'d':5},
+    'a':1,
+    'c':2,
+   }
+
+# Création de l'objet MCFACT de nom mcf1
+o=cata(d,'mcf1',None)
+# Vérification objet MCFACT
+cr= o.report()
+if cr.estvide():
+   print "L'objet MCFACT basé sur le dictionnaire %s est valide " % d
+else:
+   print "L'objet MCFACT basé sur le dictionnaire %s n'est pas valide " % d
+   print cr
+
+o.supprime()
+
+def testcycle():
+   """
+       Cette fonction permet de détecter les cycles de références entre objets
+       à l'aide du module Cyclops
+   """
+   from Misc import Cyclops
+   global o,cr,cata
+   z=Cyclops.CycleFinder()
+   z.register(o)
+   z.register(cata)
+   del o,cr,cata
+   z.find_cycles()
+   z.show_stats()
+   z.show_cycles()
+   z.show_cycleobjs()
+   z.show_sccs()
+   z.show_arcs()
+   print "dead root set objects:"
+   for rc, cyclic, x in z.get_rootset():
+      if rc == 0:
+         z.show_obj(x)
+   z.find_cycles(1)
+   z.show_stats()
+
+testcycle()
+
diff --git a/Exemples/cyclops2/__init__.py b/Exemples/cyclops2/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/cyclops2/main.py b/Exemples/cyclops2/main.py
new file mode 100644 (file)
index 0000000..7a5bf30
--- /dev/null
@@ -0,0 +1,109 @@
+"""
+   Vérification des cycles de référence d'objets sur 
+   un exemple avec des opérateurs
+"""
+
+import sys
+sys.path[:0]=['../..','../../..']
+
+from Accas import SIMP,FACT,OPER
+
+# Construction objet de définition
+
+class concept:
+   def __init__(self,etape):
+      self.etape=etape
+   def is_object(sd):
+      """ Retourne 1 si sd est du bon type par rapport à la classe """
+      return 0
+   def supprime(self):
+      self.etape=None
+
+OP1 = OPER(nom='OP1',op=1,sd_prod=concept,reentrant='f',
+           a=SIMP(typ='I'),
+           c=SIMP(typ='I',position='global'),
+           b=SIMP(typ=concept),
+          )
+
+# Vérification objet de définition
+cr=OP1.report()
+if cr.estvide():
+   print "L'objet de définition est valide "
+else:
+   print cr
+
+class context:
+   def __init__(self):
+      self.etapes=[]
+      self.mc_globaux={}
+      self.cata_ordonne_dico=None
+      self.par_lot="OUI"
+
+   def register(self,etape):
+      self.etapes.append(etape)
+      return self.etapes.index(etape)
+   def get_jdc_root(self):
+      return self
+   def create_sdprod(self,etape,nomsd):
+      sd= etape.get_sd_prod()
+      if sd != None and etape.reuse == None:
+         # ATTENTION : On ne nomme la SD que dans le cas de non reutilisation d un concept
+         sd.nom=nomsd
+      return sd
+
+
+cont=context()
+CONTEXT.set_current_step(cont)
+
+sd=concept(None)
+# Création de l'objet ETAPE
+co1=OP1(a=1,b=sd)
+
+# Vérification objet ETAPE
+e1=cont.etapes[0]
+cr= e1.report()
+if cr.estvide():
+   print "L'objet ETAPE  est valide " 
+else:
+   print "L'objet ETAPE  n'est pas valide " 
+   print cr
+
+# Test avec reutilisation de concept
+co=OP1(reuse=co1,a=1,b=sd)
+e2=cont.etapes[1]
+cr= e2.report()
+if cr.estvide():
+   print "L'objet ETAPE  est valide "
+else:
+   print "L'objet ETAPE  n'est pas valide "
+   print cr
+
+e1.supprime()
+e2.supprime()
+
+def testcycle():
+   """
+       Cette fonction permet de détecter les cycles de références entre objets
+       à l'aide du module Cyclops
+   """
+   from Misc import Cyclops
+   global e1,e2
+   z=Cyclops.CycleFinder()
+   z.register(e1)
+   z.register(e2)
+   del e1,e2
+   z.find_cycles()
+   z.show_stats()
+   z.show_cycles()
+   z.show_cycleobjs()
+   z.show_sccs()
+   z.show_arcs()
+   print "dead root set objects:"
+   for rc, cyclic, x in z.get_rootset():
+      if rc == 0:
+         z.show_obj(x)
+   z.find_cycles(1)
+   z.show_stats()
+
+testcycle()
+
diff --git a/Exemples/cyclops3/__init__.py b/Exemples/cyclops3/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/cyclops3/cata.py b/Exemples/cyclops3/cata.py
new file mode 100644 (file)
index 0000000..6a25a71
--- /dev/null
@@ -0,0 +1,28 @@
+"""
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+from Accas import SIMP,FACT,OPER,PROC,JDC_CATA
+
+# Construction objet de définition
+
+class concept:
+   def __init__(self,etape):
+      self.etape=etape
+   def is_object(valeur):
+      """
+          Indique si valeur est d'un type conforme à la classe (1) ou non conforme (0)
+      """
+      return 0
+   def supprime(self):
+      self.etape=None
+
+JdC=JDC_CATA(code="ASTER")
+OP1 = OPER(nom='OP1',op=1,sd_prod=concept,reentrant='f',
+           a=SIMP(typ='I'),
+           b=SIMP(typ=concept),
+          )
+DEBUT=PROC(nom='DEBUT',op=0,INFO=SIMP(typ='I'),)
+
diff --git a/Exemples/cyclops3/main.py b/Exemples/cyclops3/main.py
new file mode 100644 (file)
index 0000000..52ce2d1
--- /dev/null
@@ -0,0 +1,68 @@
+
+"""
+   Vérification des cycles de références d'objets sur un exemple
+   d'utilisation d'un JDC
+
+"""
+
+import sys
+sys.path[:0]=['../..','../../..']
+
+import cata
+from cata import JdC
+
+cr=JdC.report()
+print cr
+
+text="""
+DEBUT()
+a=OP1(a=1)
+b=OP1(a=1,b=a)
+c=OP1(a=1)
+"""
+
+j=JdC(procedure=text,cata=cata,nom="bidon")
+
+j.compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+j.exec_compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+cr=j.report()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+JdC.supprime()
+j.supprime()
+
+def testcycle():
+   """
+       Cette fonction permet de détecter les cycles de références entre objets
+       à l'aide du module Cyclops
+   """
+   from Misc import Cyclops
+   global j
+   z=Cyclops.CycleFinder()
+   z.register(j)
+   del j
+   z.find_cycles()
+   z.show_stats()
+   z.show_cycles()
+   z.show_cycleobjs()
+   z.show_sccs()
+   z.show_arcs()
+   print "dead root set objects:"
+   for rc, cyclic, x in z.get_rootset():
+      if rc == 0:
+         z.show_obj(x)
+   z.find_cycles(1)
+   z.show_stats()
+
+testcycle()
+
diff --git a/Exemples/eficas/__init__.py b/Exemples/eficas/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/eficas/cas.py b/Exemples/eficas/cas.py
new file mode 100755 (executable)
index 0000000..2a2cec3
--- /dev/null
@@ -0,0 +1,206 @@
+# MODIF  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+# TITRE TEST DE NON REGRESSION DE L IHM EFICAS - DERIVE DE SDND102A
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# Ce cas test est gere en configuration dans la base ASTER, il sert de
+# modele pour prononcer la recette de l IHM d EFICAS : l objectif est de
+# pouvoir recreer ce test a l identique dans EFICAS a partir d une page
+# blanche.
+# On a donc essaye d y placer toutes les commandes un peu particulieres
+# du langage de commandes d ASTER
+#
+# Il s agit en fait du test SDND102A auquel on a ajoute :
+#      la definition d un parametre (VAL)
+#      l inclusion d un fichier (INCLUDE)
+#      une poursuite (POURSUITE)
+# Il contient ainsi :
+# des parametres, des formules, des macros, des mots cles facteurs repetes
+# (y compris conditionnes par des regles : calc_fonction / COMB),
+# des blocs  (mode_iter_simult,calc_char_seisme), un defi_valeur, un parametre.
+#
+#
+# Il faudra y associer quelques recommandations pour la recette :
+# - verifier qu en ouvrant le .com0, il demande bien a browser le .comm puis, en cascade, le .11
+# - verifier qu on peut bien supprimer une commande, un mot cle simple et facteur
+# - verifier les acces a la doc
+#
+
+DEBUT(CODE=_F( NOM = 'EFICA01A'),
+    #  PAR_LOT='NON'
+         )
+
+MAILLAGE=LIRE_MAILLAGE( )
+
+MAILLA2=LIRE_MAILLAGE(  UNITE=19 )
+
+MODELE=AFFE_MODELE(  MAILLAGE=MAILLAGE,
+                     AFFE=(
+              _F(  PHENOMENE = 'MECANIQUE', MODELISATION = 'DIS_T',
+                   GROUP_MA = 'RESSORT'),
+              _F(  PHENOMENE = 'MECANIQUE', MODELISATION = 'DIS_T',
+                   GROUP_NO = 'MASSES')    )
+                    )
+
+BICHOC=AFFE_MODELE(  MAILLAGE=MAILLA2,
+                     AFFE=(
+              _F(  PHENOMENE = 'MECANIQUE', MODELISATION = 'DIS_T',
+                   GROUP_MA = 'RESSORTS'),
+              _F(  PHENOMENE = 'MECANIQUE', MODELISATION = 'DIS_T',
+                   GROUP_NO = ( 'MASSES1', 'MASSES2',)))
+                    )
+
+VAL = 98696.0
+
+CARA_ELE=AFFE_CARA_ELEM(  MODELE=MODELE,
+                          DISCRET=(
+           _F(  CARA = 'K_T_D_L',  REPERE = 'GLOBAL', GROUP_MA = 'RESSORT',
+                VALE = (VAL, 0., 0., )),
+           _F(  CARA = 'M_T_D_N',  GROUP_NO = 'MASSES', VALE = 25.0))
+                         )
+
+CARA_BIC=AFFE_CARA_ELEM(  MODELE=BICHOC,
+                          DISCRET=(
+           _F(  CARA = 'K_T_D_L',  REPERE = 'GLOBAL', GROUP_MA = 'RESSORTS',
+                VALE = (VAL, 0., 0., )),
+           _F(  CARA = 'M_T_D_N',  GROUP_NO = 'MASSES1', VALE = 25.0),
+           _F(  CARA = 'M_T_D_N',  GROUP_NO = 'MASSES2', VALE = 25.0))
+                         )
+
+
+CON_LIM=AFFE_CHAR_MECA(  MODELE=MODELE,DDL_IMPO=(
+              _F(  GROUP_NO = 'ENCASTRE',  DX = 0.,  DY = 0.,  DZ = 0.),
+              _F(  GROUP_NO = 'MASSES',              DY = 0.,  DZ = 0.))
+                       )
+
+CL_BICHO=AFFE_CHAR_MECA(  MODELE=BICHOC,DDL_IMPO=(
+              _F(  GROUP_NO = 'ENCBICHO',     DX = 0.,  DY = 0.,  DZ = 0.),
+              _F(  GROUP_NO = ( 'MASSES1', 'MASSES2',), DY = 0.,  DZ = 0.))
+                       )
+
+MACRO_MATR_ASSE(  MODELE=MODELE,
+                  CHARGE=CON_LIM,
+                  CARA_ELEM=CARA_ELE,
+                  NUME_DDL=CO("NUMEDDL"),
+                  MATR_ASSE=(
+                 _F(  MATRICE = CO("RIGIDITE"),  OPTION = 'RIGI_MECA'),
+                 _F(  MATRICE = CO("MASSE"),     OPTION = 'MASS_MECA'))
+               )
+
+MACRO_MATR_ASSE(  MODELE=BICHOC,
+                  CHARGE=CL_BICHO,
+                  CARA_ELEM=CARA_BIC,
+                  NUME_DDL=CO("NUMDDLC"),
+                  MATR_ASSE=(
+                 _F(  MATRICE = CO("RIGI_BIC"),  OPTION = 'RIGI_MECA'),
+                 _F(  MATRICE = CO("MASS_BIC"),  OPTION = 'MASS_MECA'))
+               )
+
+MODE_MEC=MODE_ITER_SIMULT(  MATR_A=RIGIDITE,   MATR_B=MASSE )
+
+MODE_MEC=NORM_MODE(reuse=MODE_MEC,  MODE=MODE_MEC,   NORME='MASS_GENE' )
+
+MODE_BIC=MODE_ITER_SIMULT(  MATR_A=RIGI_BIC,   MATR_B=MASS_BIC,
+                  METHODE='JACOBI',
+                  OPTION='SANS',
+                  CALC_FREQ=_F(  OPTION = 'BANDE',  FREQ = (1., 10., ))
+                            )
+
+MODE_BIC=NORM_MODE(reuse=MODE_BIC,  MODE=MODE_BIC,   NORME='MASS_GENE' )
+
+MODE_STA=MODE_STATIQUE(  MATR_RIGI=RIGIDITE,   MATR_MASS=MASSE,
+                          MODE_STAT=_F(  TOUT = 'OUI', AVEC_CMP = 'DX') )
+
+MSTA_BIC=MODE_STATIQUE(  MATR_RIGI=RIGI_BIC,   MATR_MASS=MASS_BIC,
+                          MODE_STAT=_F(  TOUT = 'OUI', AVEC_CMP = 'DX') )
+
+
+L_INST=DEFI_LIST_REEL(  DEBUT=0.,
+                           INTERVALLE=_F(  JUSQU_A = 1., PAS = 0.0001) )
+
+OMEGAA=DEFI_VALEUR( R8=EVAL("""2.*PI*10.""") )
+
+ACCE1 = FORMULE(REEL="""(REEL:INST) = SIN(OMEGAA*INST) """)
+ACCELER1=CALC_FONC_INTERP( FONCTION=ACCE1, LIST_PARA=L_INST,
+                               PROL_DROITE='LINEAIRE',
+                              PROL_GAUCHE='LINEAIRE',
+                               NOM_RESU='ACCE'       )
+
+ACCE2 = FORMULE(REEL="""(REEL:INST) =- SIN(OMEGAA*INST) """)
+ACCELER2=CALC_FONC_INTERP( FONCTION=ACCE2, LIST_PARA=L_INST,
+                               PROL_DROITE='LINEAIRE',
+                              PROL_GAUCHE='LINEAIRE',
+                               NOM_RESU='ACCE'       )
+
+VITE1 = FORMULE(REEL="""(REEL:INST) =-COS(OMEGAA*INST)/OMEGAA """)
+VITESSE1=CALC_FONC_INTERP( FONCTION=VITE1, LIST_PARA=L_INST,
+                       PROL_DROITE='LINEAIRE',
+                      PROL_GAUCHE='LINEAIRE',
+                      NOM_RESU='VITE'       )
+
+DEPL1 = FORMULE(REEL="""(REEL:INST) =-SIN(OMEGAA*INST)/(OMEGAA**2) """)
+DEPLACE1=CALC_FONC_INTERP( FONCTION=DEPL1, LIST_PARA=L_INST,
+                       PROL_DROITE='LINEAIRE',
+                      PROL_GAUCHE='LINEAIRE',
+                      NOM_RESU='DEPL'       )
+
+VITE2 = FORMULE(REEL="""(REEL:INST) =COS(OMEGAA*INST)/OMEGAA """)
+VITESSE2=CALC_FONC_INTERP( FONCTION=VITE2, LIST_PARA=L_INST,
+                       PROL_DROITE='LINEAIRE',
+                      PROL_GAUCHE='LINEAIRE',
+                      NOM_RESU='VITE'       )
+
+INCLUDE(   UNITE=11,   INFO=1 )
+
+MUR=DEFI_OBSTACLE(   TYPE='PLAN_Z' )
+
+TRAN_GE1=DYNA_TRAN_MODAL(  MASS_GENE=MASS_GEN,   RIGI_GENE=RIGI_GEN,
+                METHODE='EULER',
+                AMOR_REDUIT=0.07, 
+                MODE_STAT=MODE_STA,
+                EXCIT=_F(
+                       VECT_GENE = VECT_X,
+                       ACCE = ACCELER1,
+                       VITE = VITESSE1,
+                       DEPL = DEPLACE1,
+                       MULT_APPUI = 'OUI',
+                       DIRECTION = ( 1., 0., 0.,),
+                       NOEUD = 'NO1'),
+                CHOC=_F(  GROUP_NO_1 = 'MASSES',
+                      OBSTACLE = MUR,
+                      INTITULE = 'NO2/MUR',
+                      ORIG_OBST = ( -1., 0., 0., ),
+                      NORM_OBST = (  0., 0., 1., ),
+                      JEU = 1.1005,
+                      RIGI_NOR = 5.76E7,
+                      AMOR_NOR = 0.,
+                      RIGI_TAN = 0.,
+                      COULOMB = 0.0),
+                INCREMENT=_F( INST_INIT = 0.,  INST_FIN = 1.,  PAS = 0.0002),
+                ARCHIVAGE=_F(  PAS_ARCH = 8)
+                          )
+
+
+MULT_X1=CALC_CHAR_SEISME(  MATR_MASS=MASS_BIC,  DIRECTION=( 1., 0., 0.,),
+                           MODE_STAT=MSTA_BIC,  NOEUD='NO1' )
+
+MULT_X2=CALC_CHAR_SEISME(  MATR_MASS=MASS_BIC,  DIRECTION=( 1., 0., 0.,),
+                           MODE_STAT=MSTA_BIC,  NOEUD='NO11' )
+
+MACRO_PROJ_BASE(BASE=MODE_BIC,
+                MATR_ASSE_GENE=(
+                _F( MATRICE = CO("MGEN_BIC"), MATR_ASSE = MASS_BIC),
+                _F( MATRICE = CO("RGEN_BIC"), MATR_ASSE = RIGI_BIC)),
+                VECT_ASSE_GENE=(
+                _F( VECTEUR = CO("VECT_X1"),  VECT_ASSE = MULT_X1),
+                _F( VECTEUR = CO("VECT_X2"),  VECT_ASSE = MULT_X2))
+               )
+
+
+GRILLE=DEFI_OBSTACLE(   TYPE='BI_PLAN_Z' )
+
+
+FIN()
diff --git a/Exemples/eficas/cata.py b/Exemples/eficas/cata.py
new file mode 100644 (file)
index 0000000..b00d0df
--- /dev/null
@@ -0,0 +1,2226 @@
+
+from Accas import SIMP,FACT,BLOC
+from Accas import AsException,AsType
+from Accas import ASSD,CO,GEOM,fonction
+from Accas import OPER,MACRO,JDC_CATA,FORM,PROC
+from Accas import AU_MOINS_UN,UN_PARMI,PRESENT_PRESENT,EXCLUS,ENSEMBLE,PRESENT_ABSENT
+from Accas import EVAL
+
+# Type le plus general
+class entier  (ASSD):pass
+class reel    (ASSD):pass
+class complexe(ASSD):pass
+class liste   (ASSD):pass
+class chaine  (ASSD):pass
+
+# Type geometriques
+class no  (GEOM):pass
+class grno(GEOM):pass
+class ma  (GEOM):pass
+class grma(GEOM):pass
+
+# Autres
+
+class cabl_precont    (ASSD):pass
+class cara_elem       (ASSD):pass
+class cara_pout       (ASSD):pass
+class cham_mater      (ASSD):pass
+class char_acou       (ASSD):pass
+class char_cine_acou  (ASSD):pass
+class char_cine_meca  (ASSD):pass
+class char_cine_ther  (ASSD):pass
+class char_meca       (ASSD):pass
+class char_ther       (ASSD):pass
+class courbe          (ASSD):pass
+class fond_fiss       (ASSD):pass
+class interf_dyna_clas(ASSD):pass
+class interspfact     (ASSD):pass
+class listis          (ASSD):pass
+class listr8          (ASSD):pass
+class macr_elem_dyna  (ASSD):pass
+class macr_elem_stat  (ASSD):pass
+class mater           (ASSD):pass
+class melasflu        (ASSD):pass
+class modele          (ASSD):pass
+class modele_gene     (ASSD):pass
+class nume_ddl        (ASSD):pass
+class nume_ddl_gene   (ASSD):pass
+class obstacle        (ASSD):pass
+class spectre         (ASSD):pass
+class surface         (ASSD):pass
+class tran_gene       (ASSD):pass
+class type_flui_stru  (ASSD):pass
+class valeur          (ASSD):pass
+
+# maillage :
+#--------------------------------
+class maillage(ASSD):pass
+class squelette     (maillage):pass
+
+# cham_gd (carte,cham_no,cham_elem)
+#--------------------------------
+
+class cham_gd(ASSD):pass
+
+# cham_gd/carte :
+#--------------------------------
+class carte(cham_gd):pass
+class carte_dbel_r   (carte):pass
+class carte_depl_c   (carte):pass
+class carte_depl_f   (carte):pass
+class carte_depl_r   (carte):pass
+class carte_durt_r   (carte):pass
+class carte_ener_r   (carte):pass
+class carte_epsi_r   (carte):pass
+class carte_erreur   (carte):pass
+class carte_flux_r   (carte):pass
+class carte_g_depl_r (carte):pass
+class carte_geom_r   (carte):pass
+class carte_hydr_r   (carte):pass
+class carte_inst_r   (carte):pass
+class carte_inte_r   (carte):pass
+class carte_irra_r   (carte):pass
+class carte_meta_r   (carte):pass
+class carte_neut_f   (carte):pass
+class carte_neut_r   (carte):pass
+class carte_pres_r   (carte):pass
+class carte_sief_r   (carte):pass
+class carte_sour_r   (carte):pass
+class carte_temp_f   (carte):pass
+class carte_temp_r   (carte):pass
+class carte_var2_r   (carte):pass
+class carte_vnor_c   (carte):pass
+
+# cham_gd/cham_elem :
+#--------------------------------
+class cham_elem(cham_gd):pass
+class cham_elem_crit_r(cham_elem):pass
+class cham_elem_dbel_r(cham_elem):pass
+class cham_elem_depl_c(cham_elem):pass
+class cham_elem_depl_f(cham_elem):pass
+class cham_elem_depl_r(cham_elem):pass
+class cham_elem_dommag(cham_elem):pass
+class cham_elem_durt_r(cham_elem):pass
+class cham_elem_ener_r(cham_elem):pass
+class cham_elem_epsi_c(cham_elem):pass
+class cham_elem_epsi_r(cham_elem):pass
+class cham_elem_erreur(cham_elem):pass
+class cham_elem_flux_r(cham_elem):pass
+class cham_elem_g_depl(cham_elem):pass
+class cham_elem_geom_r(cham_elem):pass
+class cham_elem_hydr_r(cham_elem):pass
+class cham_elem_inst_r(cham_elem):pass
+class cham_elem_inte_r(cham_elem):pass
+class cham_elem_irra_r(cham_elem):pass
+class cham_elem_meta_r(cham_elem):pass
+class cham_elem_neut_f(cham_elem):pass
+class cham_elem_neut_r(cham_elem):pass
+class cham_elem_pres_r(cham_elem):pass
+class cham_elem_sief_c(cham_elem):pass
+class cham_elem_sief_r(cham_elem):pass
+class cham_elem_sour_r(cham_elem):pass
+class cham_elem_temp_f(cham_elem):pass
+class cham_elem_temp_r(cham_elem):pass
+class cham_elem_vari_r(cham_elem):pass
+class cham_elem_vnor_c(cham_elem):pass
+
+
+# cham_gd/cham_no :
+#--------------------------------
+class cham_no(cham_gd):pass
+class cham_no_dbel_r   (cham_no):pass
+class cham_no_depl_c   (cham_no):pass
+class cham_no_depl_f   (cham_no):pass
+class cham_no_depl_r   (cham_no):pass
+class cham_no_durt_r   (cham_no):pass
+class cham_no_ener_r   (cham_no):pass
+class cham_no_epsi_r   (cham_no):pass
+class cham_no_erreur   (cham_no):pass
+class cham_no_flux_r   (cham_no):pass
+class cham_no_g_depl_r (cham_no):pass
+class cham_no_geom_r   (cham_no):pass
+class cham_no_hydr_r   (cham_no):pass
+class cham_no_inst_r   (cham_no):pass
+class cham_no_inte_r   (cham_no):pass
+class cham_no_irra_r   (cham_no):pass
+class cham_no_meta_r   (cham_no):pass
+class cham_no_neut_f   (cham_no):pass
+class cham_no_neut_r   (cham_no):pass
+class cham_no_pres_c   (cham_no):pass
+class cham_no_pres_r   (cham_no):pass
+class cham_no_sief_r   (cham_no):pass
+class cham_no_sour_r   (cham_no):pass
+class cham_no_temp_c   (cham_no):pass
+class cham_no_temp_f   (cham_no):pass
+class cham_no_temp_r   (cham_no):pass
+class cham_no_vanl_r   (cham_no):pass
+class cham_no_var2_r   (cham_no):pass
+class cham_no_vnor_c   (cham_no):pass
+
+
+class resultat(ASSD):pass
+
+class acou_harmo    (resultat):pass
+class base_modale     (resultat):pass
+class comb_fourier  (resultat):pass
+class dyna_harmo    (resultat):pass
+class dyna_trans    (resultat):pass
+class fourier_elas  (resultat):pass
+class harm_gene     (resultat):pass
+class mode_acou     (resultat):pass
+class mode_cycl     (resultat):pass
+class mode_flamb    (resultat):pass
+class mode_gene     (resultat):pass
+class mult_elas     (resultat):pass
+class theta_geom    (resultat):pass
+
+# resultat/evol :
+#--------------------------------
+class evol(resultat):pass
+class evol_char(evol):pass
+class evol_elas(evol):pass
+class evol_noli(evol):pass
+class evol_ther(evol):pass
+class evol_varc(evol):pass
+
+# resultat/mode_stat :
+#--------------------------------
+class mode_stat(resultat):pass
+class mode_stat_depl(mode_stat):pass
+class mode_stat_acce(mode_stat):pass
+class mode_stat_forc(mode_stat):pass
+
+
+# resultat/mode_meca :
+#--------------------------------
+class mode_meca(resultat):pass
+class mode_meca_c(mode_meca):pass
+
+# fonction :
+#--------------------------------
+class para_sensi(fonction):pass
+class fonction_c(fonction):pass
+
+# matr_asse :
+#--------------------------------
+class matr_asse(ASSD):pass
+class matr_asse_depl_c(matr_asse):pass
+class matr_asse_depl_r(matr_asse):pass
+class matr_asse_gene_r(matr_asse):pass
+class matr_asse_gene_c(matr_asse):pass
+class matr_asse_pres_c(matr_asse):pass
+class matr_asse_pres_r(matr_asse):pass
+class matr_asse_temp_c(matr_asse):pass
+class matr_asse_temp_r(matr_asse):pass
+
+# matr_elem :
+#--------------------------------
+class matr_elem(ASSD):pass
+class matr_elem_depl_c(matr_elem):pass
+class matr_elem_depl_r(matr_elem):pass
+class matr_elem_pres_c(matr_elem):pass
+class matr_elem_temp_r(matr_elem):pass
+
+# table : (tabl_fonc)
+#--------------------------------
+
+class table(ASSD):pass
+
+class tabl_aire_int   (table):pass
+class tabl_calc_g_loca(table):pass
+class tabl_calc_g_th  (table):pass
+class tabl_cara_geom  (table):pass
+class tabl_char_limite(table):pass
+class tabl_ener_elas  (table):pass
+class tabl_ener_pot   (table):pass
+class tabl_ener_cin   (table):pass
+class tabl_ener_totale(table):pass
+class tabl_indic_ener (table):pass
+class tabl_indic_seuil(table):pass
+class tabl_intsp      (table):pass
+class tabl_mass_iner  (table):pass
+class tabl_post_alea  (table):pass
+class tabl_post_dyna  (table):pass
+class tabl_post_f_alea(table):pass
+class tabl_post_fatig (table):pass
+class tabl_post_gouj2e(table):pass
+class tabl_post_k     (table):pass
+class tabl_post_rccm  (table):pass
+class tabl_post_rele  (table):pass
+class tabl_post_simpli(table):pass
+class tabl_post_usur  (table):pass
+class tabl_reca_weib  (table):pass
+class tabl_rice_tracey(table):pass
+class tabl_texture    (table):pass
+class tabl_trc        (table):pass
+class tabl_weibull    (table):pass
+
+# table/tabl_fonc
+#--------------------------------
+class tabl_fonc       (table):pass
+class tabl_fonc_max   (tabl_fonc):pass
+class tabl_fonc_noci  (tabl_fonc):pass
+class tabl_fonc_rms   (tabl_fonc):pass
+
+
+# vect_asse :
+#--------------------------------
+class vect_asse(ASSD):pass
+class vect_asse_gene(vect_asse):pass
+
+# vect_elem :
+#--------------------------------
+class vect_elem(ASSD):pass
+class vect_elem_depl_r(vect_elem):pass
+class vect_elem_pres_c(vect_elem):pass
+class vect_elem_pres_r(vect_elem):pass
+class vect_elem_temp_r(vect_elem):pass
+
+
+JdC=JDC_CATA(code="ASTER")
+
+def DEBUT_prod(self,PAR_LOT,**args):
+  """
+     Fonction sdprod de la macro DEBUT
+  """
+  self.jdc.set_par_lot(PAR_LOT)
+
+DEBUT=MACRO(nom="DEBUT",op=0 ,docu="U4.11.01-f1",repetable='n',
+           fr="Ouverture d une étude. Allocation des ressources mémoire et disque",
+          sd_prod=DEBUT_prod,
+
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+                           into=("OUI","NON"),defaut="OUI"),
+         BASE            =FACT(fr="définition des paramètres associés aux bases JEVEUX",
+                               statut='f',min=01,max=03,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM',
+                                 into=('GLOBALE','VOLATILE','LOCALE'),),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           CAS             =SIMP(statut='f',typ='TXM'),
+           NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+           LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+           LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max=03,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='o',typ='I'),
+         ),
+         CATALOGUE       =FACT(statut='f',min=01,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+         CODE            =FACT("définition d un nom pour l'esemble d'une étude",
+                               statut='f',min=01,max=01,
+           NOM             =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I',defaut=15),
+         ),
+         DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
+                               statut='f',min=01,max=01,
+           JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+                                 statut='f',typ='TXM',into=('TEST',)),
+         ),
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=01,max=01,
+           GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
+           TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
+           TAILLE          =SIMP(statut='f',typ='I'),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut=800.),
+           PARTITION       =SIMP(statut='f',typ='R'),
+         ),
+ );
+
+LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage,
+                   fr="Lecture d'un fichier de maillage",
+                   ang="Readings of a mesh file",
+                   docu="U4.21.01-f",reentrant='n',
+#
+         UNITE           =SIMP(statut='f',typ='I',defaut= 20 ),
+#
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","MED"),
+                            fr="Format du fichier : ASTER ou MED.",
+                            ang="Format of the file : ASTER or MED.",),
+#
+         ABSC_CURV       =FACT(statut='f',min=00,max=01,
+               TOUT          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+#
+         VERI_MAIL       =FACT(statut='d',min=01,max=01,
+               APLAT         =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         ),
+#
+         b_format_med =BLOC( condition = " ( FORMAT == 'MED' ) " ,
+                           fr="Informations complémentaires pour la lecture MED.",
+                           ang="Further information for MED readings.",
+#
+# Pour une lecture dans un fichier MED, on peut préciser le nom sous lequel
+# le maillage y a été enregistré. Par défaut, on va le chercher sous le nom du concept à créer.
+#
+              NOM_MED    = SIMP(statut='f',typ='TXM',
+                            fr="Nom du maillage dans le fichier MED.",
+                            ang="Name of the mesh into the MED file.",),
+#
+              INFO_MED   = SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#
+                           ) ,
+#
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#
+)  ;
+
+AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-f1",
+                 fr="Affectation des éléments finis sur le maillage",reentrant='n',
+         regles=(AU_MOINS_UN('AFFE','AFFE_SOUS_STRUC'),),
+         MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',max=2,into=("MAILLE","NOEUD") ),
+         AFFE_SOUS_STRUC =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('TOUT','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PHENOMENE       =SIMP(statut='f',typ='TXM',defaut="MECANIQUE",into=("MECANIQUE",) ),
+         ),
+         AFFE            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           PHENOMENE       =SIMP(statut='o',typ='TXM',
+                                 into=("MECANIQUE","THERMIQUE","ACOUSTIQUE","NON_LOCAL") ),
+                b_mecanique     =BLOC( condition = "PHENOMENE=='MECANIQUE'",
+                                        fr="modelisations mécaniques",
+                    MODELISATION    =SIMP(statut='o',typ='TXM', into=(
+                                                                      "2D_CONTACT",
+                                                                      "2D_DIS_T",
+                                                                      "2D_DIS_TR",
+                                                                      "2D_FLUI_ABSO",
+                                                                      "2D_FLUI_PESA",
+                                                                      "2D_FLUI_STRU",
+                                                                      "2D_FLUIDE",
+                                                                      "3D",
+                                                                      "3D_ABSO",
+                                                                      "3D_CONTACT",
+                                                                      "3D_FAISCEAU",
+                                                                      "3D_FLUI_ABSO",
+                                                                      "3D_FLUIDE",
+                                                                      "3D_HHM" ,
+                                                                      "3D_HM",
+                                                                      "3D_INCO",
+                                                                      "3D_JOINT_CT",
+                                                                      "3D_SI",
+                                                                      "3D_THH",
+                                                                      "3D_THHM",
+                                                                      "3D_THM",
+                                                                      "APPUI_REP",
+                                                                      "ASSE_GRIL",
+                                                                      "AXIS",
+                                                                      "AXIS_FLUI_STRU",
+                                                                      "AXIS_FLUIDE",
+                                                                      "AXIS_FOURIER",
+                                                                      "AXIS_HHM",
+                                                                      "AXIS_HM",
+                                                                      "AXIS_INCO",
+                                                                      "AXIS_SI",
+                                                                      "AXIS_THH",
+                                                                      "AXIS_THHM",
+                                                                      "AXIS_THM",
+                                                                      "BARRE",
+                                                                      "2D_BARRE",
+                                                                      "C_PLAN",
+                                                                      "C_PLAN_SI",
+                                                                      "CABLE",
+                                                                      "CABLE_POULIE",
+                                                                      "COQUE_3D",
+                                                                      "COQUE_AXIS",
+                                                                      "COQUE_C_PLAN",
+                                                                      "COQUE_D_PLAN",
+                                                                      "CONT_DVP_2D",
+                                                                      "CONT_DVP_3D",
+                                                                      "D_PLAN",
+                                                                      "D_PLAN_ABSO",
+                                                                      "D_PLAN_HHM",
+                                                                      "D_PLAN_HM",
+                                                                      "D_PLAN_SI",
+                                                                      "D_PLAN_THH",
+                                                                      "D_PLAN_THHM",
+                                                                      "D_PLAN_THM",
+                                                                      "DIS_T",
+                                                                      "DIS_TR",
+                                                                      "DKT",
+                                                                      "DST",
+                                                                      "FLUI_STRU",
+                                                                      "GRILLE",
+                                                                      "PLAN_INCO",
+                                                                      "POU_C_T",
+                                                                      "POU_D_E",
+                                                                      "POU_D_EM",
+                                                                      "POU_D_T",
+                                                                      "POU_D_T_GD",
+                                                                      "POU_D_TG",
+                                                                      "Q4G",
+                                                                      "TUYAU",
+                                                                      "TUYAU_3M",
+                                                                      "TUYAU_6M"
+                                                                     )  )  ),
+
+                b_thermique     =BLOC( condition = "PHENOMENE=='THERMIQUE'",
+                                        fr="modelisations thermiques",
+                    MODELISATION    =SIMP(statut='o',typ='TXM',into=(
+                                                                      "3D",
+                                                                      "3D_DIAG",
+                                                                      "AXIS",
+                                                                      "AXIS_DIAG",
+                                                                      "AXIS_FOURIER",
+                                                                      "COQUE",
+                                                                      "COQUE_AXIS",
+                                                                      "COQUE_PLAN",
+                                                                      "PLAN",
+                                                                      "PLAN_DIAG",
+                                                                      ),),),
+                b_acoustique    =BLOC( condition = "PHENOMENE=='ACOUSTIQUE'",
+                                        fr="modelisations acoustiques",
+                     MODELISATION    =SIMP(statut='o',typ='TXM',into=(
+                                                                       "3D",
+                                                                       "PLAN"
+                                                                       ), ),),
+
+                b_non_local     =BLOC( condition = "PHENOMENE=='NON_LOCAL'",
+                                        fr="modelisations non locales",
+                     MODELISATION    =SIMP(statut='o',typ='TXM',into=(
+                                                                      "3D",
+                                                                      "AXIS",
+                                                                      "C_PLAN",
+                                                                      "D_PLAN",
+                                                                     ) ), ),
+         ),
+) ;
+
+AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
+                    fr="Affectation de caractéristiques à des éléments de structure",
+                    docu="U4.42.01-f1",reentrant='n',
+         regles=(AU_MOINS_UN('POUTRE','BARRE','COQUE','CABLE','DISCRET','MASSIF',
+                             'ASSE_GRIL','GRILLE','AFFE_SECT','AFFE_FIBRE'),),
+         MODELE          =SIMP(statut='o',typ=modele ),
+         INFO            =SIMP(statut='f',typ='I', defaut= 1 ,into=(1,2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',max='**',into=("MAILLE","NOEUD") ),
+
+         POUTRE          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           SECTION         =SIMP(statut='o',typ='TXM' ,into=("GENERALE","RECTANGLE","CERCLE") ),
+           CARA_SECT       =SIMP(statut='f',typ=(cara_pout) ),
+           TUYAU_NCOU      =SIMP(statut='f',typ='I',min=1,max=10,defaut=3),
+           TUYAU_NSEC      =SIMP(statut='f',typ='I',min=1,max=32,defaut=16),
+           b_generale      =BLOC( condition = "SECTION=='GENERALE'",
+             CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("A","IY","IZ","AY","AZ","EY","EZ","JX","RY","RZ","RT",
+                                                           "AI","JG","IYR2","IZR2","A1",
+                                       "IY1","IZ1","AY1","AZ1","EY1","EZ1","JX1","RY1",
+                                       "RZ1","RT1","AI1","JG1","IYR21","IZR21","A2",
+                                       "IY2","IZ2","AY2","AZ2","EY2","EZ2","JX2","RY2",
+                                       "RZ2","RT2","AI2","JG2","IYR22","IZR22","H",
+                                       "HZ","HY","EP","EPY","EPZ","H1","HZ1","HY1",
+                                       "EP1","EPY1","EPZ1","H2","HZ2","HY2","EP2",
+                                       "EPY2","EPZ2","R","R1","R2") ),
+             VALE            =SIMP(statut='o',typ='R',max='**'),
+             VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE",) ),
+           ),
+           b_rectangle     =BLOC( condition = "SECTION=='RECTANGLE'",
+             CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("H","EP","HY","HZ","EPY","EPZ",
+                                                           "H1","HZ1","HY1","EP1","EPY1","EPZ1",
+                                                           "H2","HZ2","HY2","EP2","EPY2","EPZ2") ),
+             VALE            =SIMP(statut='o',typ='R',max='**'),
+             VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE","AFFINE"),defaut="HOMOTHETIQUE"),
+           ),
+           b_cercle        =BLOC( condition = "SECTION=='CERCLE'",
+             CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("R","EP","R1","R2","EP1","EP2") ),
+             VALE            =SIMP(statut='o',typ='R',max='**'),
+             VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE",) ),
+             MODI_METRIQUE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           ),
+           FCX             =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         BARRE           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           SECTION         =SIMP(statut='o',typ='TXM',into=("GENERALE","RECTANGLE","CERCLE") ),
+           b_generale      =BLOC( condition = "SECTION=='GENERALE'",
+             CARA            =SIMP(statut='o',typ='TXM',into=("A",) ),
+             VALE            =SIMP(statut='o',typ='R' ),
+           ),
+           b_rectangle     =BLOC( condition = "SECTION=='RECTANGLE'",
+             CARA            =SIMP(statut='o',typ='TXM',into=("H","HZ","HY","EPY","EPZ","EP"),max=6 ),
+             VALE            =SIMP(statut='o',typ='R',max=6 ),
+           ),
+           b_cercle        =BLOC( condition = "SECTION=='CERCLE'",
+             CARA            =SIMP(statut='o',typ='TXM',max=2,into=("R","EP") ),
+             VALE            =SIMP(statut='o',typ='R',max=2 ),
+           ),
+           FCX             =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         COQUE           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA' ),
+                   PRESENT_PRESENT( 'EXCENTREMENT','INER_ROTA' ),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           EPAIS           =SIMP(statut='o',typ='R' ),
+           ANGL_REP        =SIMP(statut='f',typ='R',min=2,max=2),
+           A_CIS           =SIMP(statut='f',typ='R',defaut= 0.8333333E0),
+           COEF_RIGI_DRZ   =SIMP(statut='f',typ='R',defaut= 1.0E-5 ),
+           COQUE_NCOU      =SIMP(statut='f',typ='I',defaut= 1 ),
+           EXCENTREMENT    =SIMP(statut='f',typ='R' ),
+           INER_ROTA       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MODI_METRIQUE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+         CABLE           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('A','SECTION') ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           N_INIT          =SIMP(statut='f',typ='R',defaut= 5000. ),
+           A               =SIMP(statut='f',typ='R' ),
+           SECTION         =SIMP(statut='f',typ='R' ),
+           FCX             =SIMP(statut='f',typ=(fonction) ),
+         ),
+
+         DISCRET         =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           REPERE          =SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+           AMOR_HYST       =SIMP(statut='f',typ='R' ),
+           CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("K_T_D_N","K_T_D_L","K_TR_D_N","K_TR_D_L",
+                                                           "K_T_N",  "K_T_L",  "K_TR_N",  "K_TR_L",
+                                                                "M_T_D_N","M_TR_D_N","M_T_N",
+                                                           "M_T_L",  "M_TR_N",  "M_TR_L",
+                                       "A_T_D_N","A_TR_D_N","A_T_D_L","A_TR_D_L",
+                                                           "A_T_N",  "A_T_L",   "A_TR_N", "A_TR_L") ),
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+         ),
+
+         ORIENTATION     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO' ),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           CARA            =SIMP(statut='o',typ='TXM',
+                                 into=("VECT_Y","ANGL_VRIL","VECT_X_Y","ANGL_NAUT","GENE_TUYAU") ),
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-4 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+
+         DEFI_ARC        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('ORIE_ARC','CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE',
+                            'POIN_TANG','NOEUD_POIN_TANG','GROUP_NO_POIN_TG'),
+                   PRESENT_PRESENT('ORIE_ARC','RAYON'),
+                   EXCLUS('COEF_FLEX','COEF_FLEX_XY'),
+                   EXCLUS('COEF_FLEX','COEF_FLEX_XZ'),
+                   EXCLUS('INDI_SIGM','INDI_SIGM_XY'),
+                   EXCLUS('INDI_SIGM','INDI_SIGM_XZ'),
+                   PRESENT_PRESENT('COEF_FLEX_XY','COEF_FLEX_XZ'),
+                   PRESENT_PRESENT('INDI_SIGM_XY','INDI_SIGM_XZ'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ORIE_ARC        =SIMP(statut='f',typ='R'),
+           CENTRE          =SIMP(statut='f',typ='R',max='**'),
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,max=1),
+           POIN_TANG       =SIMP(statut='f',typ='R',max='**'),
+           NOEUD_POIN_TANG =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_POIN_TG=SIMP(statut='f',typ=grno,max=1),
+           RAYON           =SIMP(statut='f',typ='R'),
+           COEF_FLEX       =SIMP(statut='f',typ='R'),
+           INDI_SIGM       =SIMP(statut='f',typ='R'),
+           COEF_FLEX_XY    =SIMP(statut='f',typ='R'),
+           INDI_SIGM_XY    =SIMP(statut='f',typ='R'),
+           COEF_FLEX_XZ    =SIMP(statut='f',typ='R'),
+           INDI_SIGM_XZ    =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+
+         MASSIF          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('ANGL_REP','ANGL_AXE'),
+                   EXCLUS('ANGL_REP','ANGL_AXE'),
+                   EXCLUS('ANGL_REP','ORIG_AXE'),
+                   PRESENT_PRESENT('ANGL_AXE','ORIG_AXE'), ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           ANGL_REP        =SIMP(statut='f',typ='R',max=3),
+           ANGL_AXE        =SIMP(statut='f',typ='R',max=2),
+           ORIG_AXE        =SIMP(statut='f',typ='R',max=3),
+         ),
+         POUTRE_FLUI     =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           B_T             =SIMP(statut='o',typ='R'),
+           B_N             =SIMP(statut='o',typ='R'),
+           B_TN            =SIMP(statut='o',typ='R',defaut= 0.E+0 ),
+           A_FLUI          =SIMP(statut='o',typ='R'),
+           A_CELL          =SIMP(statut='o',typ='R'),
+           COEF_ECHELLE    =SIMP(statut='o',typ='R'),
+         ),
+
+         GRILLE          =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   EXCLUS('ANGL_REP','ORIG_AXE'),
+                   EXCLUS('EXCENTREMENT','DIST_N'),
+                   ENSEMBLE('ORIG_AXE','AXE')),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           SECTION_L       =SIMP(statut='o',typ='R'),
+           ANGL_REP        =SIMP(statut='f',typ='R',max=2),
+           ANGL_L          =SIMP(statut='f',typ='R'),
+           POUR_CENT_L     =SIMP(statut='f',typ='R'),
+           POUR_CENT_T     =SIMP(statut='f',typ='R'),
+           DIST_N          =SIMP(statut='f',typ='R'),
+           EXCENTREMENT    =SIMP(statut='f',typ='R'),
+           ORIG_AXE        =SIMP(statut='f',typ='R',max='**'),
+           AXE             =SIMP(statut='f',typ='R',max='**'),
+           COEF_RIGI_DRZ   =SIMP(statut='f',typ='R',defaut= 1.0E-10 ),
+           GRILLE_NCOU     =SIMP(statut='f',typ='I',defaut= 1,min=1,max=1 ),
+         ),
+
+         RIGI_PARASOL    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('COEF_GROUP','FONC_GROUP'),
+                   UN_PARMI('COOR_CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),),
+           GROUP_MA        =SIMP(statut='o',typ=ma,max='**'),
+           FONC_GROUP      =SIMP(statut='f',typ=(fonction) ),
+           COEF_GROUP      =SIMP(statut='f',typ='R',max='**'),
+           REPERE          =SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+           CARA            =SIMP(statut='o',typ='TXM',max='**',into=("K_TR_D_N","A_TR_D_N") ),
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+           COOR_CENTRE     =SIMP(statut='f',typ='R',max='**'),
+         ),
+         ASSE_GRIL       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           CARA            =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("K_TR_D_N","K_TR_D_L_T","K_TR_D_L_N",) ),
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           PAS_T           =SIMP(statut='o',typ='R'),
+           PAS_N           =SIMP(statut='o',typ='R'),
+           ANGL_REP        =SIMP(statut='o',typ='R',max='**'),
+           COEF_ECHELLE    =SIMP(statut='o',typ='R'),
+         ),
+
+
+         AFFE_SECT     =FACT(statut='f',min=1,max='**',
+              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                      AU_MOINS_UN('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),
+                      PRESENT_ABSENT('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),),
+
+              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+              TOUT_SECT         =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+              GROUP_MA_SECT     =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_SECT       =SIMP(statut='f',typ=ma,max='**'),
+
+              MAILLAGE_SECT     =SIMP(statut='o',typ=maillage),
+              COOR_AXE_POUTRE    =SIMP(statut='o',typ='R',min=2,max=2),
+         ),
+
+
+         AFFE_FIBRE     =FACT(statut='f',min=1,max='**',
+              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+
+              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+              CARA              =SIMP(statut='f',typ='TXM',defaut='SURFACE',into=('SURFACE','DIAMETRE',)),
+              VALE              =SIMP(statut='o',typ='R',max='**'),
+              COOR_AXE_POUTRE    =SIMP(statut='o',typ='R',min=2,max=2),
+         ),
+
+
+) ;
+
+AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
+                    ,fr="Affectation de charges et conditions aux limites mécaniques constantes",
+                     docu="U4.44.01-f1",reentrant='n',
+         regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','LIAISON_DDL','FORCE_NODALE',
+                             'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',
+                             'PRES_REP','FORCE_POUTRE','FORCE_COQUE','LIAISON_OBLIQUE',
+                             'FORCE_ELEC','INTE_ELEC','PESANTEUR','ROTATION','IMPE_FACE',
+                             'VITE_FACE','TEMP_CALCULEE','RELA_CINE_BP','EPSI_INIT','CONTACT',
+                             'LIAISON_UNIL_NO','LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP',
+                             'LIAISON_SOLIDE','LIAISON_ELEM','ONDE_FLUI','PRES_CALCULEE',
+                             'EPSA_CALCULEE','LIAISON_CHAMNO','VECT_ASSE','LIAISON_COQUE',
+                             'LIAISON_MAIL','FORCE_TUYAU','SECH_CALCULEE','HYDR_CALCULEE',
+                             'EFFE_FOND','EVOL_CHAR','ARLEQUIN'),
+                 EXCLUS('PRES_CALCULEE','EVOL_CHAR'),
+                 EXCLUS('LIAISON_UNIL_NO','CONTACT'),),
+
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+#    A TERME PRES_CALCULEE N'EXISTERA PLUS
+         EVOL_CHAR       =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
+                               typ=evol_char ),
+         PRES_CALCULEE   =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
+                               typ=evol_char ),
+         TEMP_CALCULEE   =SIMP(statut='f',fr="Champ de température issu d'un autre calcul",
+                               typ=(evol_ther,cham_no_temp_r,carte_temp_r,carte_temp_f ) ),
+         HYDR_CALCULEE   =SIMP(statut='f',fr="Champ d hydratation issu d'un autre calcul",
+                               typ=evol_ther ),
+         SECH_CALCULEE   =SIMP(statut='f',fr="Champ de séchage issu d'un autre calcul",
+                               typ=(evol_ther,cham_no_temp_r,carte_temp_r,carte_temp_f ) ),
+         EPSA_CALCULEE   =SIMP(statut='f',fr="Champ de déformation anélastique issu d'un autre calcul",
+                               typ=evol_noli ),
+         VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+
+         ARLEQUIN        =FACT(statut='f',min=1,max='**',
+           GROUP_MA_1     =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA_2     =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA_COLL  =SIMP(statut='o',typ=grma,max='**'),
+           regles        =(UN_PARMI('POIDS_1','POIDS_2'),),
+           POIDS_1       =SIMP(statut='f',typ='R'),
+           POIDS_2       =SIMP(statut='f',typ='R'),
+         ),
+         CONTACT         =FACT(statut='f',fr="Imposer du contact avec ou sans frottement",min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                 into=("NON","NODAL","NODAL_SYME","MAIT_ESCL","MAIT_ESCL_SYME")),
+           RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_VOISIN",into=("NOEUD_BOUCLE","NOEUD_VOISIN")),
+           LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",into=("MAIT","MAIT_ESCL")),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
+                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE") ),
+           PROJECTION      =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE",) ),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           b_active        =BLOC(condition = "METHODE == 'CONTRAINTE' ",
+                                 fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
+                regles=(EXCLUS('DIST_2','COEF_IMPO'),
+                        EXCLUS('DIST_1','COEF_IMPO'),),
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP")),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS",) ),
+                REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                COEF_IMPO       =SIMP(statut='f',typ='R'),
+                COEF_MULT_2     =SIMP(statut='f',typ='R'),
+                VECT_NORM_2     =SIMP(statut='f',typ='R',max=3),
+                DIST_1          =SIMP(statut='f',typ='R'),
+                DIST_2          =SIMP(statut='f',typ='R'),),
+           b_lagrangien    =BLOC(condition = "METHODE == 'LAGRANGIEN' ",
+                                 fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+                REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                DIST_1          =SIMP(statut='f',typ='R'),
+                DIST_2          =SIMP(statut='f',typ='R'),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
+                     VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),),),
+           b_penalisation       =BLOC(condition = "METHODE == 'PENALISATION' ",
+                                      fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                E_N             =SIMP(statut='f',typ='R'),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+                REAC_GEOM_INTE  =SIMP(statut='f',typ='I',defaut= 2),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                DIST_1          =SIMP(statut='f',typ='R'),
+                DIST_2          =SIMP(statut='f',typ='R'),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     E_T             =SIMP(statut='f',typ='R',
+                                           fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"),
+                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
+                     VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),),),
+           b_continue      =BLOC(condition = "METHODE == 'CONTINUE' ",
+                                 fr="Paramètres de la méthode continue (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+                INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD")),
+                COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                MODL_AXIS       =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
+                ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=2),
+                ITER_CONT_MAXI  =SIMP(statut='f',typ='I',defaut=30),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     ITER_FROT_MAXI  =SIMP(statut='f',typ='I',defaut=2),
+                     COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                     SEUIL_INIT      =SIMP(statut='f',typ='I',defaut=0),),),
+         ),
+
+        DDL_IMPO        =FACT(statut='f',min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                     AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                                 'TEMP','PRE1','PRE2','UI2','UI3','VI2','VI3','WI2','WI3','UO2',
+                                 'UO3','VO2','VO3','WO2','WO3','UI4','UI5','VI4','VI5','WI4',
+                                 'WI5','UO4','UO5','VO4','VO5','WO4','WO5','UI6','UO6','VI6',
+                                 'VO6','WI6','WO6','WO','WI1','WO1','GONF'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+             GRX             =SIMP(statut='f',typ='R' ),
+             PRES            =SIMP(statut='f',typ='R' ),
+             PHI             =SIMP(statut='f',typ='R' ),
+             TEMP            =SIMP(statut='f',typ='R' ),
+             PRE1            =SIMP(statut='f',typ='R' ),
+             PRE2            =SIMP(statut='f',typ='R' ),
+             UI2             =SIMP(statut='f',typ='R' ),
+             UI3             =SIMP(statut='f',typ='R' ),
+             UI4             =SIMP(statut='f',typ='R' ),
+             UI5             =SIMP(statut='f',typ='R' ),
+             UI6             =SIMP(statut='f',typ='R' ),
+             UO2             =SIMP(statut='f',typ='R' ),
+             UO3             =SIMP(statut='f',typ='R' ),
+             UO4             =SIMP(statut='f',typ='R' ),
+             UO5             =SIMP(statut='f',typ='R' ),
+             UO6             =SIMP(statut='f',typ='R' ),
+             VI2             =SIMP(statut='f',typ='R' ),
+             VI3             =SIMP(statut='f',typ='R' ),
+             VI4             =SIMP(statut='f',typ='R' ),
+             VI5             =SIMP(statut='f',typ='R' ),
+             VI6             =SIMP(statut='f',typ='R' ),
+             VO2             =SIMP(statut='f',typ='R' ),
+             VO3             =SIMP(statut='f',typ='R' ),
+             VO4             =SIMP(statut='f',typ='R' ),
+             VO5             =SIMP(statut='f',typ='R' ),
+             VO6             =SIMP(statut='f',typ='R' ),
+             WI2             =SIMP(statut='f',typ='R' ),
+             WI3             =SIMP(statut='f',typ='R' ),
+             WI4             =SIMP(statut='f',typ='R' ),
+             WI5             =SIMP(statut='f',typ='R' ),
+             WI6             =SIMP(statut='f',typ='R' ),
+             WO2             =SIMP(statut='f',typ='R' ),
+             WO3             =SIMP(statut='f',typ='R' ),
+             WO4             =SIMP(statut='f',typ='R' ),
+             WO5             =SIMP(statut='f',typ='R' ),
+             WO6             =SIMP(statut='f',typ='R' ),
+             WO              =SIMP(statut='f',typ='R' ),
+             WI1             =SIMP(statut='f',typ='R' ),
+             WO1             =SIMP(statut='f',typ='R' ),
+             GONF            =SIMP(statut='f',typ='R' ),
+           ),
+
+         EFFE_FOND       =FACT(statut='f',fr="Imposer un effet de fond",min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+           GROUP_MA_INT    =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PRES            =SIMP(statut='o',typ='R' ),
+         ),
+
+         EPSI_INIT       =FACT(statut='f',fr="Appliquer un chargement de déformation initiale à un volume 3D ou 2D",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ','EPX',
+                                 'KY','KZ','EXX','EYY','EXY','KXX','KYY','KXY'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             EPXX            =SIMP(statut='f',typ='R' ),
+             EPYY            =SIMP(statut='f',typ='R' ),
+             EPZZ            =SIMP(statut='f',typ='R' ),
+             EPXY            =SIMP(statut='f',typ='R' ),
+             EPXZ            =SIMP(statut='f',typ='R' ),
+             EPYZ            =SIMP(statut='f',typ='R' ),
+             EPX             =SIMP(statut='f',typ='R' ),
+             KY              =SIMP(statut='f',typ='R' ),
+             KZ              =SIMP(statut='f',typ='R' ),
+             EXX             =SIMP(statut='f',typ='R' ),
+             EYY             =SIMP(statut='f',typ='R' ),
+             EXY             =SIMP(statut='f',typ='R' ),
+             KXX             =SIMP(statut='f',typ='R' ),
+             KYY             =SIMP(statut='f',typ='R' ),
+             KXY             =SIMP(statut='f',typ='R' ),
+           ),
+
+           FACE_IMPO       =FACT(statut='f',min=1,max='**',
+             regles=(UN_PARMI('GROUP_MA','MAILLE',),
+                     AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                                 'TEMP','PRE1','PRE2','DNOR','DTAN'),
+                     EXCLUS('DNOR','DX'),
+                     EXCLUS('DNOR','DY'),
+                     EXCLUS('DNOR','DZ'),
+                     EXCLUS('DNOR','DRX'),
+                     EXCLUS('DNOR','DRY'),
+                     EXCLUS('DNOR','DRZ'),
+                     EXCLUS('DTAN','DX'),
+                     EXCLUS('DTAN','DY'),
+                     EXCLUS('DTAN','DZ'),
+                     EXCLUS('DTAN','DRX'),
+                     EXCLUS('DTAN','DRY'),
+                     EXCLUS('DTAN','DRZ'),),
+#  rajout d'un mot clé REPERE :/ LOCAL /GLOBAL
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+             DNOR            =SIMP(statut='f',typ='R' ),
+             DTAN            =SIMP(statut='f',typ='R' ),
+             GRX             =SIMP(statut='f',typ='R' ),
+             PRES            =SIMP(statut='f',typ='R' ),
+             PHI             =SIMP(statut='f',typ='R' ),
+             TEMP            =SIMP(statut='f',typ='R' ),
+             PRE1            =SIMP(statut='f',typ='R' ),
+             PRE2            =SIMP(statut='f',typ='R' ),
+           ),
+         FLUX_THM_REP    =FACT(statut='f',min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FLUN            =SIMP(statut='f',typ='R' ),
+             FLUN_HYDR1      =SIMP(statut='f',typ='R' ),
+             FLUN_HYDR2      =SIMP(statut='f',typ='R' ),
+           ),
+
+         FORCE_ARETE     =FACT(statut='f',fr="Appliquer des forces linéiques à une arete d élément volumique ou de coque",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+             MX              =SIMP(statut='f',typ='R' ),
+             MY              =SIMP(statut='f',typ='R' ),
+             MZ              =SIMP(statut='f',typ='R' ),
+           ),
+
+           FORCE_COQUE     =FACT(statut='f',fr="Appliquer des forces surfaciques sur des coques",min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('F1','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('F2','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('F3','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('MF1','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('MF2','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
+#  rajour d'un mot clé REPERE :/ LOCAL /GLOBAL
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+               FX              =SIMP(statut='f',typ='R' ),
+               FY              =SIMP(statut='f',typ='R' ),
+               FZ              =SIMP(statut='f',typ='R' ),
+               MX              =SIMP(statut='f',typ='R' ),
+               MY              =SIMP(statut='f',typ='R' ),
+               MZ              =SIMP(statut='f',typ='R' ),
+
+               F1              =SIMP(statut='f',typ='R' ),
+               F2              =SIMP(statut='f',typ='R' ),
+               F3              =SIMP(statut='f',typ='R' ),
+               MF1             =SIMP(statut='f',typ='R' ),
+               MF2             =SIMP(statut='f',typ='R' ),
+
+             PRES            =SIMP(statut='f',typ='R' ),
+             PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL",) ),
+           ),
+
+         FORCE_CONTOUR   =FACT(statut='f',fr="Appliquer des forces linéiques au bord d'un domaine 2D ou AXIS_FOURIER",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+             MX              =SIMP(statut='f',typ='R' ),
+             MY              =SIMP(statut='f',typ='R' ),
+             MZ              =SIMP(statut='f',typ='R' ),
+           ),
+         FORCE_ELEC      =FACT(statut='f',
+                                 fr="Force de Laplace due à la présence d'un conducteur rectiligne secondaire non maillé",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','POSITION'),
+                     EXCLUS('FX','POSITION'),
+                     EXCLUS('FY','POSITION'),
+                     EXCLUS('FZ','POSITION'),),
+#  trop de regles : les blocs conditionnels permettent d en suprimer
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+             FX              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FY              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FZ              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+
+             POSITION        =SIMP(statut='f',typ='TXM',fr="Direction prédéfinie",into=("PARA","INFI","FINI",) ),
+             b_para     =BLOC ( condition = "POSITION == 'PARA'",
+               regles=(UN_PARMI('TRANS','DIST'),),
+               TRANS           =SIMP(statut='f',typ='R',max=3),
+               DIST            =SIMP(statut='f',typ='R' ),
+               b_point2        =BLOC ( condition = "DIST != None",
+                 POINT2           =SIMP(statut='o',typ='R',max=3),
+               ),
+             ),
+             b_fini_infi     =BLOC ( condition = "(POSITION == 'FINI') or (POSITION == 'INFI')",
+               POINT1          =SIMP(statut='o',typ='R',max=3),
+               POINT2          =SIMP(statut='o',typ='R',max=3),
+             ),
+           ),
+
+         FORCE_FACE      =FACT(statut='f',fr="Appliquer des forces surfaciques sur une face d'éléments volumiques",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+           ),
+         FORCE_INTERNE   =FACT(statut='f',fr="Appliquer des forces volumiques (2D ou 3D) à un domaine volumique",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ' ),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+           ),
+
+         IMPE_FACE       =FACT(statut='f',fr="Appliquer une impédance acoustique à une face",min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE' ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             IMPE            =SIMP(statut='o',typ='R' ),
+           ),
+
+         FORCE_NODALE    =FACT(statut='f',fr="Imposer des forces nodales en des noeuds",min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           FX              =SIMP(statut='f',typ='R' ),
+           FY              =SIMP(statut='f',typ='R' ),
+           FZ              =SIMP(statut='f',typ='R' ),
+           MX              =SIMP(statut='f',typ='R' ),
+           MY              =SIMP(statut='f',typ='R' ),
+           MZ              =SIMP(statut='f',typ='R' ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+         ),
+        FORCE_POUTRE    =FACT(statut='f',fr="Appliquer des forces linéiques sur des poutres",min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','N','VY','VZ'),
+                     PRESENT_ABSENT('FX','N','VY','VZ'),
+                     PRESENT_ABSENT('FY','N','VY','VZ'),
+                     PRESENT_ABSENT('FZ','N','VY','VZ'),
+                     PRESENT_ABSENT('N','FX','FY','FZ'),
+                     PRESENT_ABSENT('VY','FX','FY','FZ'),
+                     PRESENT_ABSENT('VZ','FX','FY','FZ'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE",) ),
+#  rajour d'un mot clé REPERE :/ LOCAL /GLOBAL
+               FX              =SIMP(statut='f',typ='R' ),
+               FY              =SIMP(statut='f',typ='R' ),
+               FZ              =SIMP(statut='f',typ='R' ),
+
+               N               =SIMP(statut='f',typ='R' ),
+               VY              =SIMP(statut='f',typ='R' ),
+               VZ              =SIMP(statut='f',typ='R' ),
+
+           ),
+
+         FORCE_TUYAU     =FACT(statut='f',fr="imposer une pression dans un élément TUYAU",min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             PRES            =SIMP(statut='f',typ='R' ),
+           ),
+
+        INTE_ELEC       =FACT(statut='f',fr="Force de Laplace due à la présence d'un conducteur non rectiligne secondaire",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('GROUP_MA_2','MAILLE_2','TRANS','SYME'),
+                     EXCLUS('TRANS','SYME'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+             TRANS           =SIMP(statut='f',typ='R',max='**'),
+             SYME            =SIMP(statut='f',typ='R',max='**'),
+           ),
+
+         LIAISON_CHAMNO  =FACT(statut='f',fr="définir une relation linéaire entre tous les ddls d'un concept cham_nno",
+                                 min=1,max='**',
+#  type de cham_no CO()
+             CHAM_NO         =SIMP(statut='o',typ=cham_no), #CO()
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+
+           LIAISON_COQUE   =FACT(statut='f',min=1,max='**',
+             GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+           LIAISON_DDL     =FACT(statut='f',fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             DDL             =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+           ),
+           LIAISON_ELEM    =FACT(statut='f',fr="Raccorder une poutre à une partie massive 3D ou une coque", min=1,max='**',
+             regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                     UN_PARMI('GROUP_NO_2','NOEUD_2'),),
+             OPTION          =SIMP(statut='o',typ='TXM',into=("3D_TUYAU","3D_POU","COQ_POU","COQ_TUYAU") ),
+             GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+             CARA_ELEM       =SIMP(statut='f',typ=(cara_elem) ),
+             AXE_POUTRE      =SIMP(statut='f',typ='R',max=3),
+             ANGL_MAX        =SIMP(statut='f',typ='R',defaut= 1. ),
+           ),
+
+           LIAISON_GROUP   =FACT(statut='f',fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                     UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                     EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                     EXCLUS('GROUP_MA_1','NOEUD_2'),
+                     EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                     EXCLUS('GROUP_NO_1','MAILLE_2'),
+                     EXCLUS('MAILLE_1','GROUP_NO_2'),
+                     EXCLUS('MAILLE_1','NOEUD_2'),
+                     EXCLUS('NOEUD_1','GROUP_MA_2'),
+                     EXCLUS('NOEUD_1','MAILLE_2'),
+                     EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+
+               GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+               GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+               GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+               NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+               GROUP_NO_2      =SIMP(statut='f',typ=no,max='**'),
+               NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+
+             SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+             SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+             DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+             DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+             SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             TRAN            =SIMP(statut='f',typ='R',max=3),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+             CENTRE          =SIMP(statut='f',typ='R',max=3),
+           ),
+
+           LIAISON_OBLIQUE =FACT(statut='f',fr="Appliquer à des noeuds une valeur de déplacement dans un repere oblique",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                     UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+           ),
+
+           LIAISON_SOLIDE  =FACT(statut='f',fr="Modéliser une partie indéformable d'une structure",min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+
+           LIAISON_UNIF    =FACT(statut='f',fr="Imposer une meme valeur (inconnue) à des ddls d'un emsemble de noeuds",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           ),
+
+         LIAISON_UNIL_NO =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),# CO()
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),# CO()
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),# CO()
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),# CO()
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max=3 ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),
+           CENTRE          =SIMP(statut='f',typ='R',max=3 ),
+           ANGLE_MAX       =SIMP(statut='f',typ='R' ),
+           VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
+           FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",
+                                 into=("SANS","TRESCA","COULOMB") ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
+                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION") ),
+           COULOMB         =SIMP(statut='f',typ='R' ),
+           TRESCA          =SIMP(statut='f',typ='R' ),
+           E_T             =SIMP(statut='f',typ='R' ),
+           COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           CONTACT         =SIMP(statut='f',typ='TXM',into=("MAINTENU",) ),
+           JEU             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+
+           LIAISON_MAIL    =FACT(statut='f',min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA_MAIT','MAILLE_MAIT'),
+                     AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL'),
+                     PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),),
+              GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_MAIT     =SIMP(statut='f',typ=ma,max='**'),
+              GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_ESCL     =SIMP(statut='f',typ=ma,max='**'),
+              GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,max='**'),
+              NOEUD_ESCL      =SIMP(statut='f',typ=no,max='**'),
+              TRAN            =SIMP(statut='f',typ='R',max=3 ),
+              ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),
+              CENTRE          =SIMP(statut='f',typ='R',max=3 ),
+              DDL_MAIT        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+              DDL_ESCL        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+         ),
+
+         ONDE_FLUI       =FACT(statut='f',fr="Appliquer une amplitude de pression d onde incidente",min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             PRES            =SIMP(statut='o',typ='R' ),
+           ),
+
+         PRES_REP        =FACT(statut='f',fr="Appliquer une pression à un domaine de milieu continu 2D ou 3D",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('PRES','CISA_2D' ),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             PRES            =SIMP(statut='f',typ='R' ),
+             CISA_2D         =SIMP(statut='f',typ='R' ),
+           ),
+
+         PESANTEUR       =SIMP(statut='f',typ='R',fr="Champ de pesanteur",min=4,max=4),
+
+         RELA_CINE_BP    =FACT(statut='f',min=1,max='**',
+           CABLE_BP        =SIMP(statut='o',typ=cabl_precont ),
+           SIGM_BPEL       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           RELA_CINE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+        ROTATION        =SIMP(statut='f',typ='R',fr="Champ de rotation",min=4,max=4),
+         b_rotation      =BLOC ( condition = "ROTATION != None",
+           CENTRE          =SIMP(statut='f',typ='R',defaut=(0.,0.,0.),max=3),),
+
+         VITE_FACE       =FACT(statut='f',fr="Imposer des vitesses acoustiquesnormales à une face",min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             VNOR            =SIMP(statut='o',typ='R' ),
+           ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+
+def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
+                        SOLVEUR,NUME_DDL,CHARGE,INST,**args):
+  """
+     Ecriture de la macro MACRO_MATR_ASSE
+  """
+  ier=0
+  # On met le mot cle NUME_DDL dans une variable locale pour le proteger
+  numeddl=NUME_DDL
+  # On importe les definitions des commandes a utiliser dans la macro
+  # Le nom de la variable doit etre obligatoirement le nom de la commande
+  CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM')
+  NUME_DDL      =self.get_cmd('NUME_DDL')
+  ASSE_MATRICE  =self.get_cmd('ASSE_MATRICE')
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.icmd=1
+
+  if SOLVEUR:
+    methode=SOLVEUR['METHODE']
+    if methode=='LDLT':
+      if SOLVEUR['RENUM']:
+         renum=SOLVEUR['RENUM']
+      else:
+         renum='RCMK'
+      if renum not in ('SANS','RCMK'):
+        ier=ier+1
+        self.cr.fatal("Avec methode LDLT, RENUM doit etre SANS ou RCMK.")
+        return ier
+    elif methode=='MULT_FRONT':
+      if SOLVEUR['RENUM']:
+         renum=SOLVEUR['RENUM']
+      else:
+         renum='MDA'
+      if renum not in ('MDA','MD','METIS'):
+        ier=ier+1
+        self.cr.fatal("Avec methode MULT_FRONT, RENUM doit etre MDA, MD ou RCMK.")
+        return ier
+    elif methode=='GCPC':
+      if SOLVEUR['RENUM']:
+         renum=SOLVEUR['RENUM']
+      else:
+         renum='SANS'
+      if renum not in ('SANS','RCMK'):
+        ier=ier+1
+        self.cr.fatal("Avec methode GCPC, RENUM doit etre SANS ou RCMK.")
+        return ier
+  else:
+    methode='MULT_FRONT'
+    renum  ='MDA'
+
+  if numeddl in self.sdprods:
+    # Si le concept numeddl est dans self.sdprods
+    # il doit etre  produit par la macro
+    # il faudra donc appeler la commande NUME_DDL
+    lnume = 1
+  else:
+    lnume = 0
+  lrigel = 0
+  lmasel = 0
+
+  iocc=0
+  for m in MATR_ASSE:
+    iocc=iocc+1
+    option=m['OPTION']
+    if iocc == 1 and lnume == 1 and option not in ('RIGI_MECA','RIGI_MECA_LAGR',
+                                                   'RIGI_THER','RIGI_ACOU')      :
+      ier=ier+1
+      self.cr.fatal("LA PREMIERE OPTION DOIT ETRE RIGI_MECA OU RIGI_THER OU RIGI_ACOU OU RIGI_MECA_LAGR")
+      return ier
+
+    if m['SIEF_ELGA']!=None and option!='RIGI_GEOM':
+      ier=ier+1
+      self.cr.fatal("SIEF_ELGA N EST ADMIS QU AVEC L OPTION RIGI_GEOM")
+      return ier
+
+    if m['MODE_FOURIER']!=None and option not in ('RIGI_MECA','RIGI_FLUI_STRU','RIGI_THER'):
+      ier=ier+1
+      self.cr.fatal("MODE_FOURIER N EST ADMIS QU AVEC UNE DES OPTIONS RIGI_MECA RIGI_FLUI_STRU RIGI_THER")
+      return ier
+
+    if (m['THETA']!=None or m['PROPAGATION']!=None) and option!='RIGI_MECA_LAGR':
+      ier=ier+1
+      self.cr.fatal("PROPAGATION ET,OU THETA NE SONT ADMIS QU AVEC L OPTION RIGI_MECA_LAGR")
+      return ier
+
+    motscles={'OPTION':option}
+    if option == 'AMOR_MECA':
+       if (not lrigel or not lmasel):
+          ier=ier+1
+          self.cr.fatal("""POUR CALCULER AMOR_MECA, IL FAUT AVOIR CALCULE
+                           RIGI_MECA ET MASS_MECA AUPARAVANT (DANS LE MEME APPEL)""")
+          return ier
+       if CHAM_MATER != None:
+          motscles['RIGI_MECA']   =rigel
+          motscles['MASS_MECA']   =masel
+    if CHARGE     != None:
+       if option[0:9] not in ('MASS_THER','RIGI_GEOM','MASS_ID_M'):
+                           motscles['CHARGE']      =CHARGE
+    if CHAM_MATER != None: motscles['CHAM_MATER']  =CHAM_MATER
+    if CARA_ELEM  != None: motscles['CARA_ELEM']   =CARA_ELEM
+    if INST       != None: motscles['INST']        =INST
+    if m['SIEF_ELGA']   :  motscles['SIEF_ELGA']   =m['SIEF_ELGA']
+    if m['MODE_FOURIER']:  motscles['MODE_FOURIER']=m['MODE_FOURIER']
+    if m['THETA']       :  motscles['THETA']       =m['THETA']
+    if m['PROPAGATION'] :  motscles['PROPAGATION'] =m['PROPAGATION']
+
+    __a=CALC_MATR_ELEM(MODELE=MODELE,**motscles)
+
+    if option == 'RIGI_MECA':
+      rigel  = __a
+      lrigel = 1
+    if option == 'MASS_MECA':
+      masel  = __a
+      lmasel = 1
+
+    if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'):
+      self.DeclareOut('num',numeddl)
+      # On peut passer des mots cles egaux a None. Ils sont ignores
+      num=NUME_DDL(MATR_RIGI=__a,METHODE=methode,RENUM=renum)
+    else:
+      num=numeddl
+
+    self.DeclareOut('mm',m['MATRICE'])
+    mm=ASSE_MATRICE(MATR_ELEM=__a,NUME_DDL=num)
+  return ier
+
+def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args):
+  if not MATR_ASSE:  raise AsException("Impossible de typer les concepts resultats")
+  if not NUME_DDL:  raise AsException("Impossible de typer les concepts resultats")
+  self.type_sdprod(NUME_DDL,nume_ddl)
+  for m in MATR_ASSE:
+    opti=m['OPTION']
+
+    if opti in ( "RIGI_MECA","RIGI_FLUI_STRU","RIGI_MECA_LAGR" ,
+       "MASS_MECA" , "MASS_FLUI_STRU" ,"RIGI_GEOM" ,"RIGI_ROTA",
+       "AMOR_MECA","IMPE_MECA","MASS_ID_MDEP_R","MASS_ID_MDNS_R",
+       "ONDE_FLUI","MASS_MECA_DIAG" ) : t=matr_asse_depl_r
+
+    if opti in ( "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",) : t=matr_asse_pres_c
+
+    if opti in ( "RIGI_THER","MASS_THER","RIGI_THER_CONV" ,
+       "RIGI_THER_CONV_D","MASS_ID_MTEM_R","MASS_ID_MTNS_R",) : t=matr_asse_temp_r
+
+    if opti == "RIGI_MECA_HYST"   : t= matr_asse_depl_c
+
+    self.type_sdprod(m['MATRICE'],t)
+  return None
+MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,docu="U4.61.21-c",
+                      sd_prod=macro_matr_asse_prod,
+                      fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ",
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou)),
+         INST            =SIMP(statut='f',typ='R'),
+         NUME_DDL        =SIMP(statut='o',typ=(nume_ddl,CO)),
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",
+                                 into=("LDLT","MULT_FRONT","GCPC")),
+           RENUM           =SIMP(statut='f',typ='TXM',into=("SANS","RCMK","MD","MDA","METIS")),
+         ),
+         MATR_ASSE       =FACT(statut='o',min=01,max='**',
+           MATRICE         =SIMP(statut='o',typ=(matr_asse,CO)),
+           OPTION          =SIMP(statut='o',typ='TXM',
+                                 into=("RIGI_MECA","MASS_MECA","MASS_MECA_DIAG",
+                                       "AMOR_MECA","RIGI_MECA_HYST","IMPE_MECA",
+                                       "ONDE_FLUI","RIGI_FLUI_STRU","MASS_FLUI_STRU",
+                                       "RIGI_ROTA","RIGI_GEOM","RIGI_MECA_LAGR",
+                                       "RIGI_THER","MASS_THER",
+                                       "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",
+                                       "MASS_ID_MTEM_R","MASS_ID_MTNS_R","MASS_ID_MDEP_R","MASS_ID_MDNS_R",)
+                                 ),
+           SIEF_ELGA       =SIMP(statut='f',typ=cham_elem_sief_r),
+           MODE_FOURIER    =SIMP(statut='f',typ='I'),
+           THETA           =SIMP(statut='f',typ=theta_geom),
+           PROPAGATION     =SIMP(statut='f',typ='R'),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+
+def mode_iter_simult_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
+  if TYPE_RESU == "MODE_FLAMB" : return mode_flamb
+  if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c
+  if AsType(MATR_A) == matr_asse_depl_r : return mode_meca
+  if AsType(MATR_A) == matr_asse_pres_r : return mode_acou
+  if AsType(MATR_A) == matr_asse_gene_r : return mode_gene
+  raise AsException("type de concept resultat non prevu")
+
+MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_prod,
+                      fr="Modes propres par itérations simultanées ; valeurs propres et modes propres réels ou complexes",
+                      docu="U4.52.03-e",reentrant='n',
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_C          =SIMP(statut='f',position='global',typ=matr_asse_depl_r ),
+         METHODE         =SIMP(statut='f',position='global',typ='TXM',defaut="SORENSEN",
+                               into=("TRI_DIAG","JACOBI","SORENSEN") ),
+         TYPE_RESU       =SIMP(statut='f',position='global',typ='TXM',defaut="DYNAMIQUE",
+                               into=("MODE_FLAMB","DYNAMIQUE"),
+                               fr="Type d analyse" ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="SANS",into=("MODE_RIGIDE","SANS"),
+                               fr="Calcul des modes de corps rigide, uniquement pour la méthode TRI_DIAG" ),
+
+         b_flamb         =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+           CALC_FREQ       =FACT(statut='d',min=0,max=1,
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
+                                   fr="Choix de l option et par conséquent du shift du problème modal" ),
+             b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_centre      =BLOC(condition = "OPTION == 'CENTRE'",
+                                 fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+               CHAR_CRIT       =SIMP(statut='o',typ='R',min=1,max=1,
+                                     fr="Charge critique autour de laquelle on cherche les charges critiques propres"),
+             ),
+             b_bande       =BLOC(condition = "(OPTION == 'BANDE')",
+                                 fr="Recherche des valeurs propres dans une bande donnée",
+               CHAR_CRIT       =SIMP(statut='o',typ='R',min=2,max=2,
+                                     fr="Valeur des deux charges critiques délimitant la bande de recherche"),
+             ),
+             APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG"),
+                                   fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),
+             regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+             DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+             COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+             b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
+               PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
+               NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+               PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
+               NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ),
+             ),
+             b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
+               PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
+               NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
+               PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+               NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
+             ),
+             b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
+               PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),
+               NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),
+               PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
+             ),
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+           ),
+         ),
+
+         b_dynam        =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+           CALC_FREQ       =FACT(statut='d',min=0,max=1,
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
+                                   fr="Choix de l option et par conséquent du shift du problème modal" ),
+             b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_centre       =BLOC(condition = "OPTION == 'CENTRE'",
+                                  fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+               FREQ            =SIMP(statut='o',typ='R',min=1,max=1,
+                                     fr="Fréquence autour de laquelle on cherche les fréquences propres"),
+               AMOR_REDUIT     =SIMP(statut='f',typ='R',max=1,),
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_bande         =BLOC(condition = "(OPTION == 'BANDE')",
+                                   fr="Recherche des valeurs propres dans une bande donnée",
+               FREQ            =SIMP(statut='o',typ='R',min=2,max=2,
+                                     fr="Valeur des deux fréquences délimitant la bande de recherche"),
+             ),
+             APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG"),
+                                   fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),
+             regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+             DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+             COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+             b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
+               PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
+               NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+               PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
+               NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ),
+             ),
+             b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
+               PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
+               NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
+               PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+               NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
+             ),
+             b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
+               PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),
+               NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),
+               PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
+             ),
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+           ),
+         ),
+
+         VERI_MODE       =FACT(statut='d',min=0,max=1,
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-3,val_min=0.E+0 ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0,
+                                 fr="Valeur limite admise pour l ereur a posteriori des modes" ),
+           STURM           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+
+def norm_mode_prod(MODE,**args ):
+  if AsType(MODE) == mode_meca   : return mode_meca
+  if AsType(MODE) == mode_meca_c : return mode_meca_c
+  if AsType(MODE) == mode_flamb  : return mode_flamb
+  raise AsException("type de concept resultat non prevu")
+
+NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
+               fr="Normalisation de modes propres",
+               docu="U4.52.11-e",reentrant='f',
+         regles=(UN_PARMI('NORME','NOEUD','AVEC_CMP','SANS_CMP'),),
+         MODE       =SIMP(statut='o',typ=(mode_meca,mode_flamb) ),
+         NORME      =SIMP(statut='f',typ='TXM',fr="Norme prédéfinie : masse généralisée, euclidienne,...",
+                          into=("MASS_GENE","RIGI_GENE","EUCL","EUCL_TRAN","TRAN","TRAN_ROTA") ),
+         NOEUD      =SIMP(statut='f',typ=no, fr="Composante donnée d un noeud spécifié égale à 1"),
+         b_noeud    =BLOC(condition = "NOEUD != None",
+           NOM_CMP    =SIMP(statut='o',typ='TXM' ),
+         ),
+         AVEC_CMP   =SIMP(statut='f',typ='TXM',max='**'),
+         SANS_CMP   =SIMP(statut='f',typ='TXM',max='**'),
+         MASS_INER  =SIMP(statut='f',typ=tabl_mass_iner ),
+         MODE_SIGNE =FACT(statut='f',min=00,max=01,fr="Imposer un signe sur une des composantes des modes",
+           NOEUD      =SIMP(statut='o',typ=no,fr="Noeud ou sera imposé le signe"),
+           NOM_CMP    =SIMP(statut='o',typ='TXM',fr="Composante du noeud ou sera imposé le signe" ),
+           SIGNE      =SIMP(statut='f',typ='TXM',defaut="POSITIF",into=("NEGATIF","POSITIF"),
+                            fr="Choix du signe" ),
+         ),
+         TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+         INFO       =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+
+def mode_stat_prod(MODE_STAT,FORCE_NODALE,PSEUDO_MODE,**args):
+ if (MODE_STAT != None)          : return mode_stat_depl
+ if (PSEUDO_MODE !=None)         : return mode_stat_acce
+ if (FORCE_NODALE != None)       : return mode_stat_forc
+ raise AsException("type de concept resultat non prevu")
+MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_stat_prod,
+                   fr="Calcul de modes statiques",
+                   docu="U4.52.14-e",reentrant='n',
+         MATR_RIGI       =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
+               regles=(UN_PARMI('MODE_STAT','FORCE_NODALE','PSEUDO_MODE'),),
+         MODE_STAT       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
+                   UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ,),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ,),
+           AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+           SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         FORCE_NODALE    =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
+                   UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",), ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",), ),
+           AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+           SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         PSEUDO_MODE       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('AXE','DIRECTION','TOUT','NOEUD','GROUP_NO' ),),
+           AXE             =SIMP(statut='f',typ='TXM',into=("X","Y","Z"),max=3),
+           DIRECTION       =SIMP(statut='f',typ='R',min=3,max=3),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           b_dir           =BLOC(condition = "DIRECTION != None",
+             NOM_DIR         =SIMP(statut='f',typ='TXM' ),),
+           b_cmp          =BLOC(condition="TOUT!= None or NOEUD!=None or GROUP_NO!=None",
+             regles=(UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+             TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+             SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+        ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
+)  ;
+
+DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8,
+                    fr="Définition d une suite croissante de réels",
+                    docu="U4.34.01-f",reentrant='n',
+         regles=(UN_PARMI('VALE','DEBUT',),
+                 EXCLUS('VALE','INTERVALLE'),
+                 ENSEMBLE('DEBUT','INTERVALLE')),
+         VALE            =SIMP(statut='f',typ='R',max='**'),
+         DEBUT           =SIMP(statut='f',typ='R'),
+         INTERVALLE      =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOMBRE','PAS'),),
+           JUSQU_A         =SIMP(statut='o',typ='R'),
+           NOMBRE          =SIMP(statut='f',typ='I'),
+           PAS             =SIMP(statut='f',typ='R'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+
+def defi_valeur_prod(self,IS=None,R8=None,TX=None,C8=None,LS=None):
+  if IS != None  : return entier
+  if R8 != None  : return reel
+  if TX != None  : return chaine
+  if C8 != None  : return complexe
+  if LS != None  : return liste
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_VALEUR=MACRO(nom="DEFI_VALEUR",op=-4,sd_prod=defi_valeur_prod,
+                 fr="Affectation d une valeur à une variable Superviseur",
+                 docu="U4.31.04-e1",reentrant='f',
+         regles=(UN_PARMI('IS','R8','TX','C8','LS'),),
+         IS              =SIMP(statut='f',typ='I',max='**'),
+         R8              =SIMP(statut='f',typ='R',max='**'),
+         TX              =SIMP(statut='f',typ='TXM',max='**'),
+         C8              =SIMP(statut='f',typ='C',max='**'),
+         LS              =SIMP(statut='f',typ='L',max='**'),
+)  ;
+
+FORMULE = FORM( nom='FORMULE',op=-5,sd_prod=fonction,
+                fr="Définition d une fonction",reentrant = 'n',
+                regles=(UN_PARMI('REEL','ENTIER','COMPLEXE'),),
+                REEL = SIMP(typ = 'shell',max=1),
+                ENTIER = SIMP(typ = 'shell',max=1),
+                COMPLEXE = SIMP(typ = 'shell',max=1),
+) ;
+
+CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=fonction,
+                      docu="U4.32.01-d1",reentrant='f',
+         regles=(UN_PARMI('VALE_R','LIST_PARA'),),
+         FONCTION        =SIMP(statut='o',typ=fonction ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE_R          =SIMP(statut='f',typ='R',max='**'),
+         LIST_PARA       =SIMP(statut='f',typ=listr8 ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG","INT") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("EXCLU","CONSTANT","LINEAIRE","INTERPRE") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("EXCLU","CONSTANT","LINEAIRE","INTERPRE") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+
+def INCLUDE_prod(self,UNITE,**args):
+  """ Fonction sd_prod pour la macro include
+  """
+  # Si unite a change on reevalue le fichier associe
+  if not hasattr(self,'unite') or self.unite != UNITE:
+    f,text=self.get_file(unite=UNITE)
+    self.unite=UNITE
+    self.fichier_init = f
+    # on execute le texte fourni dans le contexte forme par
+    # le contexte de l etape pere (global au sens Python)
+    # et le contexte de l etape (local au sens Python)
+    code=compile(text,f,'exec')
+    if self.jdc and self.jdc.par_lot == 'NON':
+      # On est en mode commande par commande
+      # On teste la validite de la commande avec interruption eventuelle
+      cr=self.report()
+      self.parent.cr.add(cr)
+      if not cr.estvide():
+        raise EOFError
+    d={}
+    self.g_context = d
+    self.contexte_fichier_init = d
+    exec code in self.parent.g_context,d
+
+def INCLUDE_context(self,d):
+  """ Fonction op_init pour macro INCLUDE
+  """
+  for k,v in self.g_context.items():
+    d[k]=v
+
+INCLUDE=MACRO(nom="INCLUDE",op=-1,docu="U4.13.01-e",
+             fr="Débranchement vers un fichier de commandes secondaires",
+             #fichier_ini=1,
+             sd_prod=INCLUDE_prod,
+             op_init=INCLUDE_context,
+         UNITE = SIMP(statut='o',typ='I'),
+         INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+);
+
+def calc_char_seisme_prod(MATR_MASS,**args ):
+  if AsType(MATR_MASS) == matr_asse_depl_r : return cham_no_depl_r
+  raise AsException("type de concept resultat non prevu")
+
+CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op=  92,sd_prod=calc_char_seisme_prod,
+                      docu="U4.63.01-e",reentrant='n',
+         regles=(UN_PARMI('MONO_APPUI','MODE_STAT' ),),
+         MATR_MASS       =SIMP(statut='o',typ=matr_asse_depl_r,fr="Matrice de masse" ),
+         DIRECTION       =SIMP(statut='o',typ='R',max=06,fr="Directions du séisme imposé"),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,) ),
+         b_mode_stat     =BLOC ( condition = "MODE_STAT != None",
+           regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+
+def macro_proj_base_ops(self,BASE,NB_VECT,MATR_ASSE_GENE,VECT_ASSE_GENE,**args):
+  """
+     Ecriture de la macro MACRO_PROJ_BASE
+  """
+  ier=0
+  # On importe les definitions des commandes a utiliser dans la macro
+  NUME_DDL_GENE  =self.get_cmd('NUME_DDL_GENE')
+  PROJ_MATR_BASE =self.get_cmd('PROJ_MATR_BASE')
+  PROJ_VECT_BASE =self.get_cmd('PROJ_VECT_BASE')
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.icmd=1
+
+  nompro=None
+  iocc=0
+  if MATR_ASSE_GENE:
+    for m in MATR_ASSE_GENE:
+      iocc=iocc+1
+      if (iocc==1 or (m['PROFIL']!=nompro)):
+         __num=NUME_DDL_GENE(BASE=BASE,NB_VECT=NB_VECT,STOCKAGE=m['PROFIL'])
+      nompro=m['PROFIL']
+      motscles={}
+      if   m['MATR_ASSE']     :  motscles['MATR_ASSE']     =m['MATR_ASSE']
+      elif m['MATR_ASSE_GENE']:  motscles['MATR_ASSE_GENE']=m['MATR_ASSE_GENE']
+      else:
+          ier=ier+1
+          self.cr.fatal("MATR_ASSE et MATR_ASSE_GENE absents")
+          return ier
+      self.DeclareOut('mm',m['MATRICE'])
+      mm=PROJ_MATR_BASE(BASE=BASE,NUME_DDL_GENE=__num,NB_VECT=NB_VECT,**motscles)
+
+  iocc=0
+  if VECT_ASSE_GENE:
+    for v in VECT_ASSE_GENE:
+      iocc=iocc+1
+      if (iocc==1 and not MATR_ASSE_GENE):
+         __num=NUME_DDL_GENE(BASE=BASE,NB_VECT=NB_VECT,STOCKAGE='DIAG')
+      motscles={}
+      if   v['VECT_ASSE']     :  motscles['VECT_ASSE']     =v['VECT_ASSE']
+      elif v['VECT_ASSE_GENE']:  motscles['VECT_ASSE_GENE']=v['VECT_ASSE_GENE']
+      else:
+          ier=ier+1
+          self.cr.fatal("MATR_ASSE et MATR_ASSE_GENE absents")
+          return ier
+      motscles['TYPE_VECT']=v['TYPE_VECT']
+      self.DeclareOut('vv',v['VECTEUR'])
+      vv=PROJ_VECT_BASE(BASE=BASE,NUME_DDL_GENE=__num,NB_VECT=NB_VECT,**motscles)
+
+  return ier
+
+
+def macro_proj_base_prod(self,MATR_ASSE_GENE,VECT_ASSE_GENE,**args ):
+  if MATR_ASSE_GENE != None:
+    for m in MATR_ASSE_GENE:
+      self.type_sdprod(m['MATRICE'],matr_asse_gene_r)
+      self.type_sdprod(m['MATR_ASSE'],matr_asse_depl_r)
+  if VECT_ASSE_GENE != None:
+    for v in VECT_ASSE_GENE:
+      self.type_sdprod(v['VECTEUR'],vect_asse_gene)
+  return None
+
+MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,docu="U4.63.11-c",
+                      sd_prod=macro_proj_base_prod,
+                      fr="Projection des matrices et/ou vecteurs assemblés sur une base de vecteurs",
+         BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene) ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999),
+         MATR_ASSE_GENE  =FACT(statut='f',min=01,max='**',
+           MATRICE         =SIMP(statut='o',typ=(CO,matr_asse)),
+           MATR_ASSE       =SIMP(statut='f',typ=matr_asse_depl_r),
+           MATR_ASSE_GENE  =SIMP(statut='f',typ=matr_asse_gene_r),
+           PROFIL          =SIMP(statut='f',typ='TXM',defaut="DIAG",into=("PLEIN","DIAG") ),
+         ),
+         VECT_ASSE_GENE  =FACT(statut='f',min=01,max='**',
+           VECTEUR         =SIMP(statut='o',typ=(CO,vect_asse)),
+           TYPE_VECT       =SIMP(statut='f',typ='TXM',defaut="FORC"),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r),
+           VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+
+RETOUR=PROC(nom="RETOUR",op= -2,docu="U4.13.02-e",
+            fr="Retour au fichier de commandes appelant",
+) ;
+
+DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op=  73,sd_prod=obstacle
+                    ,fr="Définition d un obstacle plan perpendiculaire à une structure filaire",
+                     docu="U4.44.21-e",reentrant='n',
+         TYPE            =SIMP(statut='o',typ='TXM',defaut="CERCLE",
+                             into=("CERCLE","PLAN_Y","PLAN_Z","DISCRET",
+                             "BI_CERCLE","BI_PLAN_Y","BI_PLAN_Z","BI_CERC_INT",
+                             "CRAYON_900","CRAYON_1300","GUID_A_CARTE_900",
+                             "GUID_B_CARTE_900","GUID_C_CARTE_900",
+                             "GUID_D_CARTE_900","GUID_E_CARTE_900",
+                             "GUID_F_CARTE_900","GUID_A_CARTE_1300",
+                             "GUID_B_CARTE_1300","GUID_C_CARTE_1300",
+                             "GUID_D_CARTE_1300","GUID_E_CARTE_1300",
+                             "GUID_F_CARTE_1300","GUID_A_CARSP_900",
+                             "GUID_B_CARSP_900","GUID_C_CARSP_900",
+                             "GUID_D_CARSP_900","GUID_E_CARSP_900",
+                             "GUID_F_CARSP_900","GUID_A_CARSP_1300",
+                             "GUID_B_CARSP_1300","GUID_C_CARSP_1300",
+                             "GUID_D_CARSP_1300","GUID_E_CARSP_1300",
+                             "GUID_F_CARSP_1300","GUID_A_GCONT_900",
+                             "GUID_B_GCONT_900","GUID_C_GCONT_900",
+                             "GUID_D_GCONT_900","GUID_E_GCONT_900",
+                             "GUID_F_GCONT_900","GUID_A_GCONT_1300",
+                             "GUID_B_GCONT_1300","GUID_C_GCONT_1300",
+                             "GUID_D_GCONT_1300","GUID_E_GCONT_1300",
+                             "GUID_F_GCONT_1300","GUID_A_GCOMB_900",
+                             "GUID_B_GCOMB_900","GUID_C_GCOMB_900",
+                             "GUID_D_GCOMB_900","GUID_E_GCOMB_900",
+                             "GUID_F_GCOMB_900","GUID_A_GCOMB_1300",
+                             "GUID_B_GCOMB_1300","GUID_C_GCOMB_1300",
+                             "GUID_D_GCOMB_1300","GUID_E_GCOMB_1300",
+                             "GUID_F_GCOMB_1300",) ),
+         VALE            =SIMP(statut='f',typ='R',max='**'),
+         VERIF           =SIMP(statut='f',typ='TXM',defaut="FERME"),
+)  ;
+
+DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
+                     fr="Réponse dynamique transitoire en coordonnées généralisées par recombinaison modale",
+                     docu="U4.53.21-e",reentrant='f',
+      regles=(EXCLUS('AMOR_REDUIT','AMOR_GENE','LIST_AMOR'),
+              PRESENT_ABSENT('MODE_STAT','MODE_CORR'),),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="EULER",
+                               into=("EULER","NEWMARK","DEVOGE","ADAPT","ITMI") ),
+         MASS_GENE       =SIMP(statut='o',typ=matr_asse_gene_r ),
+         RIGI_GENE       =SIMP(statut='o',typ=matr_asse_gene_r ),
+         AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r ),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         LIST_AMOR       =SIMP(statut='f',typ=listr8 ),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc) ),
+         MODE_CORR       =SIMP(statut='f',typ=(mult_elas,mode_stat_acce) ,),
+
+         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+           regles=(EXCLUS('RESU_GENE','DEPL_INIT_GENE'),
+                   EXCLUS('RESU_GENE','VITE_INIT_GENE'),),
+           RESU_GENE       =SIMP(statut='f',typ=tran_gene ),
+           b_resu_gene     =BLOC(condition = "RESU_GENE != None",
+             INST_INIT       =SIMP(statut='f',typ='R' ),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           ),
+           DEPL_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+           VITE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+         ),
+         INCREMENT       =FACT(statut='o',min=01,max='**',
+           INST_INIT       =SIMP(statut='f',typ='R' ),
+           INST_FIN        =SIMP(statut='o',typ='R' ),
+           PAS             =SIMP(statut='f',typ='R' ),
+           VERI_PAS        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           VITE_MIN        =SIMP(statut='f',typ='TXM',defaut="NORM",into=("MAXI","NORM") ),
+           COEF_MULT_PAS   =SIMP(statut='f',typ='R',defaut= 1.1 ),
+           COEF_DIVI_PAS   =SIMP(statut='f',typ='R',defaut= 1.3333334 ),
+           PAS_LIMI_RELA   =SIMP(statut='f',typ='R',defaut= 1.0E-6 ),
+           NB_POIN_PERIODE =SIMP(statut='f',typ='I',defaut= 50 ),
+           NMAX_ITER_PAS   =SIMP(statut='f',typ='I',defaut= 16 ),
+         ),
+         ARCHIVAGE       =FACT(statut='f',min=01,max=01,
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH'),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+         ),
+         NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 20 ),
+         RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         LAMBDA          =SIMP(statut='f',typ='R',defaut= 10. ),
+
+         EXCIT           =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('FONC_MULT','COEF_MULT','ACCE'),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
+                   PRESENT_PRESENT('D_FONC_DT','D_FONC_DT2'),
+                   PRESENT_ABSENT('NUME_MODE','VECT_GENE','COEF_MULT'),
+                   PRESENT_ABSENT('MULT_APPUI','CORR_STAT'),
+                   PRESENT_ABSENT('MULT_APPUI','COEF_MULT'),
+                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+           VECT_GENE       =SIMP(statut='f',typ=vect_asse_gene ),
+           NUME_MODE       =SIMP(statut='f',typ='I' ),
+           FONC_MULT       =SIMP(statut='f',typ=fonction ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           ACCE            =SIMP(statut='f',typ=fonction ),
+           VITE            =SIMP(statut='f',typ=fonction ),
+           DEPL            =SIMP(statut='f',typ=fonction ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           b_loca          =BLOC(condition= "DIRECTION != None",
+             regles=(EXCLUS('NOEUD','GROUP_NO'),),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           ),
+           CORR_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           D_FONC_DT       =SIMP(statut='f',typ=fonction ),
+           D_FONC_DT2      =SIMP(statut='f',typ=fonction ),
+         ),
+         CHOC            =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1' ),
+                   PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
+           INTITULE        =SIMP(statut='f',typ='TXM' ),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           OBSTACLE        =SIMP(statut='o',typ=obstacle ),
+           ORIG_OBST       =SIMP(statut='f',typ='R',min=3,max=3),
+           NORM_OBST       =SIMP(statut='o',typ='R',min=3,max=3),
+           ANGL_VRIL       =SIMP(statut='f',typ='R' ),
+           JEU             =SIMP(statut='f',typ='R',defaut= 1. ),
+           DIST_1          =SIMP(statut='f',typ='R',val_min=0.E+0 ),
+           DIST_2          =SIMP(statut='f',typ='R',val_min=0.E+0 ),
+           SOUS_STRUC_1    =SIMP(statut='f',typ='TXM' ),
+           SOUS_STRUC_2    =SIMP(statut='f',typ='TXM' ),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL"),
+           RIGI_NOR        =SIMP(statut='f',typ='R' ),
+           AMOR_NOR        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           RIGI_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           AMOR_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+
+           LAME_FLUIDE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           b_lame          =BLOC(condition="LAME_FLUIDE=='OUI'",
+               ALPHA           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               BETA            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               CHI             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               DELTA           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+         ),
+         VERI_CHOC       =FACT(statut='f',min=01,max='**',
+           STOP_CRITERE    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 0.5 ),
+         ),
+         FLAMBAGE        =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           OBSTACLE        =SIMP(statut='o',typ=obstacle ),
+           ORIG_OBST       =SIMP(statut='f',typ='R',max='**'),
+           NORM_OBST       =SIMP(statut='o',typ='R',max='**'),
+           ANGL_VRIL       =SIMP(statut='f',typ='R' ),
+           JEU             =SIMP(statut='f',typ='R',defaut= 1. ),
+           DIST_1          =SIMP(statut='f',typ='R' ),
+           DIST_2          =SIMP(statut='f',typ='R' ),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL"),
+           RIGI_NOR        =SIMP(statut='f',typ='R' ),
+           FNOR_CRIT       =SIMP(statut='f',typ='R' ),
+           FNOR_POST_FL    =SIMP(statut='f',typ='R' ),
+           RIGI_NOR_POST_FL=SIMP(statut='f',typ='R' ),
+         ),
+         ANTI_SISM       =FACT(statut='f',min=01,max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+                   UN_PARMI('NOEUD_2','GROUP_NO_2'),
+                   PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
+                   PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           RIGI_K1         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           RIGI_K2         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SEUIL_FX        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           C               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           PUIS_ALPHA      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           DX_MAX          =SIMP(statut='f',typ='R',defaut= 1. ),
+         ),
+         RELA_EFFO_DEPL  =FACT(statut='f',min=01,max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=fonction ),
+         ),
+         RELA_TRANSIS    =FACT(statut='f',min=01,max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=fonction ),
+         ),
+         RELA_EFFO_VITE  =FACT(statut='f',min=01,max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=fonction ),
+         ),
+         b_itmi          =BLOC(condition = "METHODE=='ITMI'",
+                regles=(ENSEMBLE('BASE_ELAS_FLUI','NUME_VITE_FLUI'),),
+                BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu ),
+                NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+                ETAT_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                PREC_DUREE      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+                CHOC_FLUI       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                NB_MODE         =SIMP(statut='f',typ='I' ),
+                NB_MODE_FLUI    =SIMP(statut='f',typ='I' ),
+                NB_MODE_DIAG    =SIMP(statut='f',typ='I' ),
+                TS_REG_ETAB     =SIMP(statut='f',typ='R' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         IMPRESSION      =FACT(statut='f',min=01,max='**',
+           regles=(EXCLUS('TOUT','NIVEAU'),),
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           NIVEAU          =SIMP(statut='f',typ='TXM',into=("DEPL_LOC","VITE_LOC","FORC_LOC","TAUX_CHOC") ),
+           INST_INIT       =SIMP(statut='f',typ='R' ),
+           INST_FIN        =SIMP(statut='f',typ='R' ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+ )  ;
+
+FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude",
+         docu="U4.11.02-f",
+         RETASSAGE       =SIMP(fr="provoque le retassage de la base GLOBALE",
+                               statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         PERFORMANCE     =SIMP(fr="provoque l'impression d'un résumé des mesures de temps ",
+                               statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+         INFO_RESU       =SIMP(fr="provoque l'impression des informations sur les structures de données",
+                               statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="MESSAGE"),
+)  ;
+
+
+
+
diff --git a/Exemples/eficas/fort.11 b/Exemples/eficas/fort.11
new file mode 100755 (executable)
index 0000000..57c140d
--- /dev/null
@@ -0,0 +1,21 @@
+DEPL2 = FORMULE(REEL="""(REEL:INST) =
+SIN(OMEGAA*INST)/(OMEGAA**2) """)
+DEPLACE2=CALC_FONC_INTERP( FONCTION=DEPL2,
+                           LIST_PARA=L_INST,
+                           PROL_DROITE='LINEAIRE',
+                           PROL_GAUCHE='LINEAIRE',
+                           NOM_RESU='DEPL'       )
+
+MONO_X=CALC_CHAR_SEISME(  MATR_MASS=MASSE,
+                          DIRECTION=( 1., 0., 0.,),
+                          MONO_APPUI='OUI' )
+
+
+MACRO_PROJ_BASE(BASE=MODE_MEC,MATR_ASSE_GENE=(
+                _F( MATRICE = CO("MASS_GEN"), MATR_ASSE = MASSE),
+                _F( MATRICE = CO("RIGI_GEN"), MATR_ASSE = RIGIDITE)),
+                VECT_ASSE_GENE=_F( VECTEUR = CO("VECT_X"), VECT_ASSE = MONO_X)
+               )
+
+
+RETOUR()
diff --git a/Exemples/eficas/main.py b/Exemples/eficas/main.py
new file mode 100644 (file)
index 0000000..49f8a95
--- /dev/null
@@ -0,0 +1,39 @@
+"""
+   Exemple d'utilisation d'un JDC sur le cas test eficas
+   de la base de test d'ASTER
+   Ce test va jusqu'à la phase de construction des macros
+   en utilisant le module codex qui emule une partie du fonctionnement 
+   du code ASTER réel 
+
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+import cata
+from cata import JdC
+
+cr=JdC.report()
+print cr
+
+f=open('cas.py','r')
+text=f.read()
+f.close()
+j=JdC(procedure=text,cata=cata,nom="eficas")
+
+j.compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+j.exec_compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+cr=j.report()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+j.Build()
diff --git a/Exemples/ex1/__init__.py b/Exemples/ex1/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex1/main.py b/Exemples/ex1/main.py
new file mode 100644 (file)
index 0000000..57e783e
--- /dev/null
@@ -0,0 +1,32 @@
+"""
+   Cet exemple montre :
+    - la création d'une définition de mot-clé simple
+    - sa vérification (report)
+    - la création d'un mot-clé simple valide 
+    - sa vérification (isvalid)
+    - la création d'une autre définition de mot-clé simple
+    - sa vérification (report)
+    - la création d'un mot-clé simple invalide 
+    - sa vérification (report)
+
+"""
+import sys
+sys.path[:0]=['../..']
+
+import Accas
+from Accas import SIMP
+
+a=SIMP(typ='I')
+print a.report()
+o=a(1,'mcs1')
+print o
+print o.isvalid()
+
+a=SIMP(typ='I',statut='o')
+cr=a.report()
+if cr.estvide():
+   print "Verification sans erreur"
+else:
+   print cr
+o=a(None,'mcs1')
+print o.report()
diff --git a/Exemples/ex10/__init__.py b/Exemples/ex10/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex10/main.py b/Exemples/ex10/main.py
new file mode 100644 (file)
index 0000000..4b72d97
--- /dev/null
@@ -0,0 +1,50 @@
+"""
+   Exemple d'utilisation avec des mots-clés facteurs multiples.
+   Cet exemple construit un objet de définition (cata) de type FACT
+   qui est composé de deux objets FACT
+
+   Dans un premier temps on vérifie la conformite de l'objet 
+   de définition ::
+
+      cr=cata.report()
+      if cr.estvide(): ...
+
+   Dans un deuxième temps, on construit plusieurs objets de type 
+   MCFACT dont la définition est cata et on vérifie la conformité
+   de ces objets.
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+from Accas import SIMP,FACT
+
+# Construction objet de définition
+
+cata= FACT(mcf1=FACT(a=SIMP(typ='I'),b=SIMP(typ='I')),
+           mcf2=FACT(c=SIMP(typ='I'),d=SIMP(typ='I')),
+          )
+
+# Vérification objet de définition
+cr=cata.report()
+if cr.estvide():
+   print "L'objet de définition est valide "
+else:
+   print cr
+
+
+for d in ({'mcf1':{'a':1}},
+          {'mcf1':{'a':1,'b':2}},
+          {'mcf1':{'a':1,'b':2},'mcf2':{'c':3}},
+          {'mcf1':{'a':1,'b':2},'mcf2':({'c':3},{'c':5})},
+         ):
+   # Création de l'objet MCFACT de nom mcf1
+   o=cata(d,'mcf1',None)
+   # Vérification objet MCFACT
+   cr= o.report()
+   if cr.estvide():
+      print "L'objet MCFACT basé sur le dictionnaire %s est valide " % d
+   else:
+      print "L'objet MCFACT basé sur le dictionnaire %s n'est pas valide " % d
+      print cr
+
diff --git a/Exemples/ex11/__init__.py b/Exemples/ex11/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex11/main.py b/Exemples/ex11/main.py
new file mode 100644 (file)
index 0000000..08352a3
--- /dev/null
@@ -0,0 +1,90 @@
+"""
+   Exemple d'utilisation avec un opérateur
+   Cet exemple construit un objet de définition (OP1) de type OPER
+   qui est composé d'un objet SIMP
+
+   Dans un premier temps on vérifie la conformite de l'objet 
+   de définition ::
+
+      cr=OP1.report()
+      if cr.estvide(): ...
+
+   Dans un deuxième temps, on construit plusieurs objets de type 
+   ETAPE dont la définition est OP1 et on vérifie la conformité
+   de ces objets.
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+from Accas import SIMP,FACT,OPER
+
+# Construction objet de définition
+
+class concept:
+   def __init__(self,etape):
+      self.etape=etape
+   def is_object(sd):
+      """ Retourne 1 si sd est du bon type par rapport à la classe """
+      return 0
+
+OP1 = OPER(nom='OP1',op=1,sd_prod=concept,reentrant='f',
+           a=SIMP(typ='I'),
+           c=SIMP(typ='I',position='global'),
+           b=SIMP(typ=concept),
+          )
+
+# Vérification objet de définition
+cr=OP1.report()
+if cr.estvide():
+   print "L'objet de définition est valide "
+else:
+   print cr
+
+class context:
+   def __init__(self):
+      self.etapes=[]
+      self.mc_globaux={}
+      self.cata_ordonne_dico=None
+      self.par_lot="OUI"
+
+   def register(self,etape):
+      self.etapes.append(etape)
+      return self.etapes.index(etape)
+
+   def get_jdc_root(self):
+      return self
+
+   def create_sdprod(self,etape,nomsd):
+      sd= etape.get_sd_prod()
+      if sd != None and etape.reuse == None:
+         # ATTENTION : On ne nomme la SD que dans le cas de non reutilisation d un concept
+         sd.nom=nomsd
+      return sd
+
+
+cont=context()
+CONTEXT.set_current_step(cont)
+
+sd=concept(None)
+# Création de l'objet ETAPE
+co1=OP1(a=1,b=sd)
+
+# Vérification objet ETAPE
+cr= co1.etape.report()
+if cr.estvide():
+   print "L'objet ETAPE  est valide " 
+else:
+   print "L'objet ETAPE  n'est pas valide " 
+   print cr
+
+# Test avec reutilisation de concept
+co=OP1(reuse=co1,a=1,b=sd)
+e=cont.etapes[1]
+cr= e.report()
+if cr.estvide():
+   print "L'objet ETAPE  est valide "
+else:
+   print "L'objet ETAPE  n'est pas valide "
+   print cr
+
diff --git a/Exemples/ex12/__init__.py b/Exemples/ex12/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex12/cata.py b/Exemples/ex12/cata.py
new file mode 100644 (file)
index 0000000..304253a
--- /dev/null
@@ -0,0 +1,25 @@
+"""
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+from Accas import SIMP,FACT,OPER,JDC_CATA
+
+# Construction objet de définition
+
+class concept:
+   def __init__(self,etape):
+      self.etape=etape
+   def is_object(valeur):
+      """
+          Indique si valeur est d'un type conforme à la classe (1) ou non conforme (0)
+      """
+      return 0
+
+JdC=JDC_CATA(code="ASTER")
+OP1 = OPER(nom='OP1',op=1,sd_prod=concept,reentrant='f',
+           a=SIMP(typ='I'),
+           b=SIMP(typ=concept),
+          )
+
diff --git a/Exemples/ex12/main.py b/Exemples/ex12/main.py
new file mode 100644 (file)
index 0000000..60371d6
--- /dev/null
@@ -0,0 +1,40 @@
+"""
+   Exemple d'utilisation d'un JDC
+
+   Dans un premier temps on vérifie la conformite de l'objet 
+   de définition ::
+
+      cr=OP1.report()
+      if cr.estvide(): ...
+
+   Dans un deuxième temps, on construit plusieurs objets de type 
+   ETAPE dont la définition est OP1 et on vérifie la conformité
+   de ces objets.
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+import cata
+from cata import JdC
+
+cr=JdC.report()
+print cr
+
+text="""
+
+a=OP1(a=1)
+b=OP1(a=1,b=a)
+c=OP1(a=1,b=10)
+"""
+
+j=JdC(procedure=text,cata=cata,nom="bidon")
+
+j.compile()
+print j.cr
+
+j.exec_compile()
+print j.cr
+
+cr=j.report()
+print cr
diff --git a/Exemples/ex13/__init__.py b/Exemples/ex13/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex13/cata.py b/Exemples/ex13/cata.py
new file mode 100644 (file)
index 0000000..fb1a3d2
--- /dev/null
@@ -0,0 +1,26 @@
+"""
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+from Accas import SIMP,FACT,OPER,PROC,JDC_CATA
+
+# Construction objet de définition
+
+class concept:
+   def __init__(self,etape):
+      self.etape=etape
+   def is_object(valeur):
+      """
+          Indique si valeur est d'un type conforme à la classe (1) ou non conforme (0)
+      """
+      return 0
+
+JdC=JDC_CATA(code="ASTER")
+OP1 = OPER(nom='OP1',op=1,sd_prod=concept,reentrant='f',
+           a=SIMP(typ='I'),
+           b=SIMP(typ=concept),
+          )
+DEBUT=PROC(nom='DEBUT',op=0,INFO=SIMP(typ='I'),)
+
diff --git a/Exemples/ex13/main.py b/Exemples/ex13/main.py
new file mode 100644 (file)
index 0000000..56bda4b
--- /dev/null
@@ -0,0 +1,48 @@
+"""
+   Exemple d'utilisation d'un JDC
+
+   Dans un premier temps on importe un catalogue
+   de définition contenu dans un module et on le valide ::
+
+      import cata
+      from cata import JdC
+      cr=JdC.report()
+      if cr.estvide(): ...
+
+   Dans un deuxième temps, on construit un jeu de commandes
+   a partir d'une chaine de caractères et on vérifie sa
+   conformité.
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+import cata
+from cata import JdC
+
+cr=JdC.report()
+print cr
+
+text="""
+DEBUT()
+a=OP1(a=1)
+b=OP1(a=1,b=a)
+c=OP1(a=1,b=10)
+"""
+
+j=JdC(procedure=text,cata=cata,nom="bidon")
+
+j.compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+j.exec_compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+cr=j.report()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
diff --git a/Exemples/ex14/__init__.py b/Exemples/ex14/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex14/cata.py b/Exemples/ex14/cata.py
new file mode 100644 (file)
index 0000000..b085cad
--- /dev/null
@@ -0,0 +1,27 @@
+"""
+"""
+
+from Accas import SIMP,FACT,OPER,PROC,JDC_CATA,MACRO,ASSD
+
+# Construction objet de définition
+
+class concept(ASSD):pass
+
+JdC=JDC_CATA(code="ASTER")
+
+def op2_sdprod(a,**args):
+   return concept
+
+OP2 = OPER(nom='OP2',op=2,sd_prod=op2_sdprod,reentrant='f',
+           a=SIMP(typ='I'),
+           b=SIMP(typ=concept),
+          )
+OP1 = OPER(nom='OP1',op=1,sd_prod=concept,reentrant='f',
+           a=SIMP(typ='I'),
+           b=SIMP(typ=concept),
+          )
+DEBUT=PROC(nom='DEBUT',op=0,INFO=SIMP(typ='I'),)
+MA_MACRO=MACRO(nom="MA_MACRO",op=-1,sd_prod=concept,
+                        A=SIMP(typ='I'))
+
+
diff --git a/Exemples/ex14/main.py b/Exemples/ex14/main.py
new file mode 100644 (file)
index 0000000..cec11c7
--- /dev/null
@@ -0,0 +1,52 @@
+"""
+   Exemple d'utilisation d'un JDC
+
+   Dans un premier temps on importe un catalogue
+   de définition contenu dans un module et on le valide ::
+
+      import cata
+      from cata import JdC
+      cr=JdC.report()
+      if cr.estvide(): ...
+
+   Dans un deuxième temps, on construit un jeu de commandes
+   a partir d'une chaine de caractères et on vérifie sa
+   conformité.
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+import cata
+from cata import JdC
+
+cr=JdC.report()
+print cr
+
+text="""
+DEBUT()
+a=OP1(a=1)
+b=OP2(a=1,
+           b=a)
+c=OP1(a=1,
+         b=10)
+d=MA_MACRO(A=1)
+"""
+
+j=JdC(procedure=text,cata=cata,nom="bidon")
+
+j.compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+j.exec_compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+cr=j.report()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
diff --git a/Exemples/ex15/__init__.py b/Exemples/ex15/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex15/cata.py b/Exemples/ex15/cata.py
new file mode 100644 (file)
index 0000000..cb8d5fc
--- /dev/null
@@ -0,0 +1,20 @@
+"""
+"""
+
+
+from Accas import SIMP,FACT,OPER,PROC,JDC_CATA,MACRO,ASSD
+
+# Construction objet de définition
+
+class concept(ASSD):pass
+
+JdC=JDC_CATA(code="ASTER")
+
+def op2_sdprod(a,**args):
+   return concept
+
+OP2 = OPER(nom='OP2',op=2,sd_prod=op2_sdprod,reentrant='f',
+           a=SIMP(typ='I'),
+           b=SIMP(typ=concept),
+          )
+
diff --git a/Exemples/ex15/cata1.py b/Exemples/ex15/cata1.py
new file mode 100644 (file)
index 0000000..eed14c7
--- /dev/null
@@ -0,0 +1,19 @@
+"""
+"""
+
+from Accas import SIMP,FACT,OPER,PROC,JDC_CATA,MACRO,ASSD
+
+# Construction objet de définition
+
+class concept(ASSD):pass
+
+JdC=JDC_CATA(code="ASTER")
+
+OP1 = OPER(nom='OP1',op=1,sd_prod=concept,reentrant='f',
+           a=SIMP(typ='I'),
+           b=SIMP(typ=concept),
+          )
+DEBUT=PROC(nom='DEBUT',op=0,INFO=SIMP(typ='I'),)
+MA_MACRO=MACRO(nom="MA_MACRO",op=-1,sd_prod=concept,
+                        A=SIMP(typ='I'))
+
diff --git a/Exemples/ex15/main.py b/Exemples/ex15/main.py
new file mode 100644 (file)
index 0000000..aa9e326
--- /dev/null
@@ -0,0 +1,53 @@
+"""
+   Exemple d'utilisation d'un JDC
+
+   Dans un premier temps on importe un catalogue
+   de définition contenu dans un module et on le valide ::
+
+      import cata
+      from cata import JdC
+      cr=JdC.report()
+      if cr.estvide(): ...
+
+   Dans un deuxième temps, on construit un jeu de commandes
+   a partir d'une chaine de caractères et on vérifie sa
+   conformité.
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+import cata
+import cata1
+from cata import JdC
+
+cr=JdC.report()
+print cr
+
+text="""
+DEBUT()
+a=OP1(a=1)
+b=OP2(a=1,
+           b=a)
+c=OP1(a=1,
+         b=10)
+d=MA_MACRO(A=1)
+"""
+
+j=JdC(procedure=text,cata=(cata,cata1),nom="bidon")
+
+j.compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+j.exec_compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+cr=j.report()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
diff --git a/Exemples/ex18/__init__.py b/Exemples/ex18/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex18/main.py b/Exemples/ex18/main.py
new file mode 100644 (file)
index 0000000..3e8f1fa
--- /dev/null
@@ -0,0 +1,18 @@
+import sys
+sys.path[:0]=['../..','../../..']
+
+# On récupère les plugins de la famille convert
+import convert
+
+p=convert.plugins['asterv5']()
+p.readfile('totalmod.comm')
+if not p.cr.estvide():
+   print p.cr
+   sys.exit(0)
+
+s=p.convert('exec')
+if not p.cr.estvide():
+   print p.cr
+   sys.exit(0)
+
+print s
diff --git a/Exemples/ex18/totalmod.comm b/Exemples/ex18/totalmod.comm
new file mode 100755 (executable)
index 0000000..43b77fc
--- /dev/null
@@ -0,0 +1,1821 @@
+DEBUT();
+% LECTURE DES PARAMETRES 
+%
+
+    
+% LECTURE DES TEMPS 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%cycle 1
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% LECTURE DU MAILLAGE ET DEFINITIONS DES PROPRIETES ELEMENTS FINIS
+
+PRE_GIBI ();
+%
+ ma1 = LIRE_MAILLAGE ();
+%
+&ma1 = DEFI_GROUP ( MAILLAGE : ma1
+                   CREA_GROUP_NO : (GROUP_MA : ( fixati
+                                                 appui
+                                                 lias_1
+                                                 lias_2
+                                                 ebguide   
+                                                 maintien
+                                                 main_sup
+                                                 embo_sup
+                                                 tub_guid
+                                                 grilles
+                                                 embo_inf
+                                                 pieds
+                                                 crayons ))
+                  ) ;
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% AFFECTATION DU MODELE
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+ mo1 = AFFE_MODELE ( Maillage: ma1
+           % crayons combustibles
+                    AFFE : ( GROUP_MA :     crayons
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'POU_D_E'
+                            )
+           % tubes guides
+                    AFFE : ( GROUP_MA :     tub_guid
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'POU_D_E'
+                            )
+           % embouts
+                    AFFE : ( GROUP_MA :     (embo_sup, embo_inf)
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'DKT'
+                            )
+          % pieds
+
+                    AFFE : ( GROUP_MA :    pieds
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'POU_D_E'
+                            )
+
+           % grilles
+                    AFFE : ( GROUP_MA :     grilles
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'POU_D_E'
+                            )
+           % liaison grille crayon
+                    AFFE : ( GROUP_MA :     li_gr_cr
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'DIS_TR'
+                            )
+           % liaison grille tube
+                    AFFE : ( GROUP_MA :     li_gr_gu
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'DIS_TR'
+                            )
+           % systeme de maintien
+                    AFFE : ( GROUP_MA :     maintien
+                             PHENOMENE:'MECANIQUE',
+                             MODELISATION:'POU_D_E'
+                           % MODELISATION:'POU_D_T'
+                            )
+                   );
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% AFFECTATION DES CARACTERISTIQUES GEOMETRIQUES ELEMENTAIRES
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+ cara1 = AFFE_CARA_ELEM ( MODELE :  mo1
+
+% Famille assemblage : numero_fam
+%
+           % crayons
+                        POUTRE : ( GROUP_MA : cray 
+                                   SECTION : 'CERCLE'
+                                   CARA    : ( 'R','EP' )
+                                   VALE    : ( 3.   3. )
+                                  )
+           % tube guide partie courante
+                        POUTRE : ( GROUP_MA : guid 
+                                   SECTION : 'CERCLE'
+                                   CARA    : ( 'R','EP' )
+                                   VALE    : ( 3.   3. )
+                                  )
+           % tube guide partie retrecie
+                        POUTRE : ( GROUP_MA : retre 
+                                   SECTION : 'CERCLE'
+                                   CARA    : ( 'R','EP' )
+                                   VALE    : ( 3.   3. )
+                                  )  
+           % grilles
+                        POUTRE :  ( GROUP_MA : ( gril_i        )
+                                    SECTION : 'RECTANGLE'
+                                    CARA    : ( 'HY','HZ' )
+                                    VALE    : ( 3.   3.   )
+                                  )
+                        POUTRE :  ( GROUP_MA : ( gril_e  )
+                                    SECTION : 'RECTANGLE'
+                                    CARA    : ( 'HY','HZ' )
+                                    VALE    : ( 3.   3.   )
+                                  )
+                        ORIENTATION : ( GROUP_MA : (gril_i  , gril_e )
+                                        CARA : 'VECT_Y'
+                                        VALE : (1. 0. 0.)
+                                      )
+           % systeme de maintien
+                        POUTRE : ( GROUP_MA : (mainti_y , mainti_z )
+                                   SECTION : 'RECTANGLE'
+                                   CARA    : ( 'HY','HZ' )
+                                   VALE    : ( 3.   3. )
+                                  )
+                        ORIENTATION : ( GROUP_MA : (mainti_y )
+                                        CARA : 'VECT_Y'
+                                        VALE : (0. 1. 0.)
+                                      )
+                        ORIENTATION : ( GROUP_MA : (mainti_z )
+                                        CARA : 'VECT_Y'
+                                        VALE : (0. 0. 1.)
+                                      )
+           % embout inferieur
+                        COQUE : ( GROUP_MA : eboinf 
+                                  EPAIS : 2.
+                                  ANGL_REP : 90.
+                                  )
+          % pieds
+                     POUTRE :  ( GROUP_MA : pi_ple 
+                                          SECTION : 'GENERALE'
+                     CARA : ( 'A' , 'IZ' , 'IY' , 'JX' )
+                    VALE : (1. 2. 3. 4.)
+                                      )
+                     POUTRE :  ( GROUP_MA : pi_tro 
+                                          SECTION : 'GENERALE'
+                     CARA : ( 'A' , 'IZ' , 'IY' , 'JX' )
+                    VALE : (1. 2. 3. 4. )
+                                )
+                        ORIENTATION : ( GROUP_MA : (pi_ple  pi_tro )
+                                        CARA : 'VECT_Y'
+                                        VALE : (0. 1. 0.)
+                                      )
+
+           % embout superieur
+                        COQUE : ( GROUP_MA  : ebosup 
+                                  EPAIS : 3.
+                                  ANGL_REP : 90.
+                                  )
+
+           % liaison grille/crayon
+                        DISCRET : ( GROUP_MA : elasti 
+                                    CARA : 'K_TR_D_L'
+                                    VALE : ( 1.
+                                             2.
+                                             3.
+                                             4.
+                                             5.
+                                             6.
+                                           )
+                                    REPERE : 'LOCAL'
+                                  )
+           % liaison grille/tube guide
+                        DISCRET : ( GROUP_MA : rigid 
+                                    CARA : 'K_TR_D_L'
+                                    VALE : ( 1.
+                                             2.
+                                             3.
+                                             4.
+                                             5.
+                                             6.
+                                           )
+                                    REPERE : 'LOCAL'
+                                  )
+
+                        ORIENTATION : ( GROUP_MA : (elasti  
+                                                    rigid        )
+                                        CARA : 'VECT_Y'
+                                        VALE : (1. 0. 0.) )
+  
+    );
+%
+% DEFINITION DES CHARGES ET CONDITIONS LIMITES
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% DEFINITION DES TEMPERATURES NODALES EVOLUTIVES
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+ f_tp1_1 = DEFI_FONCTION ( NOM_PARA: 'X'
+                            NOM_RESU : 'TEMP'
+                            PROL_DROIT: 'CONSTANT'
+                            PROL_GAUCHE: 'CONSTANT'
+                            VALE : ( 0. 1.
+                                     5. 4.  )
+                         );
+ f_tp2_1 = DEFI_FONCTION ( NOM_PARA: 'X'
+                          NOM_RESU : 'TEMP'
+                          PROL_DROIT: 'CONSTANT'
+                          PROL_GAUCHE: 'CONSTANT'
+                          VALE : ( 0. 1.
+                                   5. 4. )
+                         );
+ f_tp3_1 = DEFI_FONCTION ( NOM_PARA: 'X'
+                          NOM_RESU : 'TEMP'
+                          PROL_DROIT: 'CONSTANT'
+                          PROL_GAUCHE: 'CONSTANT'
+                          VALE : ( 0. 1.
+                                   5. 4. )
+                         );
+  
+ chtem1_1 = AFFE_CHAM_NO ( MAILLAGE : ma1
+                         GRANDEUR : 'TEMP_F'
+                         AFFE : ( GROUP_NO: (maintien, pieds
+                                             tub_guid, grilles
+                                             crayons)
+                                  NOM_CMP : 'TEMP'
+                                  FONCTION : f_tp1_1 )
+                         AFFE : ( GROUP_NO: (embo_sup, embo_inf)
+                                  NOM_CMP : ('TEMP_INF' 'TEMP'
+                                             'TEMP_SUP')
+                                  FONCTION :(f_tp1_1,f_tp1_1,f_tp1_1))
+                        );
+
+ chtem2_1 = AFFE_CHAM_NO ( MAILLAGE : ma1
+                         GRANDEUR : 'TEMP_F'
+                         AFFE : ( GROUP_NO: (maintien, pieds
+                                             tub_guid, grilles
+                                             crayons)
+                                  NOM_CMP : 'TEMP'
+                                  FONCTION : f_tp2_1 )
+                         AFFE : ( GROUP_NO: (embo_sup, embo_inf)
+                                  NOM_CMP : ('TEMP_INF' 'TEMP'
+                                             'TEMP_SUP')
+                                  FONCTION :(f_tp2_1,f_tp2_1,f_tp2_1))
+                        );
+                        
+ chtem3_1 = AFFE_CHAM_NO ( MAILLAGE : ma1
+                         GRANDEUR : 'TEMP_F'
+                         AFFE : ( GROUP_NO: (maintien, pieds
+                                             tub_guid, grilles)
+                                  NOM_CMP : 'TEMP'
+                                  FONCTION : f_tp3_1 )
+                         AFFE : ( GROUP_NO: (embo_sup, embo_inf)
+                                  NOM_CMP : ('TEMP_INF' 'TEMP'
+                                             'TEMP_SUP')
+                                  FONCTION : (f_tp3_1,f_tp3_1,f_tp3_1))
+                         AFFE : ( GROUP_NO: crayons
+                                  NOM_CMP : 'TEMP'
+                                  FONCTION :f_tp3_1 )
+                        );  
+                                                                       
+ chth_1 = CREA_RESU ( TYPE_RESU : 'EVOL_THER'
+                    NOM_CHAM : 'TEMP'
+                    CHAM_GD : ( CHAM_NO : chtem1_1
+                                INST : 0. )
+                    CHAM_GD : ( CHAM_NO : chtem1_1
+                                INST : 1000. )
+                    CHAM_GD : ( CHAM_NO : chtem2_1
+                                INST :2000.  )
+                    CHAM_GD : ( CHAM_NO : chtem3_1
+                                INST : 3000.  )
+                    CHAM_GD : ( CHAM_NO : chtem3_1
+                                INST : 4000.    )
+                    CHAM_GD : ( CHAM_NO : chtem2_1
+                                INST : 5000.   )
+                    CHAM_GD : ( CHAM_NO : chtem1_1
+                                INST : 6000.   )
+                    CHAM_GD : ( CHAM_NO : chtem1_1
+                                INST : 7000.    )
+                       );
+                       
+% Chargement: charges thermo-mecaniques
+% ----------------------------------------
+
+ therm_1 = AFFE_CHAR_MECA ( MODELE: mo1
+                             TEMP_CALCULEE : chth_1
+                             );                       
+                       
+                       
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% DEFINITION DES CONDITIONS LIMITES
+%            DES CONDITIONS DE CONTACT
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Chargement: pesanteur
+%
+ pesant_1 = AFFE_CHAR_MECA ( MODELE : mo1
+                             PESANTEUR : (9.81 -1. 0. 0. )
+                            );
+
+%
+% Conditions aux limites
+%
+ cl_per_1 = AFFE_CHAR_MECA ( MODELE : mo1
+                % embout inferieur encastrement
+                         DDL_IMPO : ( GROUP_NO : fixati
+                                      DX : 0.  DY:0.    DZ : 0.
+                                      DRX : 0. DRY : 0. DRZ : 0.
+                                    )
+                % embout inferieur appui simple
+                         DDL_IMPO : ( GROUP_NO : appui
+                                      DX : 0.
+                                    )
+                % embout superieur liaison guidee
+                         DDL_IMPO : ( GROUP_NO : ebguide
+                                      DY:0. DZ : 0.
+                                      DRX : 0. DRY : 0. DRZ : 0.
+                                    )
+                % liaison systeme de maintien embout superieur
+                         DDL_IMPO : ( GROUP_NO : (lias_1, lias_2)
+                                      DRX : 0.
+                                    )
+                % liaison systeme de maintien embout superieur
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DX' DDL_2 : 'DX'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DY' DDL_2 : 'DY'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DZ' DDL_2 : 'DZ'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DRY' DDL_2 : 'DRY'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DRZ' DDL_2 : 'DRZ'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                            );
+%
+ cl_ctc = AFFE_CHAR_MECA ( MODELE : mo1
+                                   
+                                           
+                         CONTACT : ( APPARIEMENT : 'NODAL'
+                                     GROUP_MA_1 : eboinf
+                                     GROUP_MA_2 : mcrbas 
+                                     VECT_NORM_2 : (-1. 0. 0.)
+                                     ) 
+                                     INFO : 1                  
+                         );
+%                            
+% Deplacement du systeme de maintien
+%
+cldi_f1 = DEFI_FONCTION ( NOM_PARA   : 'INST'
+                           PROL_DROIT : 'CONSTANT'
+                           PROL_GAUCHE: 'CONSTANT'
+                           VALE : ( 0.     0.  
+                                    1000.  0.1
+                                    2000.  0.2
+                                    3000.  0.2
+                                    4000.  0.2
+                                    5000.  0.2
+                                    6000.  0.1     
+                                    7000.  0.1      )
+                         );
+
+ cl_di_1  = AFFE_CHAR_MECA ( MODELE : mo1
+                % deplacement du systeme de maintien
+                         DDL_IMPO : ( GROUP_NO : main_sup
+                                      DX : -1.     
+                                    )
+                            );
+                                                        
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% DEFINITION DES FORCES EXTERIEURES
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Fonction multiplicative de la force hydrodynamique normee
+%
+hydr_f1  = DEFI_FONCTION ( NOM_PARA    : 'INST'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0.     0.      
+                                            1000.  0.1
+                                            2000.  0.2
+                                            3000.  0.2
+                                            4000.  0.2
+                                            5000.  0.2
+                                            6000.  0.1
+                                            7000.  0.1  )
+                          );
+%
+% Profil des forces hydrodynamiques tubes guides a froid
+%
+
+
+ hyfrtu_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : ( 0. 1.
+                               5. 2. )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );
+%
+% Profil des forces hydrodynamiques crayon a froid
+%
+
+
+ hyfrcr_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : (0. 1.
+                              5. 2. )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );
+%
+
+%% Chargement : Forces hydrodynamiques 
+%
+ hydr_1   = AFFE_CHAR_MECA ( MODELE : mo1
+             % embout superieur
+                          FORCE_COQUE  : ( GROUP_MA : ebosup
+                                         FX : 10. )
+             % embout inferieur
+                          FORCE_COQUE  : ( GROUP_MA : eboinf
+                                         FX : 10.  )
+             % grille superieure
+                          FORCE_POUTRE : ( GROUP_MA : (gril10 )
+                                         FX : 10.   )
+             % grille inferieure
+                          FORCE_POUTRE : ( GROUP_MA : (gril1 )
+                                         FX : 10.    )
+             % grille de melange
+                          FORCE_POUTRE : ( GROUP_MA : (gril2 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril3 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril4 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril5 )
+                                         FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril6 )
+                                         FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril7 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril8 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril9 )
+                                         FX : 10.    )
+                          );
+ toto_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : ( 0. 10. 
+                               5. 10.  )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );                          
+%                         
+ fohydr_1 = AFFE_CHAR_MECA_F ( MODELE : mo1
+             % tubes guides et tube d'instrumentation
+                          FORCE_POUTRE : ( GROUP_MA : (guid        )
+                                           FX : toto_1  )
+             % crayons
+                          FORCE_POUTRE : ( GROUP_MA : cray
+                                           FX :  toto_1  )
+                            );
+%
+% Profil des forces d'Archimede tube guide 
+%
+
+
+ arfrtu_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : ( 0. 10. 
+                               5. 10.  )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );
+%
+% Profil des forces d'Archimede crayon 
+%
+
+
+ arfrcr_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : ( 0. 10.
+                               5. 10. )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );
+%
+% Fonction multiplicative de la force d'Archimede
+%
+arch_f1  = DEFI_FONCTION ( NOM_PARA    : 'INST'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0.     0.
+                                            1000.  0.1
+                                            2000.  0.2
+                                            3000.  0.2
+                                            4000.  0.2
+                                            5000.  0.2
+                                            6000.  0.1
+                                            7000.  0.1 )
+                          );
+%
+
+%
+% Chargement : Forces d'Archimede 
+% ----------------------------------------
+%
+   arch_1 = AFFE_CHAR_MECA ( MODELE : mo1
+             % systeme de maintien
+                     FORCE_POUTRE : ( GROUP_MA : maintien
+                               FX : 10. )
+             % embout superieur
+                          FORCE_COQUE  : ( GROUP_MA : ebosup
+                                    FX : 10. )
+             % embout inferieur
+                          FORCE_COQUE  : ( GROUP_MA : eboinf
+                                    FX : 10. )
+             % grille superieure
+                          FORCE_POUTRE : ( GROUP_MA : (gril10  )
+                                    FX : 10.  )
+             % grille inferieure
+                          FORCE_POUTRE : ( GROUP_MA : (gril1 )
+                                           FX : 10.  )
+             % grille de melange
+                          FORCE_POUTRE : ( GROUP_MA : (gril2 )
+                                           FX : 10.  )
+                          FORCE_POUTRE : ( GROUP_MA : (gril3 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril4 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril5 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril6 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril7 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril8 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril9 )
+                                           FX : 10.  )
+                          );
+ foarch_1 = AFFE_CHAR_MECA_F ( MODELE : mo1
+
+             % tubes guides et tube d'instrumentation
+                          FORCE_POUTRE : ( GROUP_MA : guid 
+                                           FX : arch_f1  )
+             % crayons
+                          FORCE_POUTRE : ( GROUP_MA : cray
+                                           FX :arch_f1  )
+                            );
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% 
+% FORCE DE SERRAGE DE LA LIAISON GRILLE - CRAYON 
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+
+%
+%
+%
+% definition de la liste d'instants
+%
+  l_frig   = DEFI_LIST_REEL( Debut: 0.0
+                             Intervalle : (Jusqu_a: 1000. Nombre: 100)
+                           );
+%
+% Inrterpretation des fonctions
+%
+f1=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f2=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f3=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f4=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f5=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f6=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f7=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f8=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f9=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f10=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+                         
+ frig1 = CALC_FONC_INTERP ( FONCTION    : f1
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig2 = CALC_FONC_INTERP ( FONCTION    : f2
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig3 = CALC_FONC_INTERP ( FONCTION    : f3
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig4 = CALC_FONC_INTERP ( FONCTION    : f4
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig5 = CALC_FONC_INTERP ( FONCTION    : f5
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                             INTERPOL    : 'LIN'
+                           );
+ frig6 = CALC_FONC_INTERP ( FONCTION    : f6
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig7 = CALC_FONC_INTERP ( FONCTION    : f7
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig8 = CALC_FONC_INTERP ( FONCTION    : f8
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig9 = CALC_FONC_INTERP ( FONCTION    : f9
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig10= CALC_FONC_INTERP ( FONCTION    : f10
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+%
+% DEFINITION DU FLUX NEUTRONIQUE RADIAL
+
+flux_f1=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00
+                         9.74520E+05   4.53280E+05   
+                         2.63880E+06   2.07785E+06
+                         4.08780E+06   3.51279E+06   
+                         5.42844E+06   4.85677E+06
+                         7.24500E+06   6.67627E+06   
+                         8.85348E+06   8.27977E+06
+                         1.04609E+07   9.87261E+06   
+                         1.22029E+07   1.15869E+07
+                         1.39446E+07   1.32952E+07   
+                         1.41437E+07   1.34902E+07
+                         1.55632E+07   1.48753E+07   
+                         1.72361E+07   1.65069E+07
+                         1.79482E+07   1.71992E+07   
+                         1.81901E+07   1.74334E+07
+                         1.81937E+07   1.74352E+07   
+                         1.81973E+07   1.74352E+07
+                         1.82009E+07   1.74352E+07
+                                )
+                       ) ;
+% Definition du flux axial pour le cycle 1
+
+fluxax1 = LIRE_FONCTION ( UNITE       : 60
+                           PROL_GAUCHE : 'CONSTANT'
+                           PROL_DROIT  : 'CONSTANT'
+                         );
+
+ fly_1_1  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    3.8032834757835D-07
+                -8.8200000000000D-02    3.8083689458689D-07
+                -7.5600000000000D-02    3.8296082621083D-07
+                -6.3000000000000D-02    3.8584009971510D-07
+                -5.0400000000000D-02    3.8946100427350D-07
+                -3.7800000000000D-02    3.9259455128205D-07
+                -2.5200000000000D-02    3.9258457977208D-07
+                -1.2600000000000D-02    3.9294106125356D-07
+               0.    3.9399554843305D-07
+                 1.2600000000000D-02    3.9293233618234D-07
+                 2.5200000000000D-02    3.9256712962963D-07
+                 3.7800000000000D-02    3.9256712962963D-07
+                 5.0400000000000D-02    3.8942610398860D-07
+                 6.3000000000000D-02    3.8579522792023D-07
+                 7.5600000000000D-02    3.8290972222222D-07
+                 8.8200000000000D-02    3.8077706552707D-07
+                 1.0080000000000D-01    3.8026103988604D-07
+                     ) ) ; 
+           
+ fly_1_2  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    4.3595566239316D-07
+                -8.8200000000000D-02    4.3866542022792D-07
+                -7.5600000000000D-02    4.4331463675214D-07
+                -6.3000000000000D-02    4.4911556267806D-07
+                -5.0400000000000D-02    4.5750658831909D-07
+                -3.7800000000000D-02    4.6647222222222D-07
+                -2.5200000000000D-02    4.6002938034188D-07
+                -1.2600000000000D-02    4.6004309116809D-07
+               0.    4.6686235754986D-07
+                 1.2600000000000D-02    4.6003311965812D-07
+                 2.5200000000000D-02    4.6000943732194D-07
+                 3.7800000000000D-02    4.6643981481481D-07
+                 5.0400000000000D-02    4.5746420940171D-07
+                 6.3000000000000D-02    4.4906445868946D-07
+                 7.5600000000000D-02    4.4325356125356D-07
+                 8.8200000000000D-02    4.3859686609687D-07
+                 1.0080000000000D-01    4.3587838319088D-07
+                     ) ) ; 
+           
+ fly_1_3  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    4.9431891025641D-07
+                -8.8200000000000D-02    5.0005128205128D-07
+                -7.5600000000000D-02    5.1337197293447D-07
+                -6.3000000000000D-02    5.2915313390313D-07
+                -5.0400000000000D-02    5.3788069800570D-07
+                -3.7800000000000D-02    5.3504629629630D-07
+                -2.5200000000000D-02    5.3221189458689D-07
+                -1.2600000000000D-02    5.3136431623932D-07
+               0.    5.3135870726496D-07
+                 1.2600000000000D-02    5.3135309829060D-07
+                 2.5200000000000D-02    5.3218696581197D-07
+                 3.7800000000000D-02    5.3500827991453D-07
+                 5.0400000000000D-02    5.3782959401709D-07
+                 6.3000000000000D-02    5.2909205840456D-07
+                 7.5600000000000D-02    5.1330217236467D-07
+                 8.8200000000000D-02    4.9997150997151D-07
+                 1.0080000000000D-01    4.9423165954416D-07
+                     ) ) ; 
+           
+ fly_1_4  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    5.5489957264957D-07
+                -8.8200000000000D-02    5.6477884615385D-07
+                -7.5600000000000D-02    5.9007781339031D-07
+                -6.3000000000000D-02    5.9726415598291D-07
+                -5.0400000000000D-02    6.0445049857550D-07
+                -3.7800000000000D-02    5.9840776353276D-07
+                -2.5200000000000D-02    5.8440651709402D-07
+                -1.2600000000000D-02    5.8263906695157D-07
+               0.    5.9153240740741D-07
+                 1.2600000000000D-02    5.8262660256410D-07
+                 2.5200000000000D-02    5.8438034188034D-07
+                 3.7800000000000D-02    5.9836663105413D-07
+                 5.0400000000000D-02    6.0439316239316D-07
+                 6.3000000000000D-02    5.9719497863248D-07
+                 7.5600000000000D-02    5.8999679487179D-07
+                 8.8200000000000D-02    5.6469159544160D-07
+                 1.0080000000000D-01    5.5480110398860D-07
+                     ) ) ; 
+           
+ fly_1_5  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    6.1267200854701D-07
+                -8.8200000000000D-02    6.2962357549858D-07
+                -7.5600000000000D-02    6.5655413105413D-07
+                -6.3000000000000D-02    6.6164583333333D-07
+                -5.0400000000000D-02    6.5190242165242D-07
+                -3.7800000000000D-02    6.5212678062678D-07
+                -2.5200000000000D-02    6.3746616809117D-07
+                -1.2600000000000D-02    6.3547435897436D-07
+               0.    6.4509686609687D-07
+                 1.2600000000000D-02    6.3546064814815D-07
+                 2.5200000000000D-02    6.3743625356125D-07
+                 3.7800000000000D-02    6.5207941595442D-07
+                 5.0400000000000D-02    6.5183885327635D-07
+                 6.3000000000000D-02    6.6156980056980D-07
+                 7.5600000000000D-02    6.5646563390313D-07
+                 8.8200000000000D-02    6.2952386039886D-07
+                 1.0080000000000D-01    6.1256356837607D-07
+                     ) ) ; 
+           
+ fly_1_6  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    6.5755128205128D-07
+                -8.8200000000000D-02    6.8336253561254D-07
+                -7.5600000000000D-02    6.9012072649573D-07
+                -6.3000000000000D-02    6.9687891737892D-07
+                -5.0400000000000D-02    6.9362571225071D-07
+                -3.7800000000000D-02    6.9074768518519D-07
+                -2.5200000000000D-02    6.8786965811966D-07
+                -1.2600000000000D-02    6.8586413817664D-07
+               0.    6.8585603632479D-07
+                 1.2600000000000D-02    6.8584793447293D-07
+                 2.5200000000000D-02    6.8783600427350D-07
+                 3.7800000000000D-02    6.9069720441595D-07
+                 5.0400000000000D-02    6.9355840455840D-07
+                 6.3000000000000D-02    6.9679789886040D-07
+                 7.5600000000000D-02    6.9002412749288D-07
+                 8.8200000000000D-02    6.8325035612536D-07
+                 1.0080000000000D-01    6.5743162393162D-07
+                     ) ) ; 
+           
+ fly_1_7  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    6.9684526353276D-07
+                -8.8200000000000D-02    7.1406606125356D-07
+                -7.5600000000000D-02    7.3236502849003D-07
+                -6.3000000000000D-02    7.2076442307692D-07
+                -5.0400000000000D-02    7.1793500712251D-07
+                -3.7800000000000D-02    7.2835648148148D-07
+                -2.5200000000000D-02    7.1444747150997D-07
+                -1.2600000000000D-02    7.1130893874644D-07
+               0.    7.2107727920228D-07
+                 1.2600000000000D-02    7.1129398148148D-07
+                 2.5200000000000D-02    7.1441257122507D-07
+                 3.7800000000000D-02    7.2830288461538D-07
+                 5.0400000000000D-02    7.1786396011396D-07
+                 6.3000000000000D-02    7.2067841880342D-07
+                 7.5600000000000D-02    7.3226157407407D-07
+                 8.8200000000000D-02    7.1395138888889D-07
+                 1.0080000000000D-01    6.9671812678063D-07
+                     ) ) ; 
+           
+ fly_1_8  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    7.3679362535613D-07
+                -8.8200000000000D-02    7.5423130341880D-07
+                -7.5600000000000D-02    7.7215633903134D-07
+                -6.3000000000000D-02    7.5865740740741D-07
+                -5.0400000000000D-02    7.5547774216524D-07
+                -3.7800000000000D-02    7.6662464387464D-07
+                -2.5200000000000D-02    7.5088461538462D-07
+                -1.2600000000000D-02    7.4313924501424D-07
+               0.    7.4863230056980D-07
+                 1.2600000000000D-02    7.4312054843305D-07
+                 2.5200000000000D-02    7.5084722222222D-07
+                 3.7800000000000D-02    7.6656730769231D-07
+                 5.0400000000000D-02    7.5540170940171D-07
+                 6.3000000000000D-02    7.5856267806268D-07
+                 7.5600000000000D-02    7.7204415954416D-07
+                 8.8200000000000D-02    7.5410790598291D-07
+                 1.0080000000000D-01    7.3665776353276D-07
+                     ) ) ; 
+           
+ fly_1_9  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    7.7370940170940D-07
+                -8.8200000000000D-02    8.0144764957265D-07
+                -7.5600000000000D-02    8.0374358974359D-07
+                -6.3000000000000D-02    8.0603952991453D-07
+                -5.0400000000000D-02    8.0238372507123D-07
+                -3.7800000000000D-02    7.9936672008547D-07
+                -2.5200000000000D-02    7.9634971509972D-07
+                -1.2600000000000D-02    7.8317361111111D-07
+               0.    7.8316426282051D-07
+                 1.2600000000000D-02    7.8315491452991D-07
+                 2.5200000000000D-02    7.9631107549858D-07
+                 3.7800000000000D-02    7.9930689102564D-07
+                 5.0400000000000D-02    8.0230270655271D-07
+                 6.3000000000000D-02    8.0593856837607D-07
+                 7.5600000000000D-02    8.0362580128205D-07
+                 8.8200000000000D-02    8.0131303418803D-07
+                 1.0080000000000D-01    7.7356356837607D-07
+                     ) ) ; 
+           
+ fly_1_10 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    7.9424198717949D-07
+                -8.8200000000000D-02    8.1225925925926D-07
+                -7.5600000000000D-02    8.3075516381766D-07
+                -6.3000000000000D-02    8.1540651709402D-07
+                -5.0400000000000D-02    8.1131071937322D-07
+                -3.7800000000000D-02    8.2297489316239D-07
+                -2.5200000000000D-02    8.0577403846154D-07
+                -1.2600000000000D-02    7.9717236467236D-07
+               0.    8.0284615384615D-07
+                 1.2600000000000D-02    7.9715117521368D-07
+                 2.5200000000000D-02    8.0573165954416D-07
+                 3.7800000000000D-02    8.2291257122507D-07
+                 5.0400000000000D-02    8.1122845441595D-07
+                 6.3000000000000D-02    8.1530306267806D-07
+                 7.5600000000000D-02    8.3063051994302D-07
+                 8.8200000000000D-02    8.1211841168091D-07
+                 1.0080000000000D-01    7.9408742877493D-07
+                     ) ) ; 
+           
+ fly_1_11 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.1647845441595D-07
+                -8.8200000000000D-02    8.3510648148148D-07
+                -7.5600000000000D-02    8.5487873931624D-07
+                -6.3000000000000D-02    8.3969088319088D-07
+                -5.0400000000000D-02    8.3502920227920D-07
+                -3.7800000000000D-02    8.4651014957265D-07
+                -2.5200000000000D-02    8.2973931623932D-07
+                -1.2600000000000D-02    8.2549269943020D-07
+               0.    8.3637909544160D-07
+                 1.2600000000000D-02    8.2547275641026D-07
+                 2.5200000000000D-02    8.2969319800570D-07
+                 3.7800000000000D-02    8.4644408831909D-07
+                 5.0400000000000D-02    8.3493945868946D-07
+                 6.3000000000000D-02    8.3957995014245D-07
+                 7.5600000000000D-02    8.5474786324786D-07
+                 8.8200000000000D-02    8.3495690883191D-07
+                 1.0080000000000D-01    8.1631641737892D-07
+                     ) ) ; 
+           
+ fly_1_12 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.3948272792023D-07
+                -8.8200000000000D-02    8.7002546296296D-07
+                -7.5600000000000D-02    8.7608564814815D-07
+                -6.3000000000000D-02    8.8214583333333D-07
+                -5.0400000000000D-02    8.7589245014245D-07
+                -3.7800000000000D-02    8.7128872863248D-07
+                -2.5200000000000D-02    8.6668500712251D-07
+                -1.2600000000000D-02    8.6321616809117D-07
+               0.    8.6320432692308D-07
+                 1.2600000000000D-02    8.6319248575499D-07
+                 2.5200000000000D-02    8.6663764245014D-07
+                 3.7800000000000D-02    8.7121705840456D-07
+                 5.0400000000000D-02    8.7579647435897D-07
+                 6.3000000000000D-02    8.8202617521368D-07
+                 7.5600000000000D-02    8.7594667022792D-07
+                 8.8200000000000D-02    8.6986716524217D-07
+                 1.0080000000000D-01    8.3931196581197D-07
+                     ) ) ; 
+           
+ fly_1_13 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.5508315527066D-07
+                -8.8200000000000D-02    8.7546616809117D-07
+                -7.5600000000000D-02    9.0944533475783D-07
+                -6.3000000000000D-02    9.1292663817664D-07
+                -5.0400000000000D-02    8.9653721509972D-07
+                -3.7800000000000D-02    8.9547275641026D-07
+                -2.5200000000000D-02    8.7405644586895D-07
+                -1.2600000000000D-02    8.7004789886040D-07
+               0.    8.8226549145299D-07
+                 1.2600000000000D-02    8.7002546296296D-07
+                 2.5200000000000D-02    8.7400534188034D-07
+                 3.7800000000000D-02    8.9539672364672D-07
+                 5.0400000000000D-02    8.9643376068376D-07
+                 6.3000000000000D-02    9.1279825498576D-07
+                 7.5600000000000D-02    9.0929576210826D-07
+                 8.8200000000000D-02    8.7530288461538D-07
+                 1.0080000000000D-01    8.5490491452991D-07
+                     ) ) ; 
+           
+ fly_1_14 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.5798237179487D-07
+                -8.8200000000000D-02    8.6880893874644D-07
+                -7.5600000000000D-02    9.0299750712251D-07
+                -6.3000000000000D-02    9.0948646723647D-07
+                -5.0400000000000D-02    9.1597542735043D-07
+                -3.7800000000000D-02    9.0500302706553D-07
+                -2.5200000000000D-02    8.8214084757835D-07
+                -1.2600000000000D-02    8.7779825498575D-07
+               0.    8.8993732193732D-07
+                 1.2600000000000D-02    8.7777207977208D-07
+                 2.5200000000000D-02    8.8208974358974D-07
+                 3.7800000000000D-02    9.0492325498576D-07
+                 5.0400000000000D-02    9.1586574074074D-07
+                 6.3000000000000D-02    9.0935434472934D-07
+                 7.5600000000000D-02    9.0284294871795D-07
+                 8.8200000000000D-02    8.6864066951567D-07
+                 1.0080000000000D-01    8.5779665242165D-07
+                     ) ) ; 
+           
+ fly_1_15 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.5773557692308D-07
+                -8.8200000000000D-02    8.6180893874644D-07
+                -7.5600000000000D-02    8.7862838319088D-07
+                -6.3000000000000D-02    8.9924074074074D-07
+                -5.0400000000000D-02    9.0872489316239D-07
+                -3.7800000000000D-02    9.0174545940171D-07
+                -2.5200000000000D-02    8.9476602564103D-07
+                -1.2600000000000D-02    8.9122364672365D-07
+               0.    8.9120993589744D-07
+                 1.2600000000000D-02    8.9119622507123D-07
+                 2.5200000000000D-02    8.9471118233618D-07
+                 3.7800000000000D-02    9.0166132478632D-07
+                 5.0400000000000D-02    9.0861146723647D-07
+                 6.3000000000000D-02    8.9910363247863D-07
+                 7.5600000000000D-02    8.7847257834758D-07
+                 8.8200000000000D-02    8.6163693019943D-07
+                 1.0080000000000D-01    8.5754362535613D-07
+                     ) ) ; 
+           
+ fly_1_16 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.5903935185185D-07
+                -8.8200000000000D-02    8.5690046296296D-07
+                -7.5600000000000D-02    8.5831018518519D-07
+                -6.3000000000000D-02    8.6167307692308D-07
+                -5.0400000000000D-02    8.7125320512821D-07
+                -3.7800000000000D-02    8.8563586182336D-07
+                -2.5200000000000D-02    8.7089298433048D-07
+                -1.2600000000000D-02    8.6842877492877D-07
+               0.    8.7942111823362D-07
+                 1.2600000000000D-02    8.6840135327635D-07
+                 2.5200000000000D-02    8.7083814102564D-07
+                 3.7800000000000D-02    8.8554985754986D-07
+                 5.0400000000000D-02    8.7113977920228D-07
+                 6.3000000000000D-02    8.6153846153846D-07
+                 7.5600000000000D-02    8.5815313390313D-07
+                 8.8200000000000D-02    8.5672471509972D-07
+                 1.0080000000000D-01    8.5884116809117D-07
+                     ) ) ; 
+           
+ fly_1_17 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.6388675213675D-07
+                -8.8200000000000D-02    8.5563782051282D-07
+                -7.5600000000000D-02    8.5087019230769D-07
+                -6.3000000000000D-02    8.4755965099715D-07
+                -5.0400000000000D-02    8.4761698717949D-07
+                -3.7800000000000D-02    8.5133636039886D-07
+                -2.5200000000000D-02    8.4844088319088D-07
+                -1.2600000000000D-02    8.4633689458689D-07
+               0.    8.4644658119658D-07
+                 1.2600000000000D-02    8.4630947293447D-07
+                 2.5200000000000D-02    8.4838479344729D-07
+                 3.7800000000000D-02    8.5125160256410D-07
+                 5.0400000000000D-02    8.4750480769231D-07
+                 6.3000000000000D-02    8.4742378917379D-07
+                 7.5600000000000D-02    8.5071064814815D-07
+                 8.8200000000000D-02    8.5545584045584D-07
+                 1.0080000000000D-01    8.6368108974359D-07
+                     ) ) ; 
+           
+ fluxrd1 = DEFI_NAPPE ( 
+                     NOM_PARA : 'Z'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                PARA : ( 
+                         -1.0080000000000D-01
+                         -8.8200000000000D-02
+                         -7.5600000000000D-02
+                         -6.3000000000000D-02
+                         -5.0400000000000D-02
+                         -3.7800000000000D-02
+                         -2.5200000000000D-02
+                         -1.2600000000000D-02
+                        0.
+                          1.2600000000000D-02
+                          2.5200000000000D-02
+                          3.7800000000000D-02
+                          5.0400000000000D-02
+                          6.3000000000000D-02
+                          7.5600000000000D-02
+                          8.8200000000000D-02
+                          1.0080000000000D-01
+                ) 
+                FONCTION : ( 
+                      fly_1_1 
+                      fly_1_2 
+                      fly_1_3 
+                      fly_1_4 
+                      fly_1_5 
+                      fly_1_6 
+                      fly_1_7 
+                      fly_1_8 
+                      fly_1_9 
+                      fly_1_10
+                      fly_1_11
+                      fly_1_12
+                      fly_1_13
+                      fly_1_14
+                      fly_1_15
+                      fly_1_16
+                      fly_1_17
+                ) 
+                ); 
+%
+% DEFINITION DES MATERIAUX ET AFFECTATIONS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%           **** DEFINITION DES MATERIAUX SANS FLUX NEUTRONIQUE ****
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+
+
+% Famille assemblage : numero_fam
+%
+% Embout superieur
+
+e_es  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.   )
+                          );
+nu_es  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.     )
+                          );
+al_es  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.  )
+                          );
+ mt_es  = DEFI_MATERIAU ( ELAS_FO : (    E  : e_es
+                                         NU : nu_es
+                                      ALPHA : al_es
+                                        RHO : 7800.
+                                   )
+                          );
+% Embout inferieur
+
+e_ei  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.  )
+                          );
+nu_ei = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.    )
+                          );
+al_ei = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3. )
+                          );
+ mt_ei  = DEFI_MATERIAU ( ELAS_FO : (    E     : e_ei
+                                         NU    : nu_ei
+                                         ALPHA : al_ei
+                                         RHO   : 12.
+                                   )
+                          );
+ mt_rig  = DEFI_MATERIAU ( ELAS : (   E     : 1.
+                                      NU    : 0.
+                                      ALPHA : 0. 
+                                      RHO   : 0.)
+                         );
+% Fonction couple en fonction de drz pour la liaison grille/crayon
+
+ fotrac= DEFI_FONCTION ( NOM_PARA   : 'DRZ'
+                           VALE       : ( 1. 1.
+                                          0. 0.
+                                          0. 0.
+                                          0. 0.
+                                         )
+                         PROL_DROIT : 'LINEAIRE'
+                         PROL_GAUCHE: 'LINEAIRE' );
+
+
+ mt_re1 = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                            RELA_MZ  : fotrac
+                                            RIGI_N_FO:frig1
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re2 = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB      : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig2
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re3  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig3
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re4  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig4
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re5  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig5
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re6  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig6
+                                     EFFO_N_INIT :-35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re7  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig7
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re8  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig8
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re9  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   :frig9
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re10 = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig10
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+
+%%%% %%%%%%%%%%%%%%%%%%%%%%%%
+
+% Systeme de maintien
+ e_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                              PROL_DROIT  : 'CONSTANT'
+                              PROL_GAUCHE : 'CONSTANT'
+                              VALE        : ( 0. 1.
+                                              5. 2. )
+                            );
+                            
+ nu_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                               PROL_DROIT  : 'CONSTANT'
+                               PROL_GAUCHE : 'CONSTANT'
+                               VALE        : ( 0. 1.
+                                               5. 2.   )
+                             );
+                             
+ al_ma    = DEFI_CONSTANTE (  VALE        :  0.3  );
+                          
+ sy_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                              PROL_DROIT  : 'CONSTANT'
+                               PROL_GAUCHE : 'CONSTANT'
+                               VALE        : ( 0. 1.
+                                               5. 2. )
+                              );
+                          
+ ds_ma    = DEFI_CONSTANTE (  VALE        :  0.3 );
+                          
+ np_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                               PROL_DROIT  : 'CONSTANT'
+                               PROL_GAUCHE : 'CONSTANT'
+                               VALE        : ( 0. 1.
+                                               5. 2. )
+                              ); 
+                               
+ mey_ma  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                               PROL_DROIT  : 'CONSTANT'
+                                PROL_GAUCHE : 'CONSTANT'
+                                VALE        : ( 0. 1.
+                                                5. 2.  )
+                              );
+                              
+ mpy_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                                PROL_DROIT  : 'CONSTANT'
+                                PROL_GAUCHE : 'CONSTANT'
+                                VALE        : ( 0. 1.
+                                                5. 2.  )
+                              );
+                              
+ mez_ma     = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                                PROL_DROIT  : 'CONSTANT'
+                                PROL_GAUCHE : 'CONSTANT'
+                                VALE        : ( 0. 1.
+                                                5. 2.  )
+                               );
+                               
+ mpz_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                               PROL_DROIT  : 'CONSTANT'
+                               PROL_GAUCHE : 'CONSTANT'
+                               VALE        : (0. 1.
+                                              5. 2.  )
+                             );
+                             
+ cay_ma    = DEFI_CONSTANTE (  VALE        :  0.3 );
+
+ cby_ma    = DEFI_CONSTANTE (  VALE        :   0.3  );
+
+ caz_ma    = DEFI_CONSTANTE (  VALE        :   0.3 );
+
+ cbz_ma    = DEFI_CONSTANTE (  VALE        :   0.3 ); 
+
+ mpx_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.  )
+                          ); 
+                           
+mt_ma     = DEFI_MATERIAU ( ELAS_FO : (  E       : e_ma 
+                                            NU    : nu_ma 
+                                            ALPHA : al_ma 
+                                            RHO   : 7800. )
+                            ECRO_LINE_FO:   ( D_SIGM_EPSI:ds_ma
+                                              SY : sy_ma   )
+                            VMIS_POUTRE_FO: ( NP : np_ma
+                                              MEY: mey_ma
+                                              MPY: mpy_ma
+                                              CAY: cay_ma
+                                              CBY: cby_ma
+                                              MEZ: mez_ma
+                                              MPZ: mpz_ma
+                                              CAZ: caz_ma
+                                              CBZ: cbz_ma
+                                              MPX: mpx_ma )
+                          );
+               
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%           **** DEFINITION DES MATERIAUX AVEC FLUX NEUTRONIQUE ****
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+
+% Grille
+
+
+
+e_gre     = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.   )
+                          );
+         
+e_grm     = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.   )
+                          );
+                          
+nu_gre    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.       )
+                          );
+                          
+nu_grm    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.      )
+                          );
+                          
+al_gre    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.  )
+                          );
+                         
+al_grm    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.  )
+                          ); 
+                                                                                                 
+% Tube guide
+
+e_tu     = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.
+                                          )
+                          );
+
+nu_tu    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.     )
+                          );
+                          
+al_tu    = DEFI_FONCTION (  NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.  )
+                          );
+
+
+
+
+% Crayon
+
+e_cr     = DEFI_FONCTION (  NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.
+                                          )
+                          );
+                         
+nu_cr    = DEFI_FONCTION (  NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.    )
+                          );
+
+al_cr    = DEFI_FONCTION (  NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.  )
+                          );
+
+
+% GRANDISSEMENT DES GRILLES
+
+
+
+% Grilles extremes 1 et 10
+
+mt_gre1  = DEFI_MATERIAU ( ELAS_FO : ( E     : e_gre
+                                        NU    : nu_gre
+                                        ALPHA : al_gre
+                                        RHO   : 7800. )
+                                          GRAN_IRRA:( FLUX_L   :fluxax1
+                                        FLUX_TN  :fluxrd1
+                                        FONC_MULT:flux_f1
+                                        A        : 0.
+                                        S        : 1. )
+                            LEMAITRE :( N        : 0.
+                                        UN_SUR_K : 0.
+                                        UN_SUR_M : 0.
+                                        QSR_K    : 1.  )
+                          );          
+                          
+% Grilles de melange       
+mt_grm1= DEFI_MATERIAU ( ELAS_FO : ( E        : e_grm
+                                      NU       : nu_grm
+                                      ALPHA    : al_grm
+                                      RHO      : 7800.  )
+                           GRAN_IRRA: ( FLUX_L  :fluxax1
+                                       FLUX_TN  :fluxrd1
+                                       FONC_MULT:flux_f1
+                                       A        : 0.
+                                       S        : 1. )
+                           LEMAITRE : (N        : 0.
+                                       UN_SUR_K : 0.
+                                       UN_SUR_M : 0.
+                                       QSR_K    : 2. )
+                          );
+
+% Definition des materiaux viscoplastiques ( tubes et crayons )
+
+
+mt_tu1  = DEFI_MATERIAU ( ELAS_FO : ( E         : e_tu
+                                        NU       : nu_tu
+                                        ALPHA    : al_tu
+                                        RHO      : 7800. )
+                           GRAN_IRRA: ( FLUX_L   : fluxax1
+                                        FLUX_TN  : fluxrd1
+                                        FONC_MULT: flux_f1
+                                        A        : 0.
+                                        S        : 1.)
+                           LEMAITRE : ( N        : 0.
+                                        UN_SUR_K : 0.
+                                        UN_SUR_M : 0.
+                                        QSR_K    : 2.)
+                          );
+
+
+ mt_cr1  = DEFI_MATERIAU (ELAS_FO : ( E        : e_cr
+                                        NU       : nu_cr
+                                        ALPHA    : al_cr
+                                        RHO      :7800.  )
+                           GRAN_IRRA: ( FLUX_L   : fluxax1
+                                        FLUX_TN  : fluxrd1
+                                        FONC_MULT: flux_f1
+                                        A        : 0.
+                                        S        : 1.)
+                                         LEMAITRE : ( N        : 0.
+                                        UN_SUR_K : 0.
+                                        UN_SUR_M : 0.
+                                        QSR_K    : 2.)         
+                           
+                                    );
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%           AFFECTATION DES MATERIAUX A CHAUD - CYCLE  
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+ a_mat_1  = AFFE_MATERIAU ( MAILLAGE : ma1
+          
+  % systeme de maintien
+                         AFFE : ( GROUP_MA : (mainti_y, mainti_z)
+                                  MATER : mt_ma
+                                  TEMP_REF: 100.
+                                ) 
+           % grilles de melange
+                         AFFE : ( GROUP_MA : gril_i
+                                  MATER : mt_grm1
+                                  TEMP_REF: 100.
+                                ) 
+           % grilles de extremes
+                         AFFE : ( GROUP_MA : gril_e 
+                                  MATER : mt_gre1
+                                  TEMP_REF: 100.
+                                ) 
+           % crayons combustibles
+                         AFFE : ( GROUP_MA : cray
+                                  MATER : mt_cr1
+                                  TEMP_REF: 100.
+                                )
+           % tubes guides
+                         AFFE : ( GROUP_MA : guid
+                                  MATER : mt_tu1
+                                  TEMP_REF: 100.
+                                )
+           % embout inferieur
+                         AFFE : ( GROUP_MA : eboinf
+                                  MATER : mt_ei
+                                  TEMP_REF: 100.
+                                )
+           %pieds
+                         AFFE : ( GROUP_MA :(pi_ple, pi_tro)
+                                  MATER : mt_ei
+                                 TEMP_REF: 100.
+                                )
+
+           % embout superieur
+                         AFFE : ( GROUP_MA : ebosup
+                                  MATER : mt_es
+                                  TEMP_REF: 100.
+                                )
+           % liaison grille tubes guides
+                         AFFE : ( GROUP_MA : rigid
+                                  MATER : mt_rig
+                                  TEMP_REF: 100.
+                                )
+          
+           % liaison grille crayon
+                         AFFE : ( GROUP_MA : ela1
+                                  MATER : mt_re1
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela2
+                                  MATER : mt_re2
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela3
+                                  MATER : mt_re3
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela4
+                                  MATER : mt_re4
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela5
+                                  MATER : mt_re5
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela6
+                                  MATER : mt_re6
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela7
+                                  MATER : mt_re7
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela8
+                                  MATER : mt_re8
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela9
+                                  MATER : mt_re9
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela10
+                                  MATER : mt_re10
+                                  TEMP_REF: 100.
+                                )
+                     );
+%
+
+
+ L_INST_1 = DEFI_LIST_REEL(
+                         DEBUT: 0.0
+                         INTERVALLE : (JUSQU_A: 0.5    NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 1000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 2000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 3000.  NOMBRE: 5   )
+                         INTERVALLE : (JUSQU_A: 4000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 5000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 6000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 7000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 8000.  NOMBRE: 1   ));
+                         
+ L_ARCH_1 = DEFI_LIST_REEL(
+                         DEBUT: 0.0
+                         INTERVALLE : (JUSQU_A: 0.5     NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 1000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 2000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 3000.   NOMBRE: 5  )
+                         INTERVALLE : (JUSQU_A: 4000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 5000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 6000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 7000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 8000.   NOMBRE: 1  ));
+                         
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% CALCUL PHASE I A V DU CYCLE 1
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+
+  RESU = STAT_NON_LINE( MODELE     : mo1
+                        CHAM_MATER : a_mat_1
+                        CARA_ELEM  : cara1
+                        EXCIT :( CHARGE : arch_1   FONC_MULT: arch_f1 )
+                        EXCIT :( CHARGE : foarch_1 FONC_MULT: arch_f1 )
+                        EXCIT :( CHARGE : hydr_1   FONC_MULT: hydr_f1 )
+                        EXCIT :( CHARGE : fohydr_1 FONC_MULT: hydr_f1 )
+                        EXCIT :( CHARGE : cl_di_1  FONC_MULT: cldi_f1 )
+                        EXCIT :( CHARGE : cl_per_1 )
+                        EXCIT :( CHARGE : cl_ctc   )
+                        EXCIT :( CHARGE : pesant_1 )
+                        EXCIT :( CHARGE : therm_1  )
+                        COMP_INCR :(RELATION :'VMIS_POU_LINE'
+                                    GROUP_MA : maintien)
+                        COMP_INCR :(RELATION :'ASSE_COMBU'
+                                    GROUP_MA : (crayons tub_guid     ))
+                        COMP_INCR :( RELATION :'DIS_CONTACT'
+                                     GROUP_MA : li_gr_cr)
+                        COMP_INCR :(RELATION :'ELAS'
+                                    COQUE_NCOU : 1
+                                    GROUP_MA :(embo_inf embo_sup pieds 
+                                               grilles li_gr_gu ))
+                     
+                        INCREMENT :( LIST_INST : l_inst_1
+                                     NUME_INST_FIN  :  20  
+                                   )
+                        
+                        NEWTON : ( MATRICE       : 'TANGENTE'
+                                   REAC_ITER    : 1          )
+                        RECH_LINEAIRE : (ITER_LINE_MAXI: 3)
+                        CONVERGENCE : (RESI_GLOB_RELA: 1.E-4
+                                       ITER_GLOB_MAXI: 50 
+                                       ITER_INTE_MAXI: 500
+                                       ARRET         : 'OUI' )
+                        SOLVEUR : ( METHODE : 'MULT_FRONT'
+                                    RENUM   : 'MD' )
+                        PARM_THETA : 0.5
+                        ARCHIVAGE : ( LIST_INST : l_arch_1)
+                      );
+                      
+fin();
diff --git a/Exemples/ex19/__init__.py b/Exemples/ex19/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex19/ahlv100a.comm b/Exemples/ex19/ahlv100a.comm
new file mode 100755 (executable)
index 0000000..2cb6159
--- /dev/null
@@ -0,0 +1,354 @@
+# MODIF  DATE 11/12/2001   AUTEUR DURAND C.DURAND 
+# TITRE GUIDE D'ONDE A SORTIE ANECHOIQUE (ONDES PLANES) E.F. CLASSIQUES
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+#  MODELISATION 'ACOUSTIQUE' AVEC ELEMENTS HEXA20 ET FACE8
+#  GUIDE D'ONDE ACOUSTIQUE EN E.F. CLASSIQUES
+#
+
+DEBUT(CODE=_F( NOM = 'AHLV100A')  )
+
+F=500.
+
+MAIL=LIRE_MAILLAGE( )
+
+AIR=DEFI_MATERIAU( FLUIDE=_F( RHO = 1.3, CELE_C = ('RI',343.,0.,)))
+
+CHAMPMAT=AFFE_MATERIAU(  MAILLAGE=MAIL,
+                                 AFFE=_F( TOUT = 'OUI',  MATER = AIR) )
+
+GUIDE=AFFE_MODELE(  MAILLAGE=MAIL,     VERIF='MAILLE',
+                            AFFE=_F( TOUT = 'OUI', MODELISATION = '3D',
+                                     PHENOMENE = 'ACOUSTIQUE') )
+
+CHARACOU=AFFE_CHAR_ACOU(      MODELE=GUIDE,
+                 VITE_FACE=_F( GROUP_MA = 'ENTREE', VNOR = ('RI',0.014,0.,)))
+
+IMPEACOU=AFFE_CHAR_ACOU(      MODELE=GUIDE,
+                 IMPE_FACE=_F( GROUP_MA = 'SORTIE', IMPE = ('RI',445.9,0.,)))
+
+MACRO_MATR_ASSE(
+                      MODELE=GUIDE,         CHARGE=IMPEACOU,
+                      CHAM_MATER=CHAMPMAT,
+                      NUME_DDL=CO("NUM"),MATR_ASSE=(
+                      _F(  MATRICE = CO("MATASK"), OPTION = 'RIGI_ACOU'),
+                                _F(  MATRICE = CO("MATASM"), OPTION = 'MASS_ACOU'),
+                                _F(  MATRICE = CO("MATASI"), OPTION = 'AMOR_ACOU'))
+                   )
+
+#
+
+VECTELEM=CALC_VECT_ELEM(   OPTION='CHAR_ACOU',  CHAM_MATER=CHAMPMAT,
+                                CHARGE=CHARACOU )
+
+#
+# IMPRESSION DU VECT_ELEM COMPLEXE VECTELEM SELON LE GRAIN MAILLE
+# 
+
+IMPR_MATRICE(   MATR_ELEM=_F(  MATRICE = VECTELEM,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'MAILLE'))
+
+VECTASS=ASSE_VECTEUR(  VECT_ELEM=VECTELEM,   NUME_DDL=NUM )
+
+#
+#  ____________________CALCUL DES MODES_________________________________
+#
+
+MATASKR=COMB_MATR_ASSE(    COMB_R=_F( MATR_ASSE = MATASK,  PARTIE = 'REEL', COEF_R = 1.))
+
+MATASMR=COMB_MATR_ASSE(    COMB_R=_F( MATR_ASSE = MATASM,  PARTIE = 'REEL', COEF_R = 1.))
+
+#
+
+MODES=MODE_ITER_SIMULT(      MATR_A=MATASKR,
+                                     MATR_B=MATASMR,
+                                  CALC_FREQ=_F( OPTION = 'BANDE',
+                                             FREQ = ( 1., 1000.,))
+                               )
+
+TEST_RESU(RESU=(_F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-4,
+                    NUME_ORDRE = 1,  VALE = 171.5),
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-4,
+                    NUME_ORDRE = 2,  VALE = 343.), 
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-3,
+                    NUME_ORDRE = 3,  VALE = 514.5),
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-2,
+                    NUME_ORDRE = 4,  VALE = 686.),            
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-3,
+                    NUME_ORDRE = 5,  VALE = 857.5),     
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 6,  VALE = 857.5),      
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 7,  VALE = 874.482),      
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 8,  VALE = 923.556))
+             )
+
+#  ----------------------CALCUL DECOMPOSE-------------------------------
+#
+
+MATRES=COMB_MATR_ASSE( COMB_C=(   _F( MATR_ASSE = MATASK,
+                                        COEF_R = 1.),
+                                       _F( MATR_ASSE = MATASM,
+                                        COEF_R = -9869604.4),
+                                       _F( MATR_ASSE = MATASI,
+                                        COEF_C = ('RI',0.,3141.5926,)))
+                            )
+
+#
+# IMPRESSION DE LA MATRICE COMPLEXE MATRES SELON LE GRAIN NOEUD
+# 
+
+IMPR_MATRICE(   MATR_ASSE=_F(  MATRICE = MATRES,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'NOEUD',
+                               OPTION = 'LIGNE'))
+
+#
+# IMPRESSION DE LA MATRICE COMPLEXE MATRES SELON LE GRAIN VALEUR
+# 
+
+IMPR_MATRICE(   MATR_ASSE=_F(  MATRICE = MATRES,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'VALEUR',
+                               OPTION = 'LIGNE'))
+
+VECRES=COMB_CHAM_NO(    COMB_C=_F( CHAM_NO = VECTASS,
+                                      COEF_C = ('RI',0.,-3141.5926,))
+                            )
+
+MATRES=FACT_LDLT( reuse=MATRES,  MATR_ASSE=MATRES )
+
+VECRES=RESO_LDLT( reuse=VECRES,  MATR_FACT=MATRES,
+                             CHAM_NO=VECRES
+                        )
+
+TEST_RESU(CHAM_NO=(
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO763', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)))
+             )
+
+CHNODBEL=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_DBEL'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'DB',  VALE = 109.9))
+             )
+
+#
+
+PREEL=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_REEL'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE = -6.2426),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE = -6.2426),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE = 6.02368),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'PRES', VALE = 6.02368))
+             )
+
+PIMAG=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_IMAG'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE = 0.,
+            CRITERE = 'ABSOLU'),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'PRES', VALE = 0.,
+            CRITERE = 'ABSOLU'),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA57',
+            NOEUD = 'NO751', NOM_CMP = 'PRES', VALE = 1.6387, PRECISION = 3.3E-3),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA57',
+            NOEUD = 'NO763', NOM_CMP = 'PRES', VALE = 1.6387, PRECISION = 3.3E-3))
+             )
+
+#-----------------------CALCUL HARMONIQUE-------------------------------
+
+
+PRESHARM=DYNA_LINE_HARM( MATR_MASS=MATASM,  MATR_RIGI=MATASK,
+                             MATR_AMOR=MATASI,
+                               FREQ=F,
+                             EXCIT=_F( VECT_ASSE = VECTASS,  COEF_MULT = -1.,
+                                    PUIS_PULS = 1,  PHAS_DEG = 90.))
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO1',  NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO763',  NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='INTE_ELNO_ACTI'
+           )
+
+TEST_RESU(RESU=(
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',  NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA57',
+            NOEUD = 'NO751', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA57',
+            NOEUD = 'NO763', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='INTE_ELNO_REAC'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_DBEL'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',  NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'DB',  VALE = 109.9))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_REEL'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'PRES',  VALE = -6.2426),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'PRES',  VALE = -6.2426),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'PRES',  VALE = 6.02368),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'PRES',  VALE = 6.02368))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_IMAG'
+           )
+
+TEST_RESU(RESU=(
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',  NOM_CMP = 'PRES',  VALE = 0.,
+                                     CRITERE = 'ABSOLU'),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'PRES',  VALE = 0.,
+                                     CRITERE = 'ABSOLU'),
+          _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+           MAILLE = 'MA57',
+           NOEUD = 'NO751', NOM_CMP = 'PRES',  VALE = 1.6387, PRECISION = 3.3E-3,
+                                     CRITERE = 'RELATIF'),
+          _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+           MAILLE = 'MA57',
+           NOEUD = 'NO763',  NOM_CMP = 'PRES',  VALE = 1.6387, PRECISION = 3.3E-3))
+             )
+
+FIN()
+#
+#
diff --git a/Exemples/ex19/main.py b/Exemples/ex19/main.py
new file mode 100644 (file)
index 0000000..b66a1e8
--- /dev/null
@@ -0,0 +1,52 @@
+"""
+   Exemple d'utilisation d'un générateur au format asterv5
+
+   Dans un premier temps on importe un catalogue
+   de définition contenu dans un module et on le valide ::
+
+      import cata
+      from cata import JdC
+      cr=JdC.report()
+      if cr.estvide(): ...
+
+   Dans un deuxième temps, on construit un jeu de commandes
+   a partir d'une chaine de caractères et on vérifie sa
+   conformité.
+"""
+
+import sys
+sys.path[:0]=['../..','../../..']
+
+from Cata import cata
+
+cr=cata.JdC.report()
+print cr
+
+f=open('ahlv100a.comm','r')
+text=f.read()
+f.close()
+
+j=cata.JdC(procedure=text,cata=cata,nom="ahlv100a")
+
+j.compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+j.exec_compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+cr=j.report()
+if not cr.estvide():
+   print cr
+   sys.exit()
+
+# On récupère les plugins de la famille generator
+import generator
+
+g=generator.plugins['asterv5']()
+print g.gener(j,format='beautifie')
+g.writefile('titi.comm')
+
diff --git a/Exemples/ex19/titi.comm b/Exemples/ex19/titi.comm
new file mode 100644 (file)
index 0000000..a778d85
--- /dev/null
@@ -0,0 +1,465 @@
+
+
+DEBUT(CODE:(NOM:'AHLV100A'));
+
+MAIL=LIRE_MAILLAGE();
+
+AIR=DEFI_MATERIAU(FLUIDE:(RHO:1.3
+                          CELE_C:('RI',343.0,0.0)));
+
+CHAMPMAT=AFFE_MATERIAU(AFFE:(MATER:AIR
+                             TOUT:'OUI')
+                       MAILLAGE:MAIL);
+
+GUIDE=AFFE_MODELE(MAILLAGE:MAIL
+                  VERIF:'MAILLE'
+                  AFFE:(TOUT:'OUI'
+                        PHENOMENE:'ACOUSTIQUE'
+                        MODELISATION:'3D'));
+
+CHARACOU=AFFE_CHAR_ACOU(MODELE:GUIDE
+                        VITE_FACE:(VNOR:('RI',0.014,0.0)
+                                   GROUP_MA:ENTREE));
+
+IMPEACOU=AFFE_CHAR_ACOU(MODELE:GUIDE
+                        IMPE_FACE:(IMPE:('RI',445.89999999999998,0.0)
+                                   GROUP_MA:SORTIE));
+
+MACRO_MATR_ASSE(CHAM_MATER:CHAMPMAT
+                MATR_ASSE:(MATRICE:MATASK
+                           OPTION:'RIGI_ACOU')
+                MATR_ASSE:(MATRICE:MATASM
+                           OPTION:'MASS_ACOU')
+                MATR_ASSE:(MATRICE:MATASI
+                           OPTION:'AMOR_ACOU')
+                NUME_DDL:NUM
+                MODELE:GUIDE
+                CHARGE:IMPEACOU);
+
+VECTELEM=CALC_VECT_ELEM(OPTION:'CHAR_ACOU'
+                        CHAM_MATER:CHAMPMAT
+                        CHARGE:CHARACOU);
+
+IMPR_MATRICE(MATR_ELEM:(GRAIN:'MAILLE'
+                        MATRICE:VECTELEM
+                        FORMAT:'RESULTAT'
+                        FICHIER:'RESULTAT'));
+
+VECTASS=ASSE_VECTEUR(VECT_ELEM:VECTELEM
+                     NUME_DDL:NUM);
+
+MATASKR=COMB_MATR_ASSE(COMB_R:(PARTIE:'REEL'
+                               MATR_ASSE:MATASK
+                               COEF_R:1.0));
+
+MATASMR=COMB_MATR_ASSE(COMB_R:(PARTIE:'REEL'
+                               MATR_ASSE:MATASM
+                               COEF_R:1.0));
+
+MODES=MODE_ITER_SIMULT(MATR_A:MATASKR
+                       MATR_B:MATASMR
+                       CALC_FREQ:(OPTION:'BANDE'
+                                  FREQ:(1.0,1000.0)));
+
+TEST_RESU(RESU:(RESULTAT:MODES
+                PRECISION:1.E-4
+                CRITERE:'RELATIF'
+                VALE:171.5
+                NUME_ORDRE:1
+                PARA:'FREQ')
+          RESU:(RESULTAT:MODES
+                PRECISION:1.E-4
+                CRITERE:'RELATIF'
+                VALE:343.0
+                NUME_ORDRE:2
+                PARA:'FREQ')
+          RESU:(RESULTAT:MODES
+                PRECISION:1.E-3
+                CRITERE:'RELATIF'
+                VALE:514.5
+                NUME_ORDRE:3
+                PARA:'FREQ')
+          RESU:(RESULTAT:MODES
+                PRECISION:1.E-2
+                CRITERE:'RELATIF'
+                VALE:686.0
+                NUME_ORDRE:4
+                PARA:'FREQ')
+          RESU:(RESULTAT:MODES
+                PRECISION:1.E-3
+                CRITERE:'RELATIF'
+                VALE:857.5
+                NUME_ORDRE:5
+                PARA:'FREQ')
+          RESU:(RESULTAT:MODES
+                PRECISION:5.0000000000000001E-3
+                CRITERE:'RELATIF'
+                VALE:857.5
+                NUME_ORDRE:6
+                PARA:'FREQ')
+          RESU:(RESULTAT:MODES
+                PRECISION:5.0000000000000001E-3
+                CRITERE:'RELATIF'
+                VALE:874.48199999999997
+                NUME_ORDRE:7
+                PARA:'FREQ')
+          RESU:(RESULTAT:MODES
+                PRECISION:5.0000000000000001E-3
+                CRITERE:'RELATIF'
+                VALE:923.55600000000004
+                NUME_ORDRE:8
+                PARA:'FREQ'));
+
+MATRES=COMB_MATR_ASSE(COMB_C:(MATR_ASSE:MATASK
+                              COEF_R:1.0)
+                      COMB_C:(MATR_ASSE:MATASM
+                              COEF_R:-9.8696044000000004E6)
+                      COMB_C:(COEF_C:('RI',0.0,3141.5925999999999)
+                              MATR_ASSE:MATASI));
+
+IMPR_MATRICE(MATR_ASSE:(GRAIN:'NOEUD'
+                        MATRICE:MATRES
+                        FORMAT:'RESULTAT'
+                        OPTION:'LIGNE'
+                        FICHIER:'RESULTAT'));
+
+IMPR_MATRICE(MATR_ASSE:(GRAIN:'VALEUR'
+                        MATRICE:MATRES
+                        FORMAT:'RESULTAT'
+                        OPTION:'LIGNE'
+                        FICHIER:'RESULTAT'));
+
+VECRES=COMB_CHAM_NO(COMB_C:(COEF_C:('RI',0.0,-3141.5925999999999)
+                            CHAM_NO:VECTASS));
+
+&MATRES=FACT_LDLT(MATR_ASSE:MATRES);
+
+&VECRES=RESO_LDLT(MATR_FACT:MATRES
+                  CHAM_NO:VECRES);
+
+TEST_RESU(CHAM_NO:(CHAM_GD:VECRES
+                   NOM_CMP:'PRES'
+                   VALE_C:('RI',-6.2426000000000004,0.0)
+                   NOEUD:NO1)
+          CHAM_NO:(CHAM_GD:VECRES
+                   NOM_CMP:'PRES'
+                   VALE_C:('RI',-6.2426000000000004,0.0)
+                   NOEUD:NO780)
+          CHAM_NO:(CHAM_GD:VECRES
+                   NOM_CMP:'PRES'
+                   VALE_C:('RI',6.0236799999999997,1.6387)
+                   NOEUD:NO751)
+          CHAM_NO:(CHAM_GD:VECRES
+                   NOM_CMP:'PRES'
+                   VALE_C:('RI',6.0236799999999997,1.6387)
+                   NOEUD:NO763));
+
+CHNODBEL=CALC_CHAM_ELEM(MODELE:GUIDE
+                        CHAM_MATER:CHAMPMAT
+                        OPTION:'PRES_ELNO_DBEL'
+                        PRES:VECRES);
+
+TEST_RESU(CHAM_ELEM:(CHAM_GD:CHNODBEL
+                     MAILLE:MA1
+                     VALE:109.90000000000001
+                     NOM_CMP:'DB'
+                     NOEUD:NO1)
+          CHAM_ELEM:(CHAM_GD:CHNODBEL
+                     MAILLE:MA1
+                     VALE:109.90000000000001
+                     NOM_CMP:'DB'
+                     NOEUD:NO780)
+          CHAM_ELEM:(CHAM_GD:CHNODBEL
+                     MAILLE:MA57
+                     VALE:109.90000000000001
+                     NOM_CMP:'DB'
+                     NOEUD:NO751)
+          CHAM_ELEM:(CHAM_GD:CHNODBEL
+                     MAILLE:MA57
+                     VALE:109.90000000000001
+                     NOM_CMP:'DB'
+                     NOEUD:NO763));
+
+PREEL=CALC_CHAM_ELEM(MODELE:GUIDE
+                     CHAM_MATER:CHAMPMAT
+                     OPTION:'PRES_ELNO_REEL'
+                     PRES:VECRES);
+
+TEST_RESU(CHAM_ELEM:(CHAM_GD:PREEL
+                     MAILLE:MA1
+                     VALE:-6.2426000000000004
+                     NOM_CMP:'PRES'
+                     NOEUD:NO1)
+          CHAM_ELEM:(CHAM_GD:PREEL
+                     MAILLE:MA1
+                     VALE:-6.2426000000000004
+                     NOM_CMP:'PRES'
+                     NOEUD:NO780)
+          CHAM_ELEM:(CHAM_GD:PREEL
+                     MAILLE:MA57
+                     VALE:6.0236799999999997
+                     NOM_CMP:'PRES'
+                     NOEUD:NO751)
+          CHAM_ELEM:(CHAM_GD:PREEL
+                     MAILLE:MA57
+                     VALE:6.0236799999999997
+                     NOM_CMP:'PRES'
+                     NOEUD:NO763));
+
+PIMAG=CALC_CHAM_ELEM(MODELE:GUIDE
+                     CHAM_MATER:CHAMPMAT
+                     OPTION:'PRES_ELNO_IMAG'
+                     PRES:VECRES);
+
+TEST_RESU(CHAM_ELEM:(CHAM_GD:PIMAG
+                     MAILLE:MA1
+                     VALE:0.0
+                     NOM_CMP:'PRES'
+                     CRITERE:'ABSOLU'
+                     NOEUD:NO1)
+          CHAM_ELEM:(CHAM_GD:PIMAG
+                     MAILLE:MA1
+                     VALE:0.0
+                     NOM_CMP:'PRES'
+                     CRITERE:'ABSOLU'
+                     NOEUD:NO780)
+          CHAM_ELEM:(CHAM_GD:PIMAG
+                     MAILLE:MA57
+                     VALE:1.6387
+                     PRECISION:3.3E-3
+                     NOM_CMP:'PRES'
+                     NOEUD:NO751)
+          CHAM_ELEM:(CHAM_GD:PIMAG
+                     MAILLE:MA57
+                     VALE:1.6387
+                     PRECISION:3.3E-3
+                     NOM_CMP:'PRES'
+                     NOEUD:NO763));
+
+PRESHARM=DYNA_LINE_HARM(MATR_MASS:MATASM
+                        MATR_AMOR:MATASI
+                        FREQ:500.0
+                        MATR_RIGI:MATASK
+                        EXCIT:(PUIS_PULS:1
+                               VECT_ASSE:VECTASS
+                               PHAS_DEG:90.0
+                               COEF_MULT:-1.0));
+
+TEST_RESU(RESU:(NOM_CHAM:'PRES'
+                RESULTAT:PRESHARM
+                NOEUD:NO1
+                VALE_C:('RI',-6.2426000000000004,0.0)
+                NOM_CMP:'PRES'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'PRES'
+                RESULTAT:PRESHARM
+                NOEUD:NO780
+                VALE_C:('RI',-6.2426000000000004,0.0)
+                NOM_CMP:'PRES'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'PRES'
+                RESULTAT:PRESHARM
+                NOEUD:NO751
+                VALE_C:('RI',6.0236799999999997,1.6387)
+                NOM_CMP:'PRES'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'PRES'
+                RESULTAT:PRESHARM
+                NOEUD:NO763
+                VALE_C:('RI',6.0236799999999997,1.6387)
+                NOM_CMP:'PRES'
+                NUME_ORDRE:1));
+
+&PRESHARM=CALC_ELEM(RESULTAT:PRESHARM
+                    CHAM_MATER:CHAMPMAT
+                    MODELE:GUIDE
+                    OPTION:'INTE_ELNO_ACTI'
+                    TOUT_ORDRE:'OUI');
+
+TEST_RESU(RESU:(NOM_CHAM:'INTE_ELNO_ACTI'
+                RESULTAT:PRESHARM
+                MAILLE:MA1
+                NOEUD:NO1
+                PRECISION:0.029999999999999999
+                VALE:0.043700000000000003
+                NOM_CMP:'INTX'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'INTE_ELNO_ACTI'
+                RESULTAT:PRESHARM
+                MAILLE:MA1
+                NOEUD:NO780
+                PRECISION:0.029999999999999999
+                VALE:0.043700000000000003
+                NOM_CMP:'INTX'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'INTE_ELNO_ACTI'
+                RESULTAT:PRESHARM
+                MAILLE:MA57
+                NOEUD:NO751
+                PRECISION:0.029999999999999999
+                VALE:0.043700000000000003
+                NOM_CMP:'INTX'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'INTE_ELNO_ACTI'
+                RESULTAT:PRESHARM
+                MAILLE:MA57
+                NOEUD:NO763
+                PRECISION:0.029999999999999999
+                VALE:0.043700000000000003
+                NOM_CMP:'INTX'
+                NUME_ORDRE:1));
+
+&PRESHARM=CALC_ELEM(RESULTAT:PRESHARM
+                    CHAM_MATER:CHAMPMAT
+                    MODELE:GUIDE
+                    OPTION:'INTE_ELNO_REAC'
+                    TOUT_ORDRE:'OUI');
+
+TEST_RESU(RESU:(NOM_CHAM:'INTE_ELNO_REAC'
+                RESULTAT:PRESHARM
+                MAILLE:MA1
+                NOEUD:NO1
+                PRECISION:3.5E-4
+                CRITERE:'ABSOLU'
+                VALE:0.0
+                NOM_CMP:'INTX'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'INTE_ELNO_REAC'
+                RESULTAT:PRESHARM
+                MAILLE:MA1
+                NOEUD:NO780
+                PRECISION:3.5E-4
+                CRITERE:'ABSOLU'
+                VALE:0.0
+                NOM_CMP:'INTX'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'INTE_ELNO_REAC'
+                RESULTAT:PRESHARM
+                MAILLE:MA57
+                NOEUD:NO751
+                PRECISION:3.5E-4
+                CRITERE:'ABSOLU'
+                VALE:0.0
+                NOM_CMP:'INTX'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'INTE_ELNO_REAC'
+                RESULTAT:PRESHARM
+                MAILLE:MA57
+                NOEUD:NO763
+                PRECISION:3.5E-4
+                CRITERE:'ABSOLU'
+                VALE:0.0
+                NOM_CMP:'INTX'
+                NUME_ORDRE:1));
+
+&PRESHARM=CALC_ELEM(RESULTAT:PRESHARM
+                    CHAM_MATER:CHAMPMAT
+                    MODELE:GUIDE
+                    OPTION:'PRES_ELNO_DBEL'
+                    TOUT_ORDRE:'OUI');
+
+TEST_RESU(RESU:(NOM_CHAM:'PRES_ELNO_DBEL'
+                RESULTAT:PRESHARM
+                MAILLE:MA1
+                NOEUD:NO1
+                VALE:109.90000000000001
+                NOM_CMP:'DB'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'PRES_ELNO_DBEL'
+                RESULTAT:PRESHARM
+                MAILLE:MA1
+                NOEUD:NO780
+                VALE:109.90000000000001
+                NOM_CMP:'DB'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'PRES_ELNO_DBEL'
+                RESULTAT:PRESHARM
+                MAILLE:MA57
+                NOEUD:NO751
+                VALE:109.90000000000001
+                NOM_CMP:'DB'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'PRES_ELNO_DBEL'
+                RESULTAT:PRESHARM
+                MAILLE:MA57
+                NOEUD:NO763
+                VALE:109.90000000000001
+                NOM_CMP:'DB'
+                NUME_ORDRE:1));
+
+&PRESHARM=CALC_ELEM(RESULTAT:PRESHARM
+                    CHAM_MATER:CHAMPMAT
+                    MODELE:GUIDE
+                    OPTION:'PRES_ELNO_REEL'
+                    TOUT_ORDRE:'OUI');
+
+TEST_RESU(RESU:(NOM_CHAM:'PRES_ELNO_REEL'
+                RESULTAT:PRESHARM
+                MAILLE:MA1
+                NOEUD:NO1
+                VALE:-6.2426000000000004
+                NOM_CMP:'PRES'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'PRES_ELNO_REEL'
+                RESULTAT:PRESHARM
+                MAILLE:MA1
+                NOEUD:NO780
+                VALE:-6.2426000000000004
+                NOM_CMP:'PRES'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'PRES_ELNO_REEL'
+                RESULTAT:PRESHARM
+                MAILLE:MA57
+                NOEUD:NO751
+                VALE:6.0236799999999997
+                NOM_CMP:'PRES'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'PRES_ELNO_REEL'
+                RESULTAT:PRESHARM
+                MAILLE:MA57
+                NOEUD:NO763
+                VALE:6.0236799999999997
+                NOM_CMP:'PRES'
+                NUME_ORDRE:1));
+
+&PRESHARM=CALC_ELEM(RESULTAT:PRESHARM
+                    CHAM_MATER:CHAMPMAT
+                    MODELE:GUIDE
+                    OPTION:'PRES_ELNO_IMAG'
+                    TOUT_ORDRE:'OUI');
+
+TEST_RESU(RESU:(NOM_CHAM:'PRES_ELNO_IMAG'
+                RESULTAT:PRESHARM
+                MAILLE:MA1
+                NOEUD:NO1
+                CRITERE:'ABSOLU'
+                VALE:0.0
+                NOM_CMP:'PRES'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'PRES_ELNO_IMAG'
+                RESULTAT:PRESHARM
+                MAILLE:MA1
+                NOEUD:NO780
+                CRITERE:'ABSOLU'
+                VALE:0.0
+                NOM_CMP:'PRES'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'PRES_ELNO_IMAG'
+                RESULTAT:PRESHARM
+                MAILLE:MA57
+                NOEUD:NO751
+                PRECISION:3.3E-3
+                CRITERE:'RELATIF'
+                VALE:1.6387
+                NOM_CMP:'PRES'
+                NUME_ORDRE:1)
+          RESU:(NOM_CHAM:'PRES_ELNO_IMAG'
+                RESULTAT:PRESHARM
+                MAILLE:MA57
+                NOEUD:NO763
+                PRECISION:3.3E-3
+                VALE:1.6387
+                NOM_CMP:'PRES'
+                NUME_ORDRE:1));
+
+FIN();
diff --git a/Exemples/ex2/__init__.py b/Exemples/ex2/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex2/main.py b/Exemples/ex2/main.py
new file mode 100644 (file)
index 0000000..d8a1caa
--- /dev/null
@@ -0,0 +1,24 @@
+"""
+   Cet exemple montre :
+   - la création d'une définition de mot-clé facteur comportant un mot-clé simple
+   - sa vérification (report)
+   - la création d'un mot-clé facteur valide
+   - sa vérification (report)
+"""
+import sys
+sys.path[:0]=['../..']
+
+import Accas
+from Accas import SIMP,FACT
+
+a=FACT(b=SIMP(typ='I'))
+
+cr=a.report()
+if cr.estvide():
+   print "Verification sans erreur"
+else:
+   print cr
+
+o=a({'b':1},'mcf1',None)
+print o
+print o.report()
diff --git a/Exemples/ex20/__init__.py b/Exemples/ex20/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex20/ahlv100a.comm b/Exemples/ex20/ahlv100a.comm
new file mode 100755 (executable)
index 0000000..2cb6159
--- /dev/null
@@ -0,0 +1,354 @@
+# MODIF  DATE 11/12/2001   AUTEUR DURAND C.DURAND 
+# TITRE GUIDE D'ONDE A SORTIE ANECHOIQUE (ONDES PLANES) E.F. CLASSIQUES
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+#  MODELISATION 'ACOUSTIQUE' AVEC ELEMENTS HEXA20 ET FACE8
+#  GUIDE D'ONDE ACOUSTIQUE EN E.F. CLASSIQUES
+#
+
+DEBUT(CODE=_F( NOM = 'AHLV100A')  )
+
+F=500.
+
+MAIL=LIRE_MAILLAGE( )
+
+AIR=DEFI_MATERIAU( FLUIDE=_F( RHO = 1.3, CELE_C = ('RI',343.,0.,)))
+
+CHAMPMAT=AFFE_MATERIAU(  MAILLAGE=MAIL,
+                                 AFFE=_F( TOUT = 'OUI',  MATER = AIR) )
+
+GUIDE=AFFE_MODELE(  MAILLAGE=MAIL,     VERIF='MAILLE',
+                            AFFE=_F( TOUT = 'OUI', MODELISATION = '3D',
+                                     PHENOMENE = 'ACOUSTIQUE') )
+
+CHARACOU=AFFE_CHAR_ACOU(      MODELE=GUIDE,
+                 VITE_FACE=_F( GROUP_MA = 'ENTREE', VNOR = ('RI',0.014,0.,)))
+
+IMPEACOU=AFFE_CHAR_ACOU(      MODELE=GUIDE,
+                 IMPE_FACE=_F( GROUP_MA = 'SORTIE', IMPE = ('RI',445.9,0.,)))
+
+MACRO_MATR_ASSE(
+                      MODELE=GUIDE,         CHARGE=IMPEACOU,
+                      CHAM_MATER=CHAMPMAT,
+                      NUME_DDL=CO("NUM"),MATR_ASSE=(
+                      _F(  MATRICE = CO("MATASK"), OPTION = 'RIGI_ACOU'),
+                                _F(  MATRICE = CO("MATASM"), OPTION = 'MASS_ACOU'),
+                                _F(  MATRICE = CO("MATASI"), OPTION = 'AMOR_ACOU'))
+                   )
+
+#
+
+VECTELEM=CALC_VECT_ELEM(   OPTION='CHAR_ACOU',  CHAM_MATER=CHAMPMAT,
+                                CHARGE=CHARACOU )
+
+#
+# IMPRESSION DU VECT_ELEM COMPLEXE VECTELEM SELON LE GRAIN MAILLE
+# 
+
+IMPR_MATRICE(   MATR_ELEM=_F(  MATRICE = VECTELEM,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'MAILLE'))
+
+VECTASS=ASSE_VECTEUR(  VECT_ELEM=VECTELEM,   NUME_DDL=NUM )
+
+#
+#  ____________________CALCUL DES MODES_________________________________
+#
+
+MATASKR=COMB_MATR_ASSE(    COMB_R=_F( MATR_ASSE = MATASK,  PARTIE = 'REEL', COEF_R = 1.))
+
+MATASMR=COMB_MATR_ASSE(    COMB_R=_F( MATR_ASSE = MATASM,  PARTIE = 'REEL', COEF_R = 1.))
+
+#
+
+MODES=MODE_ITER_SIMULT(      MATR_A=MATASKR,
+                                     MATR_B=MATASMR,
+                                  CALC_FREQ=_F( OPTION = 'BANDE',
+                                             FREQ = ( 1., 1000.,))
+                               )
+
+TEST_RESU(RESU=(_F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-4,
+                    NUME_ORDRE = 1,  VALE = 171.5),
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-4,
+                    NUME_ORDRE = 2,  VALE = 343.), 
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-3,
+                    NUME_ORDRE = 3,  VALE = 514.5),
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-2,
+                    NUME_ORDRE = 4,  VALE = 686.),            
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-3,
+                    NUME_ORDRE = 5,  VALE = 857.5),     
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 6,  VALE = 857.5),      
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 7,  VALE = 874.482),      
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 8,  VALE = 923.556))
+             )
+
+#  ----------------------CALCUL DECOMPOSE-------------------------------
+#
+
+MATRES=COMB_MATR_ASSE( COMB_C=(   _F( MATR_ASSE = MATASK,
+                                        COEF_R = 1.),
+                                       _F( MATR_ASSE = MATASM,
+                                        COEF_R = -9869604.4),
+                                       _F( MATR_ASSE = MATASI,
+                                        COEF_C = ('RI',0.,3141.5926,)))
+                            )
+
+#
+# IMPRESSION DE LA MATRICE COMPLEXE MATRES SELON LE GRAIN NOEUD
+# 
+
+IMPR_MATRICE(   MATR_ASSE=_F(  MATRICE = MATRES,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'NOEUD',
+                               OPTION = 'LIGNE'))
+
+#
+# IMPRESSION DE LA MATRICE COMPLEXE MATRES SELON LE GRAIN VALEUR
+# 
+
+IMPR_MATRICE(   MATR_ASSE=_F(  MATRICE = MATRES,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'VALEUR',
+                               OPTION = 'LIGNE'))
+
+VECRES=COMB_CHAM_NO(    COMB_C=_F( CHAM_NO = VECTASS,
+                                      COEF_C = ('RI',0.,-3141.5926,))
+                            )
+
+MATRES=FACT_LDLT( reuse=MATRES,  MATR_ASSE=MATRES )
+
+VECRES=RESO_LDLT( reuse=VECRES,  MATR_FACT=MATRES,
+                             CHAM_NO=VECRES
+                        )
+
+TEST_RESU(CHAM_NO=(
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO763', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)))
+             )
+
+CHNODBEL=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_DBEL'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'DB',  VALE = 109.9))
+             )
+
+#
+
+PREEL=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_REEL'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE = -6.2426),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE = -6.2426),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE = 6.02368),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'PRES', VALE = 6.02368))
+             )
+
+PIMAG=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_IMAG'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE = 0.,
+            CRITERE = 'ABSOLU'),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'PRES', VALE = 0.,
+            CRITERE = 'ABSOLU'),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA57',
+            NOEUD = 'NO751', NOM_CMP = 'PRES', VALE = 1.6387, PRECISION = 3.3E-3),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA57',
+            NOEUD = 'NO763', NOM_CMP = 'PRES', VALE = 1.6387, PRECISION = 3.3E-3))
+             )
+
+#-----------------------CALCUL HARMONIQUE-------------------------------
+
+
+PRESHARM=DYNA_LINE_HARM( MATR_MASS=MATASM,  MATR_RIGI=MATASK,
+                             MATR_AMOR=MATASI,
+                               FREQ=F,
+                             EXCIT=_F( VECT_ASSE = VECTASS,  COEF_MULT = -1.,
+                                    PUIS_PULS = 1,  PHAS_DEG = 90.))
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO1',  NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO763',  NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='INTE_ELNO_ACTI'
+           )
+
+TEST_RESU(RESU=(
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',  NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA57',
+            NOEUD = 'NO751', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA57',
+            NOEUD = 'NO763', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='INTE_ELNO_REAC'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_DBEL'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',  NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'DB',  VALE = 109.9))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_REEL'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'PRES',  VALE = -6.2426),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'PRES',  VALE = -6.2426),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'PRES',  VALE = 6.02368),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'PRES',  VALE = 6.02368))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_IMAG'
+           )
+
+TEST_RESU(RESU=(
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',  NOM_CMP = 'PRES',  VALE = 0.,
+                                     CRITERE = 'ABSOLU'),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'PRES',  VALE = 0.,
+                                     CRITERE = 'ABSOLU'),
+          _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+           MAILLE = 'MA57',
+           NOEUD = 'NO751', NOM_CMP = 'PRES',  VALE = 1.6387, PRECISION = 3.3E-3,
+                                     CRITERE = 'RELATIF'),
+          _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+           MAILLE = 'MA57',
+           NOEUD = 'NO763',  NOM_CMP = 'PRES',  VALE = 1.6387, PRECISION = 3.3E-3))
+             )
+
+FIN()
+#
+#
diff --git a/Exemples/ex20/main.py b/Exemples/ex20/main.py
new file mode 100644 (file)
index 0000000..d4e910b
--- /dev/null
@@ -0,0 +1,37 @@
+"""
+   Construction d'un item JDC
+"""
+
+import prefs
+
+import sys
+sys.path[:0]=['../..','../../Editeur','../../..']
+
+from Cata import cata
+from analyse_catalogue import analyse_catalogue
+
+f=open('ahlv100a.comm','r')
+text=f.read()
+f.close()
+
+fic_cata="../../../Cata/cata.py"
+cata_ordonne = analyse_catalogue(None,fic_cata)
+j=cata.JdC(procedure=text,cata=cata,nom="ahlv100a",
+            cata_ord_dico=cata_ordonne.dico)
+j.compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+j.exec_compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+import treeitemincanvas
+t=treeitemincanvas.TREEITEMINCANVAS(j,"ahlv100a")
+t.mainloop()
+
+
+
+
diff --git a/Exemples/ex20/prefs.py b/Exemples/ex20/prefs.py
new file mode 100644 (file)
index 0000000..380b75f
--- /dev/null
@@ -0,0 +1,13 @@
+import os
+
+# REPINI sert à localiser le fichier editeur.ini
+REPINI=os.path.dirname(os.path.abspath(__file__))
+
+# ICONDIR sert à localiser le répertoire contenant les icones
+ICONDIR=os.path.join(REPINI,'../..','Editeur','icons')
+
+# CODE_PATH sert à localiser Accas et Cata (si pas infos dans editeur.ini)
+#CODE_PATH = os.path.join(REPINI,'..')
+
+# INSTALLDIR sert à localiser faqs.txt et les modules Eficas
+#INSTALLDIR=os.path.join(REPINI,'..','Editeur')
diff --git a/Exemples/ex21/Appli.py b/Exemples/ex21/Appli.py
new file mode 100644 (file)
index 0000000..ad2da7b
--- /dev/null
@@ -0,0 +1,48 @@
+import Tkinter
+import Pmw
+
+class CONFIG:
+   isdeveloppeur='NON'
+
+class STATUSBAR:
+   def __init__(self,parent):
+      self.parent=parent
+      self.frame = Tkinter.Frame(parent,bd=1, relief=Tkinter.RAISED)
+      self.frame.pack(side=Tkinter.BOTTOM, fill=Tkinter.X)
+      self.label = Tkinter.Label (self.frame,
+                                        fg='black',
+                                        text='',
+                                        justify='left',
+                                        relief='sunken',
+                                        bg='gray95')
+      self.label.pack(side='left',expand=1,fill='both')
+
+   def showtext(self,texte):
+      if len(texte)>150 :
+          texte_infos=texte[0:150]
+      else :
+          texte_infos=texte
+      self.label.configure(text=texte_infos)
+
+class Appli:
+   def __init__(self):
+      self.CONFIGURATION=CONFIG()
+      self.root=Tkinter.Tk()
+      Pmw.initialise(self.root)
+      self.init()
+
+   def init(self):
+      self.statusbar=STATUSBAR(self.root)
+
+   def affiche_infos(self,message):
+      self.statusbar.showtext(message)
+      print message
+      return
+
+   def efface_aide(self,event):
+      return
+
+   def affiche_aide(self,event,aide):
+      print aide
+      return
+
diff --git a/Exemples/ex21/__init__.py b/Exemples/ex21/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex21/ahlv100a.comm b/Exemples/ex21/ahlv100a.comm
new file mode 100755 (executable)
index 0000000..2cb6159
--- /dev/null
@@ -0,0 +1,354 @@
+# MODIF  DATE 11/12/2001   AUTEUR DURAND C.DURAND 
+# TITRE GUIDE D'ONDE A SORTIE ANECHOIQUE (ONDES PLANES) E.F. CLASSIQUES
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+#  MODELISATION 'ACOUSTIQUE' AVEC ELEMENTS HEXA20 ET FACE8
+#  GUIDE D'ONDE ACOUSTIQUE EN E.F. CLASSIQUES
+#
+
+DEBUT(CODE=_F( NOM = 'AHLV100A')  )
+
+F=500.
+
+MAIL=LIRE_MAILLAGE( )
+
+AIR=DEFI_MATERIAU( FLUIDE=_F( RHO = 1.3, CELE_C = ('RI',343.,0.,)))
+
+CHAMPMAT=AFFE_MATERIAU(  MAILLAGE=MAIL,
+                                 AFFE=_F( TOUT = 'OUI',  MATER = AIR) )
+
+GUIDE=AFFE_MODELE(  MAILLAGE=MAIL,     VERIF='MAILLE',
+                            AFFE=_F( TOUT = 'OUI', MODELISATION = '3D',
+                                     PHENOMENE = 'ACOUSTIQUE') )
+
+CHARACOU=AFFE_CHAR_ACOU(      MODELE=GUIDE,
+                 VITE_FACE=_F( GROUP_MA = 'ENTREE', VNOR = ('RI',0.014,0.,)))
+
+IMPEACOU=AFFE_CHAR_ACOU(      MODELE=GUIDE,
+                 IMPE_FACE=_F( GROUP_MA = 'SORTIE', IMPE = ('RI',445.9,0.,)))
+
+MACRO_MATR_ASSE(
+                      MODELE=GUIDE,         CHARGE=IMPEACOU,
+                      CHAM_MATER=CHAMPMAT,
+                      NUME_DDL=CO("NUM"),MATR_ASSE=(
+                      _F(  MATRICE = CO("MATASK"), OPTION = 'RIGI_ACOU'),
+                                _F(  MATRICE = CO("MATASM"), OPTION = 'MASS_ACOU'),
+                                _F(  MATRICE = CO("MATASI"), OPTION = 'AMOR_ACOU'))
+                   )
+
+#
+
+VECTELEM=CALC_VECT_ELEM(   OPTION='CHAR_ACOU',  CHAM_MATER=CHAMPMAT,
+                                CHARGE=CHARACOU )
+
+#
+# IMPRESSION DU VECT_ELEM COMPLEXE VECTELEM SELON LE GRAIN MAILLE
+# 
+
+IMPR_MATRICE(   MATR_ELEM=_F(  MATRICE = VECTELEM,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'MAILLE'))
+
+VECTASS=ASSE_VECTEUR(  VECT_ELEM=VECTELEM,   NUME_DDL=NUM )
+
+#
+#  ____________________CALCUL DES MODES_________________________________
+#
+
+MATASKR=COMB_MATR_ASSE(    COMB_R=_F( MATR_ASSE = MATASK,  PARTIE = 'REEL', COEF_R = 1.))
+
+MATASMR=COMB_MATR_ASSE(    COMB_R=_F( MATR_ASSE = MATASM,  PARTIE = 'REEL', COEF_R = 1.))
+
+#
+
+MODES=MODE_ITER_SIMULT(      MATR_A=MATASKR,
+                                     MATR_B=MATASMR,
+                                  CALC_FREQ=_F( OPTION = 'BANDE',
+                                             FREQ = ( 1., 1000.,))
+                               )
+
+TEST_RESU(RESU=(_F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-4,
+                    NUME_ORDRE = 1,  VALE = 171.5),
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-4,
+                    NUME_ORDRE = 2,  VALE = 343.), 
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-3,
+                    NUME_ORDRE = 3,  VALE = 514.5),
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-2,
+                    NUME_ORDRE = 4,  VALE = 686.),            
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-3,
+                    NUME_ORDRE = 5,  VALE = 857.5),     
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 6,  VALE = 857.5),      
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 7,  VALE = 874.482),      
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 8,  VALE = 923.556))
+             )
+
+#  ----------------------CALCUL DECOMPOSE-------------------------------
+#
+
+MATRES=COMB_MATR_ASSE( COMB_C=(   _F( MATR_ASSE = MATASK,
+                                        COEF_R = 1.),
+                                       _F( MATR_ASSE = MATASM,
+                                        COEF_R = -9869604.4),
+                                       _F( MATR_ASSE = MATASI,
+                                        COEF_C = ('RI',0.,3141.5926,)))
+                            )
+
+#
+# IMPRESSION DE LA MATRICE COMPLEXE MATRES SELON LE GRAIN NOEUD
+# 
+
+IMPR_MATRICE(   MATR_ASSE=_F(  MATRICE = MATRES,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'NOEUD',
+                               OPTION = 'LIGNE'))
+
+#
+# IMPRESSION DE LA MATRICE COMPLEXE MATRES SELON LE GRAIN VALEUR
+# 
+
+IMPR_MATRICE(   MATR_ASSE=_F(  MATRICE = MATRES,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'VALEUR',
+                               OPTION = 'LIGNE'))
+
+VECRES=COMB_CHAM_NO(    COMB_C=_F( CHAM_NO = VECTASS,
+                                      COEF_C = ('RI',0.,-3141.5926,))
+                            )
+
+MATRES=FACT_LDLT( reuse=MATRES,  MATR_ASSE=MATRES )
+
+VECRES=RESO_LDLT( reuse=VECRES,  MATR_FACT=MATRES,
+                             CHAM_NO=VECRES
+                        )
+
+TEST_RESU(CHAM_NO=(
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO763', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)))
+             )
+
+CHNODBEL=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_DBEL'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'DB',  VALE = 109.9))
+             )
+
+#
+
+PREEL=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_REEL'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE = -6.2426),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE = -6.2426),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE = 6.02368),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'PRES', VALE = 6.02368))
+             )
+
+PIMAG=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_IMAG'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE = 0.,
+            CRITERE = 'ABSOLU'),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'PRES', VALE = 0.,
+            CRITERE = 'ABSOLU'),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA57',
+            NOEUD = 'NO751', NOM_CMP = 'PRES', VALE = 1.6387, PRECISION = 3.3E-3),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA57',
+            NOEUD = 'NO763', NOM_CMP = 'PRES', VALE = 1.6387, PRECISION = 3.3E-3))
+             )
+
+#-----------------------CALCUL HARMONIQUE-------------------------------
+
+
+PRESHARM=DYNA_LINE_HARM( MATR_MASS=MATASM,  MATR_RIGI=MATASK,
+                             MATR_AMOR=MATASI,
+                               FREQ=F,
+                             EXCIT=_F( VECT_ASSE = VECTASS,  COEF_MULT = -1.,
+                                    PUIS_PULS = 1,  PHAS_DEG = 90.))
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO1',  NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO763',  NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='INTE_ELNO_ACTI'
+           )
+
+TEST_RESU(RESU=(
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',  NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA57',
+            NOEUD = 'NO751', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA57',
+            NOEUD = 'NO763', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='INTE_ELNO_REAC'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_DBEL'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',  NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'DB',  VALE = 109.9))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_REEL'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'PRES',  VALE = -6.2426),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'PRES',  VALE = -6.2426),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'PRES',  VALE = 6.02368),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'PRES',  VALE = 6.02368))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_IMAG'
+           )
+
+TEST_RESU(RESU=(
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',  NOM_CMP = 'PRES',  VALE = 0.,
+                                     CRITERE = 'ABSOLU'),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'PRES',  VALE = 0.,
+                                     CRITERE = 'ABSOLU'),
+          _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+           MAILLE = 'MA57',
+           NOEUD = 'NO751', NOM_CMP = 'PRES',  VALE = 1.6387, PRECISION = 3.3E-3,
+                                     CRITERE = 'RELATIF'),
+          _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+           MAILLE = 'MA57',
+           NOEUD = 'NO763',  NOM_CMP = 'PRES',  VALE = 1.6387, PRECISION = 3.3E-3))
+             )
+
+FIN()
+#
+#
diff --git a/Exemples/ex21/check.py b/Exemples/ex21/check.py
new file mode 100644 (file)
index 0000000..ee19973
--- /dev/null
@@ -0,0 +1,15 @@
+"""
+   Script Python permettant de faire une verification avec
+   l'outil pychecker
+"""
+
+import sys
+sys.path[:0]=['../..','../../Editeur','../../..']
+
+from Accas import *
+#from Cata.cata import *
+
+from Appli import Appli
+from jdcdisplay import JDCDISPLAY
+from treeitemincanvas import TREEITEMINCANVAS
+
diff --git a/Exemples/ex21/main.py b/Exemples/ex21/main.py
new file mode 100644 (file)
index 0000000..957bcab
--- /dev/null
@@ -0,0 +1,42 @@
+"""
+   Construction d'un item JDC
+"""
+
+import prefs
+
+import sys
+sys.path[:0]=['../..','../../Editeur','../../..']
+
+from Cata import cata
+from analyse_catalogue import analyse_catalogue
+
+from Appli import Appli
+import jdcdisplay
+
+f=open('ahlv100a.comm','r')
+text=f.read()
+f.close()
+
+fic_cata="../../../Cata/cata.py"
+cata_ordonne = analyse_catalogue(None,fic_cata)
+j=cata.JdC(procedure=text,cata=cata,nom="ahlv100a",
+            cata_ord_dico=cata_ordonne.dico)
+j.compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+j.exec_compile()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+a=Appli()
+
+d=jdcdisplay.JDCDISPLAY(j,"ahlv100a",appli=a,parent=a.root)
+
+a.root.mainloop()
+
+
+
+
diff --git a/Exemples/ex21/prefs.py b/Exemples/ex21/prefs.py
new file mode 100644 (file)
index 0000000..380b75f
--- /dev/null
@@ -0,0 +1,13 @@
+import os
+
+# REPINI sert à localiser le fichier editeur.ini
+REPINI=os.path.dirname(os.path.abspath(__file__))
+
+# ICONDIR sert à localiser le répertoire contenant les icones
+ICONDIR=os.path.join(REPINI,'../..','Editeur','icons')
+
+# CODE_PATH sert à localiser Accas et Cata (si pas infos dans editeur.ini)
+#CODE_PATH = os.path.join(REPINI,'..')
+
+# INSTALLDIR sert à localiser faqs.txt et les modules Eficas
+#INSTALLDIR=os.path.join(REPINI,'..','Editeur')
diff --git a/Exemples/ex22/README b/Exemples/ex22/README
new file mode 100644 (file)
index 0000000..615c058
--- /dev/null
@@ -0,0 +1,3 @@
+Faire ../../Aster/eficas_aster.py
+demander le catalogue v5
+et demander l'ouverture du fichier totalmod.comm dans ce répertoire
diff --git a/Exemples/ex22/__init__.py b/Exemples/ex22/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex22/main.py b/Exemples/ex22/main.py
new file mode 100644 (file)
index 0000000..ba2fdd3
--- /dev/null
@@ -0,0 +1,33 @@
+"""
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+from Cata import cata_STA5
+cata=cata_STA5
+
+import convert
+c=convert.plugins['asterv5']()
+c.readfile('totalmod.comm')
+text=c.convert('exec')
+
+j=cata.JdC(procedure=text,cata=cata,nom="totalmod")
+j.analyse()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+# On récupère les plugins de la famille generator
+import generator
+
+g=generator.plugins['asterv5']()
+text= g.gener(j,format='beautifie')
+g.writefile('titi.comm')
+
+g=generator.plugins['python']()
+text= g.gener(j,format='beautifie')
+g.writefile('toto.comm')
+
+
+
diff --git a/Exemples/ex22/main2.py b/Exemples/ex22/main2.py
new file mode 100644 (file)
index 0000000..e41990d
--- /dev/null
@@ -0,0 +1,27 @@
+"""
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+from Cata import cata_STA5
+cata=cata_STA5
+
+import convert
+c=convert.plugins['asterv5']()
+c.readfile('titi.comm')
+text=c.convert('exec')
+
+j=cata.JdC(procedure=text,cata=cata,nom="totalmod")
+j.analyse()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+# On récupère les plugins de la famille generator
+import generator
+
+g=generator.plugins['asterv5']()
+textout= g.gener(j,format='beautifie')
+g.writefile('tutu.comm')
+
diff --git a/Exemples/ex22/main3.py b/Exemples/ex22/main3.py
new file mode 100644 (file)
index 0000000..4406117
--- /dev/null
@@ -0,0 +1,27 @@
+"""
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+from Cata import cata_STA5
+cata=cata_STA5
+
+import convert
+c=convert.plugins['python']()
+c.readfile('toto.comm')
+text=c.convert('exec')
+
+j=cata.JdC(procedure=text,cata=cata,nom="totalmod")
+j.analyse()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+# On récupère les plugins de la famille generator
+import generator
+
+g=generator.plugins['python']()
+textout= g.gener(j,format='beautifie')
+g.writefile('tyty.comm')
+
diff --git a/Exemples/ex22/titi.comm b/Exemples/ex22/titi.comm
new file mode 100644 (file)
index 0000000..ca0b5d1
--- /dev/null
@@ -0,0 +1,1610 @@
+
+
+DEBUT();
+% LECTURE DES PARAMETRES 
+%
+% LECTURE DES TEMPS 
+%CYCLE 1
+% LECTURE DU MAILLAGE ET DEFINITIONS DES PROPRIETES ELEMENTS FINIS
+
+
+PRE_GIBI();
+%
+
+
+MA1=LIRE_MAILLAGE();
+%
+
+
+&MA1=DEFI_GROUP(CREA_GROUP_NO:(GROUP_MA:(FIXATI,APPUI,LIAS_1,LIAS_2,
+                                          EBGUIDE,MAINTIEN,
+                                          MAIN_SUP,EMBO_SUP,
+                                          TUB_GUID,GRILLES,
+                                          EMBO_INF,PIEDS,
+                                          CRAYONS),)
+                MAILLAGE:MA1);
+%
+% AFFECTATION DU MODELE
+%
+
+
+MO1=AFFE_MODELE(AFFE:(GROUP_MA:CRAYONS
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'POU_D_E')
+                AFFE:(GROUP_MA:TUB_GUID
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'POU_D_E')
+                AFFE:(GROUP_MA:(EMBO_SUP,EMBO_INF)
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'DKT')
+                AFFE:(GROUP_MA:PIEDS
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'POU_D_E')
+                AFFE:(GROUP_MA:GRILLES
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'POU_D_E')
+                AFFE:(GROUP_MA:LI_GR_CR
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'DIS_TR')
+                AFFE:(GROUP_MA:LI_GR_GU
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'DIS_TR')
+                AFFE:(GROUP_MA:MAINTIEN
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'POU_D_E')
+                MAILLAGE:MA1);
+%
+% AFFECTATION DES CARACTERISTIQUES GEOMETRIQUES ELEMENTAIRES
+%
+
+
+CARA1=AFFE_CARA_ELEM(MODELE:MO1
+                     COQUE:(ANGL_REP:90.0
+                            GROUP_MA:EBOINF
+                            EPAIS:2.0)
+                     COQUE:(ANGL_REP:90.0
+                            GROUP_MA:EBOSUP
+                            EPAIS:3.0)
+                     DISCRET:(VALE:(1.0,2.0,3.0,4.0,5.0,6.0)
+                              REPERE:'LOCAL'
+                              CARA:'K_TR_D_L'
+                              GROUP_MA:ELASTI)
+                     DISCRET:(VALE:(1.0,2.0,3.0,4.0,5.0,6.0)
+                              REPERE:'LOCAL'
+                              CARA:'K_TR_D_L'
+                              GROUP_MA:RIGID)
+                     ORIENTATION:(VALE:(1.0,0.0,0.0)
+                                  CARA:'VECT_Y'
+                                  GROUP_MA:(GRIL_I,GRIL_E))
+                     ORIENTATION:(VALE:(0.0,1.0,0.0)
+                                  CARA:'VECT_Y'
+                                  GROUP_MA:(MAINTI_Y))
+                     ORIENTATION:(VALE:(0.0,0.0,1.0)
+                                  CARA:'VECT_Y'
+                                  GROUP_MA:(MAINTI_Z))
+                     ORIENTATION:(VALE:(0.0,1.0,0.0)
+                                  CARA:'VECT_Y'
+                                  GROUP_MA:(PI_PLE,PI_TRO))
+                     ORIENTATION:(VALE:(1.0,0.0,0.0)
+                                  CARA:'VECT_Y'
+                                  GROUP_MA:(ELASTI,RIGID))
+                     POUTRE:(SECTION:'CERCLE'
+                             GROUP_MA:CRAY
+                             VALE:(3.0,3.0)
+                             CARA:('R','EP'))
+                     POUTRE:(SECTION:'CERCLE'
+                             GROUP_MA:GUID
+                             VALE:(3.0,3.0)
+                             CARA:('R','EP'))
+                     POUTRE:(SECTION:'CERCLE'
+                             GROUP_MA:RETRE
+                             VALE:(3.0,3.0)
+                             CARA:('R','EP'))
+                     POUTRE:(SECTION:'RECTANGLE'
+                             GROUP_MA:(GRIL_I)
+                             VALE:(3.0,3.0)
+                             CARA:('HY','HZ'))
+                     POUTRE:(SECTION:'RECTANGLE'
+                             GROUP_MA:(GRIL_E)
+                             VALE:(3.0,3.0)
+                             CARA:('HY','HZ'))
+                     POUTRE:(SECTION:'RECTANGLE'
+                             GROUP_MA:(MAINTI_Y,MAINTI_Z)
+                             VALE:(3.0,3.0)
+                             CARA:('HY','HZ'))
+                     POUTRE:(SECTION:'GENERALE'
+                             GROUP_MA:PI_PLE
+                             VALE:(1.0,2.0,3.0,4.0)
+                             CARA:('A','IZ','IY','JX'))
+                     POUTRE:(SECTION:'GENERALE'
+                             GROUP_MA:PI_TRO
+                             VALE:(1.0,2.0,3.0,4.0)
+                             CARA:('A','IZ','IY','JX')));
+%
+% DEFINITION DES CHARGES ET CONDITIONS LIMITES
+% DEFINITION DES TEMPERATURES NODALES EVOLUTIVES
+%
+
+
+F_TP1_1=DEFI_FONCTION(NOM_RESU:'TEMP'
+                      PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'X'
+                      VALE:(0.0,1.0,5.0,4.0)
+                      PROL_DROIT:'CONSTANT');
+
+F_TP2_1=DEFI_FONCTION(NOM_RESU:'TEMP'
+                      PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'X'
+                      VALE:(0.0,1.0,5.0,4.0)
+                      PROL_DROIT:'CONSTANT');
+
+F_TP3_1=DEFI_FONCTION(NOM_RESU:'TEMP'
+                      PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'X'
+                      VALE:(0.0,1.0,5.0,4.0)
+                      PROL_DROIT:'CONSTANT');
+
+CHTEM1_1=AFFE_CHAM_NO(GRANDEUR:'TEMP_F'
+                      AFFE:(FONCTION:F_TP1_1
+                            GROUP_NO:
+                            
+                                       (MAINTIEN,PIEDS,
+                                       TUB_GUID,GRILLES,
+                                       CRAYONS),
+                            NOM_CMP:'TEMP')
+                      AFFE:(FONCTION:(F_TP1_1,F_TP1_1,F_TP1_1)
+                            GROUP_NO:(EMBO_SUP,EMBO_INF)
+                            NOM_CMP:('TEMP_INF','TEMP','TEMP_SUP'))
+                      MAILLAGE:MA1);
+
+CHTEM2_1=AFFE_CHAM_NO(GRANDEUR:'TEMP_F'
+                      AFFE:(FONCTION:F_TP2_1
+                            GROUP_NO:
+                            
+                                       (MAINTIEN,PIEDS,
+                                       TUB_GUID,GRILLES,
+                                       CRAYONS),
+                            NOM_CMP:'TEMP')
+                      AFFE:(FONCTION:(F_TP2_1,F_TP2_1,F_TP2_1)
+                            GROUP_NO:(EMBO_SUP,EMBO_INF)
+                            NOM_CMP:('TEMP_INF','TEMP','TEMP_SUP'))
+                      MAILLAGE:MA1);
+
+CHTEM3_1=AFFE_CHAM_NO(GRANDEUR:'TEMP_F'
+                      AFFE:(FONCTION:F_TP3_1
+                            GROUP_NO:(MAINTIEN,PIEDS,TUB_GUID,GRILLES)
+                            NOM_CMP:'TEMP')
+                      AFFE:(FONCTION:(F_TP3_1,F_TP3_1,F_TP3_1)
+                            GROUP_NO:(EMBO_SUP,EMBO_INF)
+                            NOM_CMP:('TEMP_INF','TEMP','TEMP_SUP'))
+                      AFFE:(FONCTION:F_TP3_1
+                            GROUP_NO:CRAYONS
+                            NOM_CMP:'TEMP')
+                      MAILLAGE:MA1);
+
+CHTH_1=CREA_RESU(NOM_CHAM:'TEMP'
+                 CHAM_GD:(INST:0.0
+                          CHAM_NO:CHTEM1_1)
+                 CHAM_GD:(INST:1000.0
+                          CHAM_NO:CHTEM1_1)
+                 CHAM_GD:(INST:2000.0
+                          CHAM_NO:CHTEM2_1)
+                 CHAM_GD:(INST:3000.0
+                          CHAM_NO:CHTEM3_1)
+                 CHAM_GD:(INST:4000.0
+                          CHAM_NO:CHTEM3_1)
+                 CHAM_GD:(INST:5000.0
+                          CHAM_NO:CHTEM2_1)
+                 CHAM_GD:(INST:6000.0
+                          CHAM_NO:CHTEM1_1)
+                 CHAM_GD:(INST:7000.0
+                          CHAM_NO:CHTEM1_1)
+                 TYPE_RESU:'EVOL_THER');
+% CHARGEMENT: CHARGES THERMO-MECANIQUES
+% ----------------------------------------
+
+
+THERM_1=AFFE_CHAR_MECA(MODELE:MO1
+                       TEMP_CALCULEE:CHTH_1);
+% DEFINITION DES CONDITIONS LIMITES
+%            DES CONDITIONS DE CONTACT
+%
+% CHARGEMENT: PESANTEUR
+%
+
+
+PESANT_1=AFFE_CHAR_MECA(MODELE:MO1
+                        PESANTEUR:(9.8100000000000005,-1.0,0.0,0.0));
+%
+% CONDITIONS AUX LIMITES
+%
+
+
+CL_PER_1=AFFE_CHAR_MECA(MODELE:MO1
+                        DDL_IMPO:(DZ:0.0
+                                  DX:0.0
+                                  DY:0.0
+                                  GROUP_NO:FIXATI
+                                  DRZ:0.0
+                                  DRX:0.0
+                                  DRY:0.0)
+                        DDL_IMPO:(DX:0.0
+                                  GROUP_NO:APPUI)
+                        DDL_IMPO:(DZ:0.0
+                                  DY:0.0
+                                  GROUP_NO:EBGUIDE
+                                  DRZ:0.0
+                                  DRX:0.0
+                                  DRY:0.0)
+                        DDL_IMPO:(GROUP_NO:(LIAS_1,LIAS_2)
+                                  DRX:0.0)
+                        LIAISON_GROUP:(COEF_MULT_1:1.0
+                                       DDL_1:'DX'
+                                       COEF_MULT_2:-1.0
+                                       COEF_IMPO:0.0
+                                       GROUP_NO_1:LIAS_1
+                                       GROUP_NO_2:LIAS_2
+                                       DDL_2:'DX')
+                        LIAISON_GROUP:(COEF_MULT_1:1.0
+                                       DDL_1:'DY'
+                                       COEF_MULT_2:-1.0
+                                       COEF_IMPO:0.0
+                                       GROUP_NO_1:LIAS_1
+                                       GROUP_NO_2:LIAS_2
+                                       DDL_2:'DY')
+                        LIAISON_GROUP:(COEF_MULT_1:1.0
+                                       DDL_1:'DZ'
+                                       COEF_MULT_2:-1.0
+                                       COEF_IMPO:0.0
+                                       GROUP_NO_1:LIAS_1
+                                       GROUP_NO_2:LIAS_2
+                                       DDL_2:'DZ')
+                        LIAISON_GROUP:(COEF_MULT_1:1.0
+                                       DDL_1:'DRY'
+                                       COEF_MULT_2:-1.0
+                                       COEF_IMPO:0.0
+                                       GROUP_NO_1:LIAS_1
+                                       GROUP_NO_2:LIAS_2
+                                       DDL_2:'DRY')
+                        LIAISON_GROUP:(COEF_MULT_1:1.0
+                                       DDL_1:'DRZ'
+                                       COEF_MULT_2:-1.0
+                                       COEF_IMPO:0.0
+                                       GROUP_NO_1:LIAS_1
+                                       GROUP_NO_2:LIAS_2
+                                       DDL_2:'DRZ'));
+%
+
+
+CL_CTC=AFFE_CHAR_MECA(INFO:1
+                      MODELE:MO1
+                      CONTACT:(GROUP_MA_1:EBOINF
+                               VECT_NORM_2:(-1.0,0.0,0.0)
+                               APPARIEMENT:'NODAL'
+                               GROUP_MA_2:MCRBAS));
+%                            
+% DEPLACEMENT DU SYSTEME DE MAINTIEN
+%
+
+
+CLDI_F1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'INST'
+                      VALE:
+                      (0.0,0.0,1000.0,
+                             0.10000000000000001,2000.0,
+                             0.20000000000000001,3000.0,
+                             0.20000000000000001,4000.0,
+                             0.20000000000000001,5000.0,
+                             0.20000000000000001,6000.0,
+                             0.10000000000000001,7000.0,
+                             0.10000000000000001),
+                      PROL_DROIT:'CONSTANT');
+
+CL_DI_1=AFFE_CHAR_MECA(MODELE:MO1
+                       DDL_IMPO:(DX:-1.0
+                                 GROUP_NO:MAIN_SUP));
+% DEFINITION DES FORCES EXTERIEURES
+%
+% FONCTION MULTIPLICATIVE DE LA FORCE HYDRODYNAMIQUE NORMEE
+%
+
+
+HYDR_F1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'INST'
+                      VALE:
+                      (0.0,0.0,1000.0,
+                             0.10000000000000001,2000.0,
+                             0.20000000000000001,3000.0,
+                             0.20000000000000001,4000.0,
+                             0.20000000000000001,5000.0,
+                             0.20000000000000001,6000.0,
+                             0.10000000000000001,7000.0,
+                             0.10000000000000001),
+                      PROL_DROIT:'CONSTANT');
+%
+% PROFIL DES FORCES HYDRODYNAMIQUES TUBES GUIDES A FROID
+%
+
+
+HYFRTU_1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'X'
+                       VALE:(0.0,1.0,5.0,2.0)
+                       PROL_DROIT:'CONSTANT');
+%
+% PROFIL DES FORCES HYDRODYNAMIQUES CRAYON A FROID
+%
+
+
+HYFRCR_1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'X'
+                       VALE:(0.0,1.0,5.0,2.0)
+                       PROL_DROIT:'CONSTANT');
+%
+% CHARGEMENT : FORCES HYDRODYNAMIQUES 
+%
+
+
+HYDR_1=AFFE_CHAR_MECA(FORCE_POUTRE:(GROUP_MA:(GRIL10)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL1)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL2)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL3)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL4)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL5)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL6)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL7)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL8)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL9)
+                                    FX:10.0)
+                      MODELE:MO1
+                      FORCE_COQUE:(FX:10.0
+                                   GROUP_MA:EBOSUP)
+                      FORCE_COQUE:(FX:10.0
+                                   GROUP_MA:EBOINF));
+
+TOTO_1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'X'
+                     VALE:(0.0,10.0,5.0,10.0)
+                     PROL_DROIT:'CONSTANT');
+%                         
+
+
+FOHYDR_1=AFFE_CHAR_MECA_F(FORCE_POUTRE:(GROUP_MA:(GUID)
+                                        FX:TOTO_1)
+                          FORCE_POUTRE:(GROUP_MA:CRAY
+                                        FX:TOTO_1)
+                          MODELE:MO1);
+%
+% PROFIL DES FORCES D'ARCHIMEDE TUBE GUIDE 
+%
+
+
+ARFRTU_1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'X'
+                       VALE:(0.0,10.0,5.0,10.0)
+                       PROL_DROIT:'CONSTANT');
+%
+% PROFIL DES FORCES D'ARCHIMEDE CRAYON 
+%
+
+
+ARFRCR_1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'X'
+                       VALE:(0.0,10.0,5.0,10.0)
+                       PROL_DROIT:'CONSTANT');
+%
+% FONCTION MULTIPLICATIVE DE LA FORCE D'ARCHIMEDE
+%
+
+
+ARCH_F1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'INST'
+                      VALE:
+                      (0.0,0.0,1000.0,
+                             0.10000000000000001,2000.0,
+                             0.20000000000000001,3000.0,
+                             0.20000000000000001,4000.0,
+                             0.20000000000000001,5000.0,
+                             0.20000000000000001,6000.0,
+                             0.10000000000000001,7000.0,
+                             0.10000000000000001),
+                      PROL_DROIT:'CONSTANT');
+%
+%
+% CHARGEMENT : FORCES D'ARCHIMEDE 
+% ----------------------------------------
+%
+
+
+ARCH_1=AFFE_CHAR_MECA(FORCE_POUTRE:(GROUP_MA:MAINTIEN
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL10)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL1)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL2)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL3)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL4)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL5)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL6)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL7)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL8)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL9)
+                                    FX:10.0)
+                      MODELE:MO1
+                      FORCE_COQUE:(FX:10.0
+                                   GROUP_MA:EBOSUP)
+                      FORCE_COQUE:(FX:10.0
+                                   GROUP_MA:EBOINF));
+
+FOARCH_1=AFFE_CHAR_MECA_F(FORCE_POUTRE:(GROUP_MA:GUID
+                                        FX:ARCH_F1)
+                          FORCE_POUTRE:(GROUP_MA:CRAY
+                                        FX:ARCH_F1)
+                          MODELE:MO1);
+%
+% 
+% FORCE DE SERRAGE DE LA LIAISON GRILLE - CRAYON 
+%
+%
+%
+%
+%
+% DEFINITION DE LA LISTE D'INSTANTS
+%
+
+
+L_FRIG=DEFI_LIST_REEL(INTERVALLE:(JUSQU_A:1000.0
+                                  NOMBRE:100)
+                      DEBUT:0.0);
+%
+% INRTERPRETATION DES FONCTIONS
+%
+
+
+F1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F2=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F3=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F4=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F5=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F6=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F7=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F8=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F9=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F10=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                  NOM_PARA:'INST'
+                  VALE:(0.0,0.0,4.3200E4,0.0)
+                  PROL_DROIT:'CONSTANT');
+
+FRIG1=CALC_FONC_INTERP(FONCTION:F1
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG2=CALC_FONC_INTERP(FONCTION:F2
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG3=CALC_FONC_INTERP(FONCTION:F3
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG4=CALC_FONC_INTERP(FONCTION:F4
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG5=CALC_FONC_INTERP(FONCTION:F5
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG6=CALC_FONC_INTERP(FONCTION:F6
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG7=CALC_FONC_INTERP(FONCTION:F7
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG8=CALC_FONC_INTERP(FONCTION:F8
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG9=CALC_FONC_INTERP(FONCTION:F9
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG10=CALC_FONC_INTERP(FONCTION:F10
+                        PROL_DROIT:'CONSTANT'
+                        INTERPOL:'LIN'
+                        PROL_GAUCHE:'CONSTANT'
+                        LIST_PARA:L_FRIG);
+%
+% DEFINITION DU FLUX NEUTRONIQUE RADIAL
+
+
+FLUX_F1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'INST'
+                      VALE:
+                      (0.0,0.0,4.3200E4,0.0,
+                             9.74520E5,4.53280E5,2.638800E6,
+                             2.077850E6,4.087800E6,3.512790E6,
+                             5.428440E6,4.856770E6,7.245000E6,
+                             6.676270E6,8.853480E6,8.279770E6,
+                             1.0460900E7,9.872610E6,1.2202900E7,
+                             1.1586900E7,1.3944600E7,1.3295200E7,
+                             1.4143700E7,1.3490200E7,1.5563200E7,
+                             1.4875300E7,1.7236100E7,1.6506900E7,
+                             1.7948200E7,1.7199200E7,1.8190100E7,
+                             1.7433400E7,1.8193700E7,1.7435200E7,
+                             1.8197300E7,1.7435200E7,1.8200900E7,
+                             1.7435200E7),
+                      PROL_DROIT:'CONSTANT');
+% DEFINITION DU FLUX AXIAL POUR LE CYCLE 1
+
+
+FLUXAX1=LIRE_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      UNITE:60
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             3.8032834757835002E-07,
+                             -0.088200000000000001,
+                             3.8083689458688999E-07,
+                             -0.075600000000000001,
+                             3.8296082621083001E-07,-0.063,
+                             3.858400997151E-07,-0.0504,
+                             3.8946100427349999E-07,-0.0378,
+                             3.9259455128205E-07,-0.0252,
+                             3.9258457977207998E-07,-0.0126,
+                             3.9294106125356001E-07,0.0,
+                             3.9399554843304999E-07,0.0126,
+                             3.9293233618234E-07,0.0252,
+                             3.9256712962963002E-07,0.0378,
+                             3.9256712962963002E-07,0.0504,
+                             3.8942610398860001E-07,0.063,
+                             3.8579522792023001E-07,
+                             0.075600000000000001,
+                             3.8290972222222002E-07,
+                             0.088200000000000001,
+                             3.8077706552707E-07,0.1008,
+                             3.8026103988603998E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_2=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             4.3595566239316001E-07,
+                             -0.088200000000000001,
+                             4.3866542022792E-07,
+                             -0.075600000000000001,
+                             4.4331463675214E-07,-0.063,
+                             4.4911556267806002E-07,-0.0504,
+                             4.5750658831909E-07,-0.0378,
+                             4.6647222222221997E-07,-0.0252,
+                             4.6002938034188002E-07,-0.0126,
+                             4.6004309116809001E-07,0.0,
+                             4.6686235754985997E-07,0.0126,
+                             4.6003311965811999E-07,0.0252,
+                             4.6000943732193999E-07,0.0378,
+                             4.6643981481481001E-07,0.0504,
+                             4.5746420940171002E-07,0.063,
+                             4.4906445868945999E-07,
+                             0.075600000000000001,
+                             4.4325356125356E-07,
+                             0.088200000000000001,
+                             4.3859686609687001E-07,0.1008,
+                             4.3587838319088001E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_3=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             4.9431891025640996E-07,
+                             -0.088200000000000001,
+                             5.0005128205127998E-07,
+                             -0.075600000000000001,
+                             5.1337197293447004E-07,-0.063,
+                             5.2915313390313001E-07,-0.0504,
+                             5.3788069800570004E-07,-0.0378,
+                             5.3504629629630004E-07,-0.0252,
+                             5.3221189458688998E-07,-0.0126,
+                             5.3136431623932E-07,0.0,
+                             5.3135870726495999E-07,0.0126,
+                             5.3135309829059998E-07,0.0252,
+                             5.3218696581197002E-07,0.0378,
+                             5.3500827991452996E-07,0.0504,
+                             5.3782959401709E-07,0.063,
+                             5.2909205840456002E-07,
+                             0.075600000000000001,
+                             5.1330217236466999E-07,
+                             0.088200000000000001,
+                             4.9997150997151001E-07,0.1008,
+                             4.9423165954416005E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_4=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             5.5489957264956999E-07,
+                             -0.088200000000000001,
+                             5.6477884615384998E-07,
+                             -0.075600000000000001,
+                             5.9007781339030998E-07,-0.063,
+                             5.9726415598291003E-07,-0.0504,
+                             6.0445049857550001E-07,-0.0378,
+                             5.9840776353275996E-07,-0.0252,
+                             5.8440651709402002E-07,-0.0126,
+                             5.8263906695157003E-07,0.0,
+                             5.9153240740741004E-07,0.0126,
+                             5.8262660256409999E-07,0.0252,
+                             5.8438034188033999E-07,0.0378,
+                             5.9836663105413E-07,0.0504,
+                             6.0439316239316004E-07,0.063,
+                             5.9719497863248E-07,
+                             0.075600000000000001,
+                             5.8999679487179001E-07,
+                             0.088200000000000001,
+                             5.6469159544159996E-07,0.1008,
+                             5.5480110398860005E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_5=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             6.1267200854701004E-07,
+                             -0.088200000000000001,
+                             6.2962357549858005E-07,
+                             -0.075600000000000001,
+                             6.5655413105413E-07,-0.063,
+                             6.6164583333332999E-07,-0.0504,
+                             6.5190242165241998E-07,-0.0378,
+                             6.5212678062678005E-07,-0.0252,
+                             6.3746616809116999E-07,-0.0126,
+                             6.3547435897436004E-07,0.0,
+                             6.4509686609687001E-07,0.0126,
+                             6.3546064814814995E-07,0.0252,
+                             6.3743625356125E-07,0.0378,
+                             6.5207941595442004E-07,0.0504,
+                             6.5183885327634997E-07,0.063,
+                             6.6156980056979999E-07,
+                             0.075600000000000001,
+                             6.5646563390312997E-07,
+                             0.088200000000000001,
+                             6.2952386039885999E-07,0.1008,
+                             6.1256356837606998E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_6=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             6.5755128205127996E-07,
+                             -0.088200000000000001,
+                             6.8336253561253996E-07,
+                             -0.075600000000000001,
+                             6.9012072649573003E-07,-0.063,
+                             6.9687891737892E-07,-0.0504,
+                             6.9362571225071001E-07,-0.0378,
+                             6.9074768518518997E-07,-0.0252,
+                             6.8786965811965998E-07,-0.0126,
+                             6.8586413817664004E-07,0.0,
+                             6.8585603632478996E-07,0.0126,
+                             6.8584793447293003E-07,0.0252,
+                             6.8783600427350001E-07,0.0378,
+                             6.9069720441594996E-07,0.0504,
+                             6.9355840455840002E-07,0.063,
+                             6.9679789886040002E-07,
+                             0.075600000000000001,
+                             6.9002412749288002E-07,
+                             0.088200000000000001,
+                             6.8325035612536003E-07,0.1008,
+                             6.5743162393161998E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_7=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             6.9684526353276003E-07,
+                             -0.088200000000000001,
+                             7.1406606125356005E-07,
+                             -0.075600000000000001,
+                             7.3236502849003E-07,-0.063,
+                             7.2076442307691997E-07,-0.0504,
+                             7.1793500712250995E-07,-0.0378,
+                             7.2835648148147998E-07,-0.0252,
+                             7.1444747150996998E-07,-0.0126,
+                             7.1130893874644005E-07,0.0,
+                             7.2107727920227996E-07,0.0126,
+                             7.1129398148148005E-07,0.0252,
+                             7.1441257122506995E-07,0.0378,
+                             7.2830288461537998E-07,0.0504,
+                             7.1786396011395999E-07,0.063,
+                             7.2067841880341996E-07,
+                             0.075600000000000001,
+                             7.3226157407406997E-07,
+                             0.088200000000000001,
+                             7.1395138888889005E-07,0.1008,
+                             6.9671812678063005E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_8=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             7.3679362535612996E-07,
+                             -0.088200000000000001,
+                             7.5423130341880005E-07,
+                             -0.075600000000000001,
+                             7.7215633903134002E-07,-0.063,
+                             7.5865740740741005E-07,-0.0504,
+                             7.5547774216523998E-07,-0.0378,
+                             7.6662464387464E-07,-0.0252,
+                             7.5088461538461995E-07,-0.0126,
+                             7.4313924501423998E-07,0.0,
+                             7.486323005698E-07,0.0126,
+                             7.4312054843304996E-07,0.0252,
+                             7.5084722222222E-07,0.0378,
+                             7.6656730769230998E-07,0.0504,
+                             7.5540170940170999E-07,0.063,
+                             7.5856267806267997E-07,
+                             0.075600000000000001,
+                             7.7204415954415998E-07,
+                             0.088200000000000001,
+                             7.5410790598291005E-07,0.1008,
+                             7.3665776353275997E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_9=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             7.7370940170939995E-07,
+                             -0.088200000000000001,
+                             8.0144764957264998E-07,
+                             -0.075600000000000001,
+                             8.0374358974358997E-07,-0.063,
+                             8.0603952991452995E-07,-0.0504,
+                             8.0238372507123005E-07,-0.0378,
+                             7.9936672008546997E-07,-0.0252,
+                             7.9634971509971995E-07,-0.0126,
+                             7.8317361111111004E-07,0.0,
+                             7.8316426282051005E-07,0.0126,
+                             7.8315491452990996E-07,0.0252,
+                             7.9631107549857995E-07,0.0378,
+                             7.9930689102564003E-07,0.0504,
+                             8.0230270655270996E-07,0.063,
+                             8.0593856837607005E-07,
+                             0.075600000000000001,
+                             8.0362580128205003E-07,
+                             0.088200000000000001,
+                             8.0131303418803E-07,0.1008,
+                             7.7356356837607E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_10=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              7.9424198717948999E-07,
+                              -0.088200000000000001,
+                              8.1225925925926001E-07,
+                              -0.075600000000000001,
+                              8.3075516381766E-07,-0.063,
+                              8.1540651709402001E-07,-0.0504,
+                              8.1131071937321997E-07,-0.0378,
+                              8.2297489316238996E-07,-0.0252,
+                              8.0577403846154003E-07,-0.0126,
+                              7.9717236467236002E-07,0.0,
+                              8.0284615384615001E-07,0.0126,
+                              7.9715117521368004E-07,0.0252,
+                              8.0573165954416005E-07,0.0378,
+                              8.2291257122506995E-07,0.0504,
+                              8.1122845441594998E-07,0.063,
+                              8.1530306267805998E-07,
+                              0.075600000000000001,
+                              8.3063051994301999E-07,
+                              0.088200000000000001,
+                              8.1211841168090999E-07,0.1008,
+                              7.9408742877492998E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLY_1_11=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              8.1647845441594995E-07,
+                              -0.088200000000000001,
+                              8.3510648148147996E-07,
+                              -0.075600000000000001,
+                              8.5487873931623998E-07,-0.063,
+                              8.3969088319087998E-07,-0.0504,
+                              8.3502920227919995E-07,-0.0378,
+                              8.4651014957265E-07,-0.0252,
+                              8.2973931623932002E-07,-0.0126,
+                              8.2549269943020005E-07,0.0,
+                              8.3637909544160002E-07,0.0126,
+                              8.2547275641026002E-07,0.0252,
+                              8.2969319800569997E-07,0.0378,
+                              8.4644408831909002E-07,0.0504,
+                              8.3493945868945997E-07,0.063,
+                              8.3957995014244996E-07,
+                              0.075600000000000001,
+                              8.5474786324785998E-07,
+                              0.088200000000000001,
+                              8.3495690883191003E-07,0.1008,
+                              8.1631641737892005E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLY_1_12=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              8.3948272792023003E-07,
+                              -0.088200000000000001,
+                              8.7002546296295996E-07,
+                              -0.075600000000000001,
+                              8.7608564814814997E-07,-0.063,
+                              8.8214583333333004E-07,-0.0504,
+                              8.7589245014244996E-07,-0.0378,
+                              8.7128872863248004E-07,-0.0252,
+                              8.6668500712251001E-07,-0.0126,
+                              8.6321616809117001E-07,0.0,
+                              8.6320432692307996E-07,0.0126,
+                              8.6319248575499001E-07,0.0252,
+                              8.6663764245014005E-07,0.0378,
+                              8.7121705840456005E-07,0.0504,
+                              8.7579647435896998E-07,0.063,
+                              8.8202617521368001E-07,
+                              0.075600000000000001,
+                              8.7594667022791999E-07,
+                              0.088200000000000001,
+                              8.6986716524217003E-07,0.1008,
+                              8.3931196581196996E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLY_1_13=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              8.5508315527066002E-07,
+                              -0.088200000000000001,
+                              8.7546616809116998E-07,
+                              -0.075600000000000001,
+                              9.0944533475783005E-07,-0.063,
+                              9.1292663817663998E-07,-0.0504,
+                              8.9653721509972004E-07,-0.0378,
+                              8.9547275641025999E-07,-0.0252,
+                              8.7405644586895003E-07,-0.0126,
+                              8.7004789886040001E-07,0.0,
+                              8.8226549145299002E-07,0.0126,
+                              8.7002546296295996E-07,0.0252,
+                              8.7400534188033999E-07,0.0378,
+                              8.9539672364672004E-07,0.0504,
+                              8.9643376068376001E-07,0.063,
+                              9.1279825498575999E-07,
+                              0.075600000000000001,
+                              9.0929576210826002E-07,
+                              0.088200000000000001,
+                              8.7530288461538001E-07,0.1008,
+                              8.5490491452990995E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLY_1_14=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              8.5798237179486999E-07,
+                              -0.088200000000000001,
+                              8.6880893874644002E-07,
+                              -0.075600000000000001,
+                              9.0299750712251001E-07,-0.063,
+                              9.0948646723646997E-07,-0.0504,
+                              9.1597542735043003E-07,-0.0378,
+                              9.0500302706552995E-07,-0.0252,
+                              8.8214084757835001E-07,-0.0126,
+                              8.7779825498574995E-07,0.0,
+                              8.8993732193732E-07,0.0126,
+                              8.7777207977207998E-07,0.0252,
+                              8.8208974358973997E-07,0.0378,
+                              9.0492325498575998E-07,0.0504,
+                              9.1586574074073996E-07,0.063,
+                              9.0935434472933995E-07,
+                              0.075600000000000001,
+                              9.0284294871795E-07,
+                              0.088200000000000001,
+                              8.6864066951567002E-07,0.1008,
+                              8.5779665242165003E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLY_1_15=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              8.5773557692308004E-07,
+                              -0.088200000000000001,
+                              8.6180893874644003E-07,
+                              -0.075600000000000001,
+                              8.7862838319088002E-07,-0.063,
+                              8.9924074074074004E-07,-0.0504,
+                              9.0872489316239005E-07,-0.0378,
+                              9.0174545940170996E-07,-0.0252,
+                              8.9476602564102997E-07,-0.0126,
+                              8.9122364672365005E-07,0.0,
+                              8.9120993589743996E-07,0.0126,
+                              8.9119622507122997E-07,0.0252,
+                              8.9471118233617996E-07,0.0378,
+                              9.0166132478632003E-07,0.0504,
+                              9.0861146723646996E-07,0.063,
+                              8.9910363247862999E-07,
+                              0.075600000000000001,
+                              8.7847257834757996E-07,
+                              0.088200000000000001,
+                              8.6163693019942995E-07,0.1008,
+                              8.5754362535613004E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLY_1_16=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              8.5903935185184999E-07,
+                              -0.088200000000000001,
+                              8.5690046296295998E-07,
+                              -0.075600000000000001,
+                              8.5831018518518999E-07,-0.063,
+                              8.6167307692307999E-07,-0.0504,
+                              8.7125320512820998E-07,-0.0378,
+                              8.8563586182335997E-07,-0.0252,
+                              8.7089298433048003E-07,-0.0126,
+                              8.6842877492877004E-07,0.0,
+                              8.7942111823362E-07,0.0126,
+                              8.6840135327634996E-07,0.0252,
+                              8.7083814102563997E-07,0.0378,
+                              8.8554985754985996E-07,0.0504,
+                              8.7113977920228004E-07,0.063,
+                              8.6153846153846001E-07,
+                              0.075600000000000001,
+                              8.5815313390312996E-07,
+                              0.088200000000000001,
+                              8.5672471509971999E-07,0.1008,
+                              8.5884116809116995E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLY_1_17=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              8.6388675213674999E-07,
+                              -0.088200000000000001,
+                              8.5563782051281999E-07,
+                              -0.075600000000000001,
+                              8.5087019230768996E-07,-0.063,
+                              8.4755965099714995E-07,-0.0504,
+                              8.4761698717949003E-07,-0.0378,
+                              8.5133636039885996E-07,-0.0252,
+                              8.4844088319088001E-07,-0.0126,
+                              8.4633689458689002E-07,0.0,
+                              8.4644658119657999E-07,0.0126,
+                              8.4630947293447004E-07,0.0252,
+                              8.4838479344729004E-07,0.0378,
+                              8.512516025641E-07,0.0504,
+                              8.4750480769231E-07,0.063,
+                              8.4742378917379002E-07,
+                              0.075600000000000001,
+                              8.5071064814815003E-07,
+                              0.088200000000000001,
+                              8.5545584045584E-07,0.1008,
+                              8.6368108974359E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLUXRD1=DEFI_NAPPE(FONCTION:(FLY_1_1,FLY_1_2,FLY_1_3,FLY_1_4,FLY_1_5,
+                              FLY_1_6,FLY_1_7,FLY_1_8,FLY_1_9,
+                              FLY_1_10,FLY_1_11,FLY_1_12,
+                              FLY_1_13,FLY_1_14,FLY_1_15,
+                              FLY_1_16,FLY_1_17),
+                   PARA:
+                   (-0.1008,
+                          -0.088200000000000001,
+                          -0.075600000000000001,-0.063,-0.0504,
+                          -0.0378,-0.0252,-0.0126,0.0,0.0126,
+                          0.0252,0.0378,0.0504,0.063,
+                          0.075600000000000001,
+                          0.088200000000000001,0.1008),
+                   PROL_GAUCHE:'CONSTANT'
+                   NOM_PARA:'Z'
+                   PROL_DROIT:'CONSTANT');
+%
+% DEFINITION DES MATERIAUX ET AFFECTATIONS
+%
+%           **** DEFINITION DES MATERIAUX SANS FLUX NEUTRONIQUE ****
+%
+%
+% FAMILLE ASSEMBLAGE : NUMERO_FAM
+%
+% EMBOUT SUPERIEUR
+
+
+E_ES=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                   NOM_PARA:'TEMP'
+                   VALE:(100.0,2.0,300.0,3.0)
+                   PROL_DROIT:'CONSTANT');
+
+NU_ES=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(100.0,2.0,300.0,3.0)
+                    PROL_DROIT:'CONSTANT');
+
+AL_ES=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(100.0,2.0,300.0,3.0)
+                    PROL_DROIT:'CONSTANT');
+
+MT_ES=DEFI_MATERIAU(ELAS_FO:(NU:NU_ES
+                             ALPHA:AL_ES
+                             RHO:7800.0
+                             E:E_ES));
+% EMBOUT INFERIEUR
+
+
+E_EI=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                   NOM_PARA:'TEMP'
+                   VALE:(100.0,2.0,300.0,3.0)
+                   PROL_DROIT:'CONSTANT');
+
+NU_EI=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(100.0,2.0,300.0,3.0)
+                    PROL_DROIT:'CONSTANT');
+
+AL_EI=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(100.0,2.0,300.0,3.0)
+                    PROL_DROIT:'CONSTANT');
+
+MT_EI=DEFI_MATERIAU(ELAS_FO:(NU:NU_EI
+                             ALPHA:AL_EI
+                             RHO:12.0
+                             E:E_EI));
+
+MT_RIG=DEFI_MATERIAU(ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+% FONCTION COUPLE EN FONCTION DE DRZ POUR LA LIAISON GRILLE/CRAYON
+
+
+FOTRAC=DEFI_FONCTION(PROL_GAUCHE:'LINEAIRE'
+                     NOM_PARA:'DRZ'
+                     VALE:(1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0)
+                     PROL_DROIT:'LINEAIRE');
+
+MT_RE1=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG1
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE2=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG2
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE3=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG3
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE4=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG4
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE5=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG5
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE6=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG6
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE7=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG7
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE8=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG8
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE9=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG9
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE10=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                   RELA_MZ:FOTRAC
+                                   RIGI_N_FO:FRIG10
+                                   COULOMB:1.0)
+                      ELAS:(NU:0.0
+                            ALPHA:0.0
+                            RHO:0.0
+                            E:1.0));
+% SYSTEME DE MAINTIEN
+
+
+E_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                   NOM_PARA:'TEMP'
+                   VALE:(0.0,1.0,5.0,2.0)
+                   PROL_DROIT:'CONSTANT');
+
+NU_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+
+AL_MA=DEFI_CONSTANTE(VALE:0.29999999999999999);
+
+SY_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+
+DS_MA=DEFI_CONSTANTE(VALE:0.29999999999999999);
+
+NP_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+
+MEY_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+MPY_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+MEZ_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+MPZ_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+CAY_MA=DEFI_CONSTANTE(VALE:0.29999999999999999);
+
+CBY_MA=DEFI_CONSTANTE(VALE:0.29999999999999999);
+
+CAZ_MA=DEFI_CONSTANTE(VALE:0.29999999999999999);
+
+CBZ_MA=DEFI_CONSTANTE(VALE:0.29999999999999999);
+
+MPX_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+MT_MA=DEFI_MATERIAU(VMIS_POUTRE_FO:(MEZ:MEZ_MA
+                                    MPX:MPX_MA
+                                    MPZ:MPZ_MA
+                                    CBY:CBY_MA
+                                    NP:NP_MA
+                                    CBZ:CBZ_MA
+                                    MEY:MEY_MA
+                                    CAY:CAY_MA
+                                    CAZ:CAZ_MA
+                                    MPY:MPY_MA)
+                    ECRO_LINE_FO:(D_SIGM_EPSI:DS_MA
+                                  SY:SY_MA)
+                    ELAS_FO:(NU:NU_MA
+                             ALPHA:AL_MA
+                             RHO:7800.0
+                             E:E_MA));
+%
+%           **** DEFINITION DES MATERIAUX AVEC FLUX NEUTRONIQUE ****
+%
+%
+% GRILLE
+
+
+E_GRE=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+
+E_GRM=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+
+NU_GRE=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+NU_GRM=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+AL_GRE=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+AL_GRM=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+% TUBE GUIDE
+
+
+E_TU=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                   NOM_PARA:'TEMP'
+                   VALE:(0.0,1.0,5.0,2.0)
+                   PROL_DROIT:'CONSTANT');
+
+NU_TU=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+
+AL_TU=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+% CRAYON
+
+
+E_CR=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                   NOM_PARA:'TEMP'
+                   VALE:(0.0,1.0,5.0,2.0)
+                   PROL_DROIT:'CONSTANT');
+
+NU_CR=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+
+AL_CR=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+% GRANDISSEMENT DES GRILLES
+% GRILLES EXTREMES 1 ET 10
+
+
+MT_GRE1=DEFI_MATERIAU(GRAN_IRRA:(FONC_MULT:FLUX_F1
+                                 FLUX_L:FLUXAX1
+                                 FLUX_TN:FLUXRD1
+                                 S:1.0
+                                 A:0.0)
+                      LEMAITRE:(N:0.0
+                                UN_SUR_M:0.0
+                                QSR_K:1.0
+                                UN_SUR_K:0.0)
+                      ELAS_FO:(NU:NU_GRE
+                               ALPHA:AL_GRE
+                               RHO:7800.0
+                               E:E_GRE));
+% GRILLES DE MELANGE       
+
+
+MT_GRM1=DEFI_MATERIAU(GRAN_IRRA:(FONC_MULT:FLUX_F1
+                                 FLUX_L:FLUXAX1
+                                 FLUX_TN:FLUXRD1
+                                 S:1.0
+                                 A:0.0)
+                      LEMAITRE:(N:0.0
+                                UN_SUR_M:0.0
+                                QSR_K:2.0
+                                UN_SUR_K:0.0)
+                      ELAS_FO:(NU:NU_GRM
+                               ALPHA:AL_GRM
+                               RHO:7800.0
+                               E:E_GRM));
+% DEFINITION DES MATERIAUX VISCOPLASTIQUES ( TUBES ET CRAYONS )
+
+
+MT_TU1=DEFI_MATERIAU(GRAN_IRRA:(FONC_MULT:FLUX_F1
+                                FLUX_L:FLUXAX1
+                                FLUX_TN:FLUXRD1
+                                S:1.0
+                                A:0.0)
+                     LEMAITRE:(N:0.0
+                               UN_SUR_M:0.0
+                               QSR_K:2.0
+                               UN_SUR_K:0.0)
+                     ELAS_FO:(NU:NU_TU
+                              ALPHA:AL_TU
+                              RHO:7800.0
+                              E:E_TU));
+
+MT_CR1=DEFI_MATERIAU(GRAN_IRRA:(FONC_MULT:FLUX_F1
+                                FLUX_L:FLUXAX1
+                                FLUX_TN:FLUXRD1
+                                S:1.0
+                                A:0.0)
+                     LEMAITRE:(N:0.0
+                               UN_SUR_M:0.0
+                               QSR_K:2.0
+                               UN_SUR_K:0.0)
+                     ELAS_FO:(NU:NU_CR
+                              ALPHA:AL_CR
+                              RHO:7800.0
+                              E:E_CR));
+%
+%           AFFECTATION DES MATERIAUX A CHAUD - CYCLE  
+%
+%
+
+
+A_MAT_1=AFFE_MATERIAU(AFFE:(TEMP_REF:100.0
+                            MATER:MT_MA
+                            GROUP_MA:(MAINTI_Y,MAINTI_Z))
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_GRM1
+                            GROUP_MA:GRIL_I)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_GRE1
+                            GROUP_MA:GRIL_E)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_CR1
+                            GROUP_MA:CRAY)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_TU1
+                            GROUP_MA:GUID)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_EI
+                            GROUP_MA:EBOINF)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_EI
+                            GROUP_MA:(PI_PLE,PI_TRO))
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_ES
+                            GROUP_MA:EBOSUP)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RIG
+                            GROUP_MA:RIGID)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE1
+                            GROUP_MA:ELA1)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE2
+                            GROUP_MA:ELA2)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE3
+                            GROUP_MA:ELA3)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE4
+                            GROUP_MA:ELA4)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE5
+                            GROUP_MA:ELA5)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE6
+                            GROUP_MA:ELA6)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE7
+                            GROUP_MA:ELA7)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE8
+                            GROUP_MA:ELA8)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE9
+                            GROUP_MA:ELA9)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE10
+                            GROUP_MA:ELA10)
+                      MAILLAGE:MA1);
+%
+
+
+L_INST_1=DEFI_LIST_REEL(INTERVALLE:(JUSQU_A:0.5
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:1000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:2000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:3000.0
+                                    NOMBRE:5)
+                        INTERVALLE:(JUSQU_A:4000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:5000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:6000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:7000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:8000.0
+                                    NOMBRE:1)
+                        DEBUT:0.0);
+
+L_ARCH_1=DEFI_LIST_REEL(INTERVALLE:(JUSQU_A:0.5
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:1000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:2000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:3000.0
+                                    NOMBRE:5)
+                        INTERVALLE:(JUSQU_A:4000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:5000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:6000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:7000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:8000.0
+                                    NOMBRE:1)
+                        DEBUT:0.0);
+%
+% CALCUL PHASE I A V DU CYCLE 1
+%
+
+
+RESU=STAT_NON_LINE(CHAM_MATER:A_MAT_1
+                   MODELE:MO1
+                   ARCHIVAGE:(LIST_INST:L_ARCH_1)
+                   CONVERGENCE:(ITER_GLOB_MAXI:50
+                                ITER_INTE_MAXI:500
+                                RESI_GLOB_RELA:1.E-4
+                                ARRET:'OUI')
+                   COMP_INCR:(RELATION:'VMIS_POU_LINE'
+                              GROUP_MA:MAINTIEN)
+                   COMP_INCR:(RELATION:'ASSE_COMBU'
+                              GROUP_MA:(CRAYONS,TUB_GUID))
+                   COMP_INCR:(RELATION:'DIS_CONTACT'
+                              GROUP_MA:LI_GR_CR)
+                   COMP_INCR:(COQUE_NCOU:1
+                              RELATION:'ELAS'
+                              GROUP_MA:
+                              
+                                         (EMBO_INF,EMBO_SUP,
+                                         PIEDS,GRILLES,
+                                         LI_GR_GU),)
+                   INCREMENT:(NUME_INST_FIN:20
+                              LIST_INST:L_INST_1)
+                   CARA_ELEM:CARA1
+                   RECH_LINEAIRE:(ITER_LINE_MAXI:3)
+                   NEWTON:(REAC_ITER:1
+                           MATRICE:'TANGENTE')
+                   SOLVEUR:(METHODE:'MULT_FRONT'
+                            RENUM:'MD')
+                   EXCIT:(FONC_MULT:ARCH_F1
+                          CHARGE:ARCH_1)
+                   EXCIT:(FONC_MULT:ARCH_F1
+                          CHARGE:FOARCH_1)
+                   EXCIT:(FONC_MULT:HYDR_F1
+                          CHARGE:HYDR_1)
+                   EXCIT:(FONC_MULT:HYDR_F1
+                          CHARGE:FOHYDR_1)
+                   EXCIT:(FONC_MULT:CLDI_F1
+                          CHARGE:CL_DI_1)
+                   EXCIT:(CHARGE:CL_PER_1)
+                   EXCIT:(CHARGE:CL_CTC)
+                   EXCIT:(CHARGE:PESANT_1)
+                   EXCIT:(CHARGE:THERM_1)
+                   PARM_THETA:0.5);
+
+FIN();
diff --git a/Exemples/ex22/totalmod.comm b/Exemples/ex22/totalmod.comm
new file mode 100755 (executable)
index 0000000..31b448d
--- /dev/null
@@ -0,0 +1,1798 @@
+DEBUT();
+% LECTURE DES PARAMETRES 
+%
+
+    
+% LECTURE DES TEMPS 
+
+%cycle 1
+
+
+% LECTURE DU MAILLAGE ET DEFINITIONS DES PROPRIETES ELEMENTS FINIS
+
+PRE_GIBI ();
+%
+ ma1 = LIRE_MAILLAGE ();
+%
+&ma1 = DEFI_GROUP ( MAILLAGE : ma1
+                   CREA_GROUP_NO : (GROUP_MA : ( fixati
+                                                 appui
+                                                 lias_1
+                                                 lias_2
+                                                 ebguide   
+                                                 maintien
+                                                 main_sup
+                                                 embo_sup
+                                                 tub_guid
+                                                 grilles
+                                                 embo_inf
+                                                 pieds
+                                                 crayons ))
+                  ) ;
+%
+% AFFECTATION DU MODELE
+%
+ mo1 = AFFE_MODELE ( Maillage: ma1
+           % crayons combustibles
+                    AFFE : ( GROUP_MA :     crayons
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'POU_D_E'
+                            )
+           % tubes guides
+                    AFFE : ( GROUP_MA :     tub_guid
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'POU_D_E'
+                            )
+           % embouts
+                    AFFE : ( GROUP_MA :     (embo_sup, embo_inf)
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'DKT'
+                            )
+          % pieds
+
+                    AFFE : ( GROUP_MA :    pieds
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'POU_D_E'
+                            )
+
+           % grilles
+                    AFFE : ( GROUP_MA :     grilles
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'POU_D_E'
+                            )
+           % liaison grille crayon
+                    AFFE : ( GROUP_MA :     li_gr_cr
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'DIS_TR'
+                            )
+           % liaison grille tube
+                    AFFE : ( GROUP_MA :     li_gr_gu
+                             PHENOMENE :    'MECANIQUE'
+                             MODELISATION : 'DIS_TR'
+                            )
+           % systeme de maintien
+                    AFFE : ( GROUP_MA :     maintien
+                             PHENOMENE:'MECANIQUE',
+                             MODELISATION:'POU_D_E'
+                           % MODELISATION:'POU_D_T'
+                            )
+                   );
+%
+% AFFECTATION DES CARACTERISTIQUES GEOMETRIQUES ELEMENTAIRES
+%
+ cara1 = AFFE_CARA_ELEM ( MODELE :  mo1
+
+% Famille assemblage : numero_fam
+%
+           % crayons
+                        POUTRE : ( GROUP_MA : cray 
+                                   SECTION : 'CERCLE'
+                                   CARA    : ( 'R','EP' )
+                                   VALE    : ( 3.   3. )
+                                  )
+           % tube guide partie courante
+                        POUTRE : ( GROUP_MA : guid 
+                                   SECTION : 'CERCLE'
+                                   CARA    : ( 'R','EP' )
+                                   VALE    : ( 3.   3. )
+                                  )
+           % tube guide partie retrecie
+                        POUTRE : ( GROUP_MA : retre 
+                                   SECTION : 'CERCLE'
+                                   CARA    : ( 'R','EP' )
+                                   VALE    : ( 3.   3. )
+                                  )  
+           % grilles
+                        POUTRE :  ( GROUP_MA : ( gril_i        )
+                                    SECTION : 'RECTANGLE'
+                                    CARA    : ( 'HY','HZ' )
+                                    VALE    : ( 3.   3.   )
+                                  )
+                        POUTRE :  ( GROUP_MA : ( gril_e  )
+                                    SECTION : 'RECTANGLE'
+                                    CARA    : ( 'HY','HZ' )
+                                    VALE    : ( 3.   3.   )
+                                  )
+                        ORIENTATION : ( GROUP_MA : (gril_i  , gril_e )
+                                        CARA : 'VECT_Y'
+                                        VALE : (1. 0. 0.)
+                                      )
+           % systeme de maintien
+                        POUTRE : ( GROUP_MA : (mainti_y , mainti_z )
+                                   SECTION : 'RECTANGLE'
+                                   CARA    : ( 'HY','HZ' )
+                                   VALE    : ( 3.   3. )
+                                  )
+                        ORIENTATION : ( GROUP_MA : (mainti_y )
+                                        CARA : 'VECT_Y'
+                                        VALE : (0. 1. 0.)
+                                      )
+                        ORIENTATION : ( GROUP_MA : (mainti_z )
+                                        CARA : 'VECT_Y'
+                                        VALE : (0. 0. 1.)
+                                      )
+           % embout inferieur
+                        COQUE : ( GROUP_MA : eboinf 
+                                  EPAIS : 2.
+                                  ANGL_REP : 90.
+                                  )
+          % pieds
+                     POUTRE :  ( GROUP_MA : pi_ple 
+                                          SECTION : 'GENERALE'
+                     CARA : ( 'A' , 'IZ' , 'IY' , 'JX' )
+                    VALE : (1. 2. 3. 4.)
+                                      )
+                     POUTRE :  ( GROUP_MA : pi_tro 
+                                          SECTION : 'GENERALE'
+                     CARA : ( 'A' , 'IZ' , 'IY' , 'JX' )
+                    VALE : (1. 2. 3. 4. )
+                                )
+                        ORIENTATION : ( GROUP_MA : (pi_ple  pi_tro )
+                                        CARA : 'VECT_Y'
+                                        VALE : (0. 1. 0.)
+                                      )
+
+           % embout superieur
+                        COQUE : ( GROUP_MA  : ebosup 
+                                  EPAIS : 3.
+                                  ANGL_REP : 90.
+                                  )
+
+           % liaison grille/crayon
+                        DISCRET : ( GROUP_MA : elasti 
+                                    CARA : 'K_TR_D_L'
+                                    VALE : ( 1.
+                                             2.
+                                             3.
+                                             4.
+                                             5.
+                                             6.
+                                           )
+                                    REPERE : 'LOCAL'
+                                  )
+           % liaison grille/tube guide
+                        DISCRET : ( GROUP_MA : rigid 
+                                    CARA : 'K_TR_D_L'
+                                    VALE : ( 1.
+                                             2.
+                                             3.
+                                             4.
+                                             5.
+                                             6.
+                                           )
+                                    REPERE : 'LOCAL'
+                                  )
+
+                        ORIENTATION : ( GROUP_MA : (elasti  
+                                                    rigid        )
+                                        CARA : 'VECT_Y'
+                                        VALE : (1. 0. 0.) )
+  
+    );
+%
+% DEFINITION DES CHARGES ET CONDITIONS LIMITES
+% DEFINITION DES TEMPERATURES NODALES EVOLUTIVES
+%
+ f_tp1_1 = DEFI_FONCTION ( NOM_PARA: 'X'
+                            NOM_RESU : 'TEMP'
+                            PROL_DROIT: 'CONSTANT'
+                            PROL_GAUCHE: 'CONSTANT'
+                            VALE : ( 0. 1.
+                                     5. 4.  )
+                         );
+ f_tp2_1 = DEFI_FONCTION ( NOM_PARA: 'X'
+                          NOM_RESU : 'TEMP'
+                          PROL_DROIT: 'CONSTANT'
+                          PROL_GAUCHE: 'CONSTANT'
+                          VALE : ( 0. 1.
+                                   5. 4. )
+                         );
+ f_tp3_1 = DEFI_FONCTION ( NOM_PARA: 'X'
+                          NOM_RESU : 'TEMP'
+                          PROL_DROIT: 'CONSTANT'
+                          PROL_GAUCHE: 'CONSTANT'
+                          VALE : ( 0. 1.
+                                   5. 4. )
+                         );
+  
+ chtem1_1 = AFFE_CHAM_NO ( MAILLAGE : ma1
+                         GRANDEUR : 'TEMP_F'
+                         AFFE : ( GROUP_NO: (maintien, pieds
+                                             tub_guid, grilles
+                                             crayons)
+                                  NOM_CMP : 'TEMP'
+                                  FONCTION : f_tp1_1 )
+                         AFFE : ( GROUP_NO: (embo_sup, embo_inf)
+                                  NOM_CMP : ('TEMP_INF' 'TEMP'
+                                             'TEMP_SUP')
+                                  FONCTION :(f_tp1_1,f_tp1_1,f_tp1_1))
+                        );
+
+ chtem2_1 = AFFE_CHAM_NO ( MAILLAGE : ma1
+                         GRANDEUR : 'TEMP_F'
+                         AFFE : ( GROUP_NO: (maintien, pieds
+                                             tub_guid, grilles
+                                             crayons)
+                                  NOM_CMP : 'TEMP'
+                                  FONCTION : f_tp2_1 )
+                         AFFE : ( GROUP_NO: (embo_sup, embo_inf)
+                                  NOM_CMP : ('TEMP_INF' 'TEMP'
+                                             'TEMP_SUP')
+                                  FONCTION :(f_tp2_1,f_tp2_1,f_tp2_1))
+                        );
+                        
+ chtem3_1 = AFFE_CHAM_NO ( MAILLAGE : ma1
+                         GRANDEUR : 'TEMP_F'
+                         AFFE : ( GROUP_NO: (maintien, pieds
+                                             tub_guid, grilles)
+                                  NOM_CMP : 'TEMP'
+                                  FONCTION : f_tp3_1 )
+                         AFFE : ( GROUP_NO: (embo_sup, embo_inf)
+                                  NOM_CMP : ('TEMP_INF' 'TEMP'
+                                             'TEMP_SUP')
+                                  FONCTION : (f_tp3_1,f_tp3_1,f_tp3_1))
+                         AFFE : ( GROUP_NO: crayons
+                                  NOM_CMP : 'TEMP'
+                                  FONCTION :f_tp3_1 )
+                        );  
+                                                                       
+ chth_1 = CREA_RESU ( TYPE_RESU : 'EVOL_THER'
+                    NOM_CHAM : 'TEMP'
+                    CHAM_GD : ( CHAM_NO : chtem1_1
+                                INST : 0. )
+                    CHAM_GD : ( CHAM_NO : chtem1_1
+                                INST : 1000. )
+                    CHAM_GD : ( CHAM_NO : chtem2_1
+                                INST :2000.  )
+                    CHAM_GD : ( CHAM_NO : chtem3_1
+                                INST : 3000.  )
+                    CHAM_GD : ( CHAM_NO : chtem3_1
+                                INST : 4000.    )
+                    CHAM_GD : ( CHAM_NO : chtem2_1
+                                INST : 5000.   )
+                    CHAM_GD : ( CHAM_NO : chtem1_1
+                                INST : 6000.   )
+                    CHAM_GD : ( CHAM_NO : chtem1_1
+                                INST : 7000.    )
+                       );
+                       
+% Chargement: charges thermo-mecaniques
+% ----------------------------------------
+
+ therm_1 = AFFE_CHAR_MECA ( MODELE: mo1
+                             TEMP_CALCULEE : chth_1
+                             );                       
+                       
+                       
+
+% DEFINITION DES CONDITIONS LIMITES
+%            DES CONDITIONS DE CONTACT
+%
+% Chargement: pesanteur
+%
+ pesant_1 = AFFE_CHAR_MECA ( MODELE : mo1
+                             PESANTEUR : (9.81 -1. 0. 0. )
+                            );
+
+%
+% Conditions aux limites
+%
+ cl_per_1 = AFFE_CHAR_MECA ( MODELE : mo1
+                % embout inferieur encastrement
+                         DDL_IMPO : ( GROUP_NO : fixati
+                                      DX : 0.  DY:0.    DZ : 0.
+                                      DRX : 0. DRY : 0. DRZ : 0.
+                                    )
+                % embout inferieur appui simple
+                         DDL_IMPO : ( GROUP_NO : appui
+                                      DX : 0.
+                                    )
+                % embout superieur liaison guidee
+                         DDL_IMPO : ( GROUP_NO : ebguide
+                                      DY:0. DZ : 0.
+                                      DRX : 0. DRY : 0. DRZ : 0.
+                                    )
+                % liaison systeme de maintien embout superieur
+                         DDL_IMPO : ( GROUP_NO : (lias_1, lias_2)
+                                      DRX : 0.
+                                    )
+                % liaison systeme de maintien embout superieur
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DX' DDL_2 : 'DX'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DY' DDL_2 : 'DY'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DZ' DDL_2 : 'DZ'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DRY' DDL_2 : 'DRY'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                         LIAISON_GROUP : ( GROUP_NO_1 : lias_1
+                                           GROUP_NO_2 : lias_2
+                                           DDL_1 : 'DRZ' DDL_2 : 'DRZ'
+                                           COEF_MULT_1 : 1.
+                                           COEF_MULT_2 : -1.
+                                           COEF_IMPO : 0. )
+                            );
+%
+ cl_ctc = AFFE_CHAR_MECA ( MODELE : mo1
+                                   
+                                           
+                         CONTACT : ( APPARIEMENT : 'NODAL'
+                                     GROUP_MA_1 : eboinf
+                                     GROUP_MA_2 : mcrbas 
+                                     VECT_NORM_2 : (-1. 0. 0.)
+                                     ) 
+                                     INFO : 1                  
+                         );
+%                            
+% Deplacement du systeme de maintien
+%
+cldi_f1 = DEFI_FONCTION ( NOM_PARA   : 'INST'
+                           PROL_DROIT : 'CONSTANT'
+                           PROL_GAUCHE: 'CONSTANT'
+                           VALE : ( 0.     0.  
+                                    1000.  0.1
+                                    2000.  0.2
+                                    3000.  0.2
+                                    4000.  0.2
+                                    5000.  0.2
+                                    6000.  0.1     
+                                    7000.  0.1      )
+                         );
+
+ cl_di_1  = AFFE_CHAR_MECA ( MODELE : mo1
+                % deplacement du systeme de maintien
+                         DDL_IMPO : ( GROUP_NO : main_sup
+                                      DX : -1.     
+                                    )
+                            );
+                                                        
+% DEFINITION DES FORCES EXTERIEURES
+%
+% Fonction multiplicative de la force hydrodynamique normee
+%
+hydr_f1  = DEFI_FONCTION ( NOM_PARA    : 'INST'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0.     0.      
+                                            1000.  0.1
+                                            2000.  0.2
+                                            3000.  0.2
+                                            4000.  0.2
+                                            5000.  0.2
+                                            6000.  0.1
+                                            7000.  0.1  )
+                          );
+%
+% Profil des forces hydrodynamiques tubes guides a froid
+%
+
+
+ hyfrtu_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : ( 0. 1.
+                               5. 2. )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );
+%
+% Profil des forces hydrodynamiques crayon a froid
+%
+
+
+ hyfrcr_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : (0. 1.
+                              5. 2. )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );
+%
+
+% Chargement : Forces hydrodynamiques 
+%
+ hydr_1   = AFFE_CHAR_MECA ( MODELE : mo1
+             % embout superieur
+                          FORCE_COQUE  : ( GROUP_MA : ebosup
+                                         FX : 10. )
+             % embout inferieur
+                          FORCE_COQUE  : ( GROUP_MA : eboinf
+                                         FX : 10.  )
+             % grille superieure
+                          FORCE_POUTRE : ( GROUP_MA : (gril10 )
+                                         FX : 10.   )
+             % grille inferieure
+                          FORCE_POUTRE : ( GROUP_MA : (gril1 )
+                                         FX : 10.    )
+             % grille de melange
+                          FORCE_POUTRE : ( GROUP_MA : (gril2 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril3 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril4 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril5 )
+                                         FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril6 )
+                                         FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril7 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril8 )
+                                         FX : 10.    )
+                          FORCE_POUTRE : ( GROUP_MA : (gril9 )
+                                         FX : 10.    )
+                          );
+ toto_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : ( 0. 10. 
+                               5. 10.  )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );                          
+%                         
+ fohydr_1 = AFFE_CHAR_MECA_F ( MODELE : mo1
+             % tubes guides et tube d'instrumentation
+                          FORCE_POUTRE : ( GROUP_MA : (guid        )
+                                           FX : toto_1  )
+             % crayons
+                          FORCE_POUTRE : ( GROUP_MA : cray
+                                           FX :  toto_1  )
+                            );
+%
+% Profil des forces d'Archimede tube guide 
+%
+
+
+ arfrtu_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : ( 0. 10. 
+                               5. 10.  )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );
+%
+% Profil des forces d'Archimede crayon 
+%
+
+
+ arfrcr_1   = DEFI_FONCTION (
+               NOM_PARA    : 'X'
+               VALE        : ( 0. 10.
+                               5. 10. )
+               PROL_DROIT  : 'CONSTANT'
+               PROL_GAUCHE : 'CONSTANT'
+                           );
+%
+% Fonction multiplicative de la force d'Archimede
+%
+arch_f1  = DEFI_FONCTION ( NOM_PARA    : 'INST'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0.     0.
+                                            1000.  0.1
+                                            2000.  0.2
+                                            3000.  0.2
+                                            4000.  0.2
+                                            5000.  0.2
+                                            6000.  0.1
+                                            7000.  0.1 )
+                          );
+%
+
+%
+% Chargement : Forces d'Archimede 
+% ----------------------------------------
+%
+   arch_1 = AFFE_CHAR_MECA ( MODELE : mo1
+             % systeme de maintien
+                     FORCE_POUTRE : ( GROUP_MA : maintien
+                               FX : 10. )
+             % embout superieur
+                          FORCE_COQUE  : ( GROUP_MA : ebosup
+                                    FX : 10. )
+             % embout inferieur
+                          FORCE_COQUE  : ( GROUP_MA : eboinf
+                                    FX : 10. )
+             % grille superieure
+                          FORCE_POUTRE : ( GROUP_MA : (gril10  )
+                                    FX : 10.  )
+             % grille inferieure
+                          FORCE_POUTRE : ( GROUP_MA : (gril1 )
+                                           FX : 10.  )
+             % grille de melange
+                          FORCE_POUTRE : ( GROUP_MA : (gril2 )
+                                           FX : 10.  )
+                          FORCE_POUTRE : ( GROUP_MA : (gril3 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril4 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril5 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril6 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril7 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril8 )
+                                           FX : 10.   )
+                          FORCE_POUTRE : ( GROUP_MA : (gril9 )
+                                           FX : 10.  )
+                          );
+ foarch_1 = AFFE_CHAR_MECA_F ( MODELE : mo1
+
+             % tubes guides et tube d'instrumentation
+                          FORCE_POUTRE : ( GROUP_MA : guid 
+                                           FX : arch_f1  )
+             % crayons
+                          FORCE_POUTRE : ( GROUP_MA : cray
+                                           FX :arch_f1  )
+                            );
+%
+% 
+% FORCE DE SERRAGE DE LA LIAISON GRILLE - CRAYON 
+%
+%
+
+%
+%
+%
+% definition de la liste d'instants
+%
+  l_frig   = DEFI_LIST_REEL( Debut: 0.0
+                             Intervalle : (Jusqu_a: 1000. Nombre: 100)
+                           );
+%
+% Inrterpretation des fonctions
+%
+f1=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f2=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f3=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f4=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f5=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f6=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f7=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f8=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f9=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+f10=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00 ) );
+                         
+ frig1 = CALC_FONC_INTERP ( FONCTION    : f1
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig2 = CALC_FONC_INTERP ( FONCTION    : f2
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig3 = CALC_FONC_INTERP ( FONCTION    : f3
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig4 = CALC_FONC_INTERP ( FONCTION    : f4
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig5 = CALC_FONC_INTERP ( FONCTION    : f5
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                             INTERPOL    : 'LIN'
+                           );
+ frig6 = CALC_FONC_INTERP ( FONCTION    : f6
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig7 = CALC_FONC_INTERP ( FONCTION    : f7
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig8 = CALC_FONC_INTERP ( FONCTION    : f8
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig9 = CALC_FONC_INTERP ( FONCTION    : f9
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+ frig10= CALC_FONC_INTERP ( FONCTION    : f10
+                            LIST_PARA   : l_frig
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            INTERPOL    : 'LIN'
+                           );
+%
+% DEFINITION DU FLUX NEUTRONIQUE RADIAL
+
+flux_f1=DEFI_FONCTION ( NOM_PARA    : 'INST'
+                         PROL_DROIT  : 'CONSTANT'
+                         PROL_GAUCHE : 'CONSTANT'
+                         VALE : ( 
+                         0.00000E+00   0.00000E+00   
+                         4.32000E+04   0.00000E+00
+                         9.74520E+05   4.53280E+05   
+                         2.63880E+06   2.07785E+06
+                         4.08780E+06   3.51279E+06   
+                         5.42844E+06   4.85677E+06
+                         7.24500E+06   6.67627E+06   
+                         8.85348E+06   8.27977E+06
+                         1.04609E+07   9.87261E+06   
+                         1.22029E+07   1.15869E+07
+                         1.39446E+07   1.32952E+07   
+                         1.41437E+07   1.34902E+07
+                         1.55632E+07   1.48753E+07   
+                         1.72361E+07   1.65069E+07
+                         1.79482E+07   1.71992E+07   
+                         1.81901E+07   1.74334E+07
+                         1.81937E+07   1.74352E+07   
+                         1.81973E+07   1.74352E+07
+                         1.82009E+07   1.74352E+07
+                                )
+                       ) ;
+% Definition du flux axial pour le cycle 1
+
+fluxax1 = LIRE_FONCTION ( UNITE       : 60
+                           PROL_GAUCHE : 'CONSTANT'
+                           PROL_DROIT  : 'CONSTANT'
+                         );
+
+ fly_1_1  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    3.8032834757835D-07
+                -8.8200000000000D-02    3.8083689458689D-07
+                -7.5600000000000D-02    3.8296082621083D-07
+                -6.3000000000000D-02    3.8584009971510D-07
+                -5.0400000000000D-02    3.8946100427350D-07
+                -3.7800000000000D-02    3.9259455128205D-07
+                -2.5200000000000D-02    3.9258457977208D-07
+                -1.2600000000000D-02    3.9294106125356D-07
+               0.    3.9399554843305D-07
+                 1.2600000000000D-02    3.9293233618234D-07
+                 2.5200000000000D-02    3.9256712962963D-07
+                 3.7800000000000D-02    3.9256712962963D-07
+                 5.0400000000000D-02    3.8942610398860D-07
+                 6.3000000000000D-02    3.8579522792023D-07
+                 7.5600000000000D-02    3.8290972222222D-07
+                 8.8200000000000D-02    3.8077706552707D-07
+                 1.0080000000000D-01    3.8026103988604D-07
+                     ) ) ; 
+           
+ fly_1_2  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    4.3595566239316D-07
+                -8.8200000000000D-02    4.3866542022792D-07
+                -7.5600000000000D-02    4.4331463675214D-07
+                -6.3000000000000D-02    4.4911556267806D-07
+                -5.0400000000000D-02    4.5750658831909D-07
+                -3.7800000000000D-02    4.6647222222222D-07
+                -2.5200000000000D-02    4.6002938034188D-07
+                -1.2600000000000D-02    4.6004309116809D-07
+               0.    4.6686235754986D-07
+                 1.2600000000000D-02    4.6003311965812D-07
+                 2.5200000000000D-02    4.6000943732194D-07
+                 3.7800000000000D-02    4.6643981481481D-07
+                 5.0400000000000D-02    4.5746420940171D-07
+                 6.3000000000000D-02    4.4906445868946D-07
+                 7.5600000000000D-02    4.4325356125356D-07
+                 8.8200000000000D-02    4.3859686609687D-07
+                 1.0080000000000D-01    4.3587838319088D-07
+                     ) ) ; 
+           
+ fly_1_3  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    4.9431891025641D-07
+                -8.8200000000000D-02    5.0005128205128D-07
+                -7.5600000000000D-02    5.1337197293447D-07
+                -6.3000000000000D-02    5.2915313390313D-07
+                -5.0400000000000D-02    5.3788069800570D-07
+                -3.7800000000000D-02    5.3504629629630D-07
+                -2.5200000000000D-02    5.3221189458689D-07
+                -1.2600000000000D-02    5.3136431623932D-07
+               0.    5.3135870726496D-07
+                 1.2600000000000D-02    5.3135309829060D-07
+                 2.5200000000000D-02    5.3218696581197D-07
+                 3.7800000000000D-02    5.3500827991453D-07
+                 5.0400000000000D-02    5.3782959401709D-07
+                 6.3000000000000D-02    5.2909205840456D-07
+                 7.5600000000000D-02    5.1330217236467D-07
+                 8.8200000000000D-02    4.9997150997151D-07
+                 1.0080000000000D-01    4.9423165954416D-07
+                     ) ) ; 
+           
+ fly_1_4  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    5.5489957264957D-07
+                -8.8200000000000D-02    5.6477884615385D-07
+                -7.5600000000000D-02    5.9007781339031D-07
+                -6.3000000000000D-02    5.9726415598291D-07
+                -5.0400000000000D-02    6.0445049857550D-07
+                -3.7800000000000D-02    5.9840776353276D-07
+                -2.5200000000000D-02    5.8440651709402D-07
+                -1.2600000000000D-02    5.8263906695157D-07
+               0.    5.9153240740741D-07
+                 1.2600000000000D-02    5.8262660256410D-07
+                 2.5200000000000D-02    5.8438034188034D-07
+                 3.7800000000000D-02    5.9836663105413D-07
+                 5.0400000000000D-02    6.0439316239316D-07
+                 6.3000000000000D-02    5.9719497863248D-07
+                 7.5600000000000D-02    5.8999679487179D-07
+                 8.8200000000000D-02    5.6469159544160D-07
+                 1.0080000000000D-01    5.5480110398860D-07
+                     ) ) ; 
+           
+ fly_1_5  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    6.1267200854701D-07
+                -8.8200000000000D-02    6.2962357549858D-07
+                -7.5600000000000D-02    6.5655413105413D-07
+                -6.3000000000000D-02    6.6164583333333D-07
+                -5.0400000000000D-02    6.5190242165242D-07
+                -3.7800000000000D-02    6.5212678062678D-07
+                -2.5200000000000D-02    6.3746616809117D-07
+                -1.2600000000000D-02    6.3547435897436D-07
+               0.    6.4509686609687D-07
+                 1.2600000000000D-02    6.3546064814815D-07
+                 2.5200000000000D-02    6.3743625356125D-07
+                 3.7800000000000D-02    6.5207941595442D-07
+                 5.0400000000000D-02    6.5183885327635D-07
+                 6.3000000000000D-02    6.6156980056980D-07
+                 7.5600000000000D-02    6.5646563390313D-07
+                 8.8200000000000D-02    6.2952386039886D-07
+                 1.0080000000000D-01    6.1256356837607D-07
+                     ) ) ; 
+           
+ fly_1_6  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    6.5755128205128D-07
+                -8.8200000000000D-02    6.8336253561254D-07
+                -7.5600000000000D-02    6.9012072649573D-07
+                -6.3000000000000D-02    6.9687891737892D-07
+                -5.0400000000000D-02    6.9362571225071D-07
+                -3.7800000000000D-02    6.9074768518519D-07
+                -2.5200000000000D-02    6.8786965811966D-07
+                -1.2600000000000D-02    6.8586413817664D-07
+               0.    6.8585603632479D-07
+                 1.2600000000000D-02    6.8584793447293D-07
+                 2.5200000000000D-02    6.8783600427350D-07
+                 3.7800000000000D-02    6.9069720441595D-07
+                 5.0400000000000D-02    6.9355840455840D-07
+                 6.3000000000000D-02    6.9679789886040D-07
+                 7.5600000000000D-02    6.9002412749288D-07
+                 8.8200000000000D-02    6.8325035612536D-07
+                 1.0080000000000D-01    6.5743162393162D-07
+                     ) ) ; 
+           
+ fly_1_7  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    6.9684526353276D-07
+                -8.8200000000000D-02    7.1406606125356D-07
+                -7.5600000000000D-02    7.3236502849003D-07
+                -6.3000000000000D-02    7.2076442307692D-07
+                -5.0400000000000D-02    7.1793500712251D-07
+                -3.7800000000000D-02    7.2835648148148D-07
+                -2.5200000000000D-02    7.1444747150997D-07
+                -1.2600000000000D-02    7.1130893874644D-07
+               0.    7.2107727920228D-07
+                 1.2600000000000D-02    7.1129398148148D-07
+                 2.5200000000000D-02    7.1441257122507D-07
+                 3.7800000000000D-02    7.2830288461538D-07
+                 5.0400000000000D-02    7.1786396011396D-07
+                 6.3000000000000D-02    7.2067841880342D-07
+                 7.5600000000000D-02    7.3226157407407D-07
+                 8.8200000000000D-02    7.1395138888889D-07
+                 1.0080000000000D-01    6.9671812678063D-07
+                     ) ) ; 
+           
+ fly_1_8  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    7.3679362535613D-07
+                -8.8200000000000D-02    7.5423130341880D-07
+                -7.5600000000000D-02    7.7215633903134D-07
+                -6.3000000000000D-02    7.5865740740741D-07
+                -5.0400000000000D-02    7.5547774216524D-07
+                -3.7800000000000D-02    7.6662464387464D-07
+                -2.5200000000000D-02    7.5088461538462D-07
+                -1.2600000000000D-02    7.4313924501424D-07
+               0.    7.4863230056980D-07
+                 1.2600000000000D-02    7.4312054843305D-07
+                 2.5200000000000D-02    7.5084722222222D-07
+                 3.7800000000000D-02    7.6656730769231D-07
+                 5.0400000000000D-02    7.5540170940171D-07
+                 6.3000000000000D-02    7.5856267806268D-07
+                 7.5600000000000D-02    7.7204415954416D-07
+                 8.8200000000000D-02    7.5410790598291D-07
+                 1.0080000000000D-01    7.3665776353276D-07
+                     ) ) ; 
+           
+ fly_1_9  = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    7.7370940170940D-07
+                -8.8200000000000D-02    8.0144764957265D-07
+                -7.5600000000000D-02    8.0374358974359D-07
+                -6.3000000000000D-02    8.0603952991453D-07
+                -5.0400000000000D-02    8.0238372507123D-07
+                -3.7800000000000D-02    7.9936672008547D-07
+                -2.5200000000000D-02    7.9634971509972D-07
+                -1.2600000000000D-02    7.8317361111111D-07
+               0.    7.8316426282051D-07
+                 1.2600000000000D-02    7.8315491452991D-07
+                 2.5200000000000D-02    7.9631107549858D-07
+                 3.7800000000000D-02    7.9930689102564D-07
+                 5.0400000000000D-02    8.0230270655271D-07
+                 6.3000000000000D-02    8.0593856837607D-07
+                 7.5600000000000D-02    8.0362580128205D-07
+                 8.8200000000000D-02    8.0131303418803D-07
+                 1.0080000000000D-01    7.7356356837607D-07
+                     ) ) ; 
+           
+ fly_1_10 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    7.9424198717949D-07
+                -8.8200000000000D-02    8.1225925925926D-07
+                -7.5600000000000D-02    8.3075516381766D-07
+                -6.3000000000000D-02    8.1540651709402D-07
+                -5.0400000000000D-02    8.1131071937322D-07
+                -3.7800000000000D-02    8.2297489316239D-07
+                -2.5200000000000D-02    8.0577403846154D-07
+                -1.2600000000000D-02    7.9717236467236D-07
+               0.    8.0284615384615D-07
+                 1.2600000000000D-02    7.9715117521368D-07
+                 2.5200000000000D-02    8.0573165954416D-07
+                 3.7800000000000D-02    8.2291257122507D-07
+                 5.0400000000000D-02    8.1122845441595D-07
+                 6.3000000000000D-02    8.1530306267806D-07
+                 7.5600000000000D-02    8.3063051994302D-07
+                 8.8200000000000D-02    8.1211841168091D-07
+                 1.0080000000000D-01    7.9408742877493D-07
+                     ) ) ; 
+           
+ fly_1_11 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.1647845441595D-07
+                -8.8200000000000D-02    8.3510648148148D-07
+                -7.5600000000000D-02    8.5487873931624D-07
+                -6.3000000000000D-02    8.3969088319088D-07
+                -5.0400000000000D-02    8.3502920227920D-07
+                -3.7800000000000D-02    8.4651014957265D-07
+                -2.5200000000000D-02    8.2973931623932D-07
+                -1.2600000000000D-02    8.2549269943020D-07
+               0.    8.3637909544160D-07
+                 1.2600000000000D-02    8.2547275641026D-07
+                 2.5200000000000D-02    8.2969319800570D-07
+                 3.7800000000000D-02    8.4644408831909D-07
+                 5.0400000000000D-02    8.3493945868946D-07
+                 6.3000000000000D-02    8.3957995014245D-07
+                 7.5600000000000D-02    8.5474786324786D-07
+                 8.8200000000000D-02    8.3495690883191D-07
+                 1.0080000000000D-01    8.1631641737892D-07
+                     ) ) ; 
+           
+ fly_1_12 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.3948272792023D-07
+                -8.8200000000000D-02    8.7002546296296D-07
+                -7.5600000000000D-02    8.7608564814815D-07
+                -6.3000000000000D-02    8.8214583333333D-07
+                -5.0400000000000D-02    8.7589245014245D-07
+                -3.7800000000000D-02    8.7128872863248D-07
+                -2.5200000000000D-02    8.6668500712251D-07
+                -1.2600000000000D-02    8.6321616809117D-07
+               0.    8.6320432692308D-07
+                 1.2600000000000D-02    8.6319248575499D-07
+                 2.5200000000000D-02    8.6663764245014D-07
+                 3.7800000000000D-02    8.7121705840456D-07
+                 5.0400000000000D-02    8.7579647435897D-07
+                 6.3000000000000D-02    8.8202617521368D-07
+                 7.5600000000000D-02    8.7594667022792D-07
+                 8.8200000000000D-02    8.6986716524217D-07
+                 1.0080000000000D-01    8.3931196581197D-07
+                     ) ) ; 
+           
+ fly_1_13 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.5508315527066D-07
+                -8.8200000000000D-02    8.7546616809117D-07
+                -7.5600000000000D-02    9.0944533475783D-07
+                -6.3000000000000D-02    9.1292663817664D-07
+                -5.0400000000000D-02    8.9653721509972D-07
+                -3.7800000000000D-02    8.9547275641026D-07
+                -2.5200000000000D-02    8.7405644586895D-07
+                -1.2600000000000D-02    8.7004789886040D-07
+               0.    8.8226549145299D-07
+                 1.2600000000000D-02    8.7002546296296D-07
+                 2.5200000000000D-02    8.7400534188034D-07
+                 3.7800000000000D-02    8.9539672364672D-07
+                 5.0400000000000D-02    8.9643376068376D-07
+                 6.3000000000000D-02    9.1279825498576D-07
+                 7.5600000000000D-02    9.0929576210826D-07
+                 8.8200000000000D-02    8.7530288461538D-07
+                 1.0080000000000D-01    8.5490491452991D-07
+                     ) ) ; 
+           
+ fly_1_14 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.5798237179487D-07
+                -8.8200000000000D-02    8.6880893874644D-07
+                -7.5600000000000D-02    9.0299750712251D-07
+                -6.3000000000000D-02    9.0948646723647D-07
+                -5.0400000000000D-02    9.1597542735043D-07
+                -3.7800000000000D-02    9.0500302706553D-07
+                -2.5200000000000D-02    8.8214084757835D-07
+                -1.2600000000000D-02    8.7779825498575D-07
+               0.    8.8993732193732D-07
+                 1.2600000000000D-02    8.7777207977208D-07
+                 2.5200000000000D-02    8.8208974358974D-07
+                 3.7800000000000D-02    9.0492325498576D-07
+                 5.0400000000000D-02    9.1586574074074D-07
+                 6.3000000000000D-02    9.0935434472934D-07
+                 7.5600000000000D-02    9.0284294871795D-07
+                 8.8200000000000D-02    8.6864066951567D-07
+                 1.0080000000000D-01    8.5779665242165D-07
+                     ) ) ; 
+           
+ fly_1_15 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.5773557692308D-07
+                -8.8200000000000D-02    8.6180893874644D-07
+                -7.5600000000000D-02    8.7862838319088D-07
+                -6.3000000000000D-02    8.9924074074074D-07
+                -5.0400000000000D-02    9.0872489316239D-07
+                -3.7800000000000D-02    9.0174545940171D-07
+                -2.5200000000000D-02    8.9476602564103D-07
+                -1.2600000000000D-02    8.9122364672365D-07
+               0.    8.9120993589744D-07
+                 1.2600000000000D-02    8.9119622507123D-07
+                 2.5200000000000D-02    8.9471118233618D-07
+                 3.7800000000000D-02    9.0166132478632D-07
+                 5.0400000000000D-02    9.0861146723647D-07
+                 6.3000000000000D-02    8.9910363247863D-07
+                 7.5600000000000D-02    8.7847257834758D-07
+                 8.8200000000000D-02    8.6163693019943D-07
+                 1.0080000000000D-01    8.5754362535613D-07
+                     ) ) ; 
+           
+ fly_1_16 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.5903935185185D-07
+                -8.8200000000000D-02    8.5690046296296D-07
+                -7.5600000000000D-02    8.5831018518519D-07
+                -6.3000000000000D-02    8.6167307692308D-07
+                -5.0400000000000D-02    8.7125320512821D-07
+                -3.7800000000000D-02    8.8563586182336D-07
+                -2.5200000000000D-02    8.7089298433048D-07
+                -1.2600000000000D-02    8.6842877492877D-07
+               0.    8.7942111823362D-07
+                 1.2600000000000D-02    8.6840135327635D-07
+                 2.5200000000000D-02    8.7083814102564D-07
+                 3.7800000000000D-02    8.8554985754986D-07
+                 5.0400000000000D-02    8.7113977920228D-07
+                 6.3000000000000D-02    8.6153846153846D-07
+                 7.5600000000000D-02    8.5815313390313D-07
+                 8.8200000000000D-02    8.5672471509972D-07
+                 1.0080000000000D-01    8.5884116809117D-07
+                     ) ) ; 
+           
+ fly_1_17 = DEFI_FONCTION ( 
+                     NOM_PARA : 'Y'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                     VALE : ( 
+                -1.0080000000000D-01    8.6388675213675D-07
+                -8.8200000000000D-02    8.5563782051282D-07
+                -7.5600000000000D-02    8.5087019230769D-07
+                -6.3000000000000D-02    8.4755965099715D-07
+                -5.0400000000000D-02    8.4761698717949D-07
+                -3.7800000000000D-02    8.5133636039886D-07
+                -2.5200000000000D-02    8.4844088319088D-07
+                -1.2600000000000D-02    8.4633689458689D-07
+               0.    8.4644658119658D-07
+                 1.2600000000000D-02    8.4630947293447D-07
+                 2.5200000000000D-02    8.4838479344729D-07
+                 3.7800000000000D-02    8.5125160256410D-07
+                 5.0400000000000D-02    8.4750480769231D-07
+                 6.3000000000000D-02    8.4742378917379D-07
+                 7.5600000000000D-02    8.5071064814815D-07
+                 8.8200000000000D-02    8.5545584045584D-07
+                 1.0080000000000D-01    8.6368108974359D-07
+                     ) ) ; 
+           
+ fluxrd1 = DEFI_NAPPE ( 
+                     NOM_PARA : 'Z'
+                     PROL_DROIT  :'CONSTANT'
+                     PROL_GAUCHE :'CONSTANT'
+                PARA : ( 
+                         -1.0080000000000D-01
+                         -8.8200000000000D-02
+                         -7.5600000000000D-02
+                         -6.3000000000000D-02
+                         -5.0400000000000D-02
+                         -3.7800000000000D-02
+                         -2.5200000000000D-02
+                         -1.2600000000000D-02
+                        0.
+                          1.2600000000000D-02
+                          2.5200000000000D-02
+                          3.7800000000000D-02
+                          5.0400000000000D-02
+                          6.3000000000000D-02
+                          7.5600000000000D-02
+                          8.8200000000000D-02
+                          1.0080000000000D-01
+                ) 
+                FONCTION : ( 
+                      fly_1_1 
+                      fly_1_2 
+                      fly_1_3 
+                      fly_1_4 
+                      fly_1_5 
+                      fly_1_6 
+                      fly_1_7 
+                      fly_1_8 
+                      fly_1_9 
+                      fly_1_10
+                      fly_1_11
+                      fly_1_12
+                      fly_1_13
+                      fly_1_14
+                      fly_1_15
+                      fly_1_16
+                      fly_1_17
+                ) 
+                ); 
+%
+% DEFINITION DES MATERIAUX ET AFFECTATIONS
+%
+%           **** DEFINITION DES MATERIAUX SANS FLUX NEUTRONIQUE ****
+%
+%
+
+
+% Famille assemblage : numero_fam
+%
+% Embout superieur
+
+e_es  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.   )
+                          );
+nu_es  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.     )
+                          );
+al_es  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.  )
+                          );
+ mt_es  = DEFI_MATERIAU ( ELAS_FO : (    E  : e_es
+                                         NU : nu_es
+                                      ALPHA : al_es
+                                        RHO : 7800.
+                                   )
+                          );
+% Embout inferieur
+
+e_ei  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.  )
+                          );
+nu_ei = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3.    )
+                          );
+al_ei = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 100. 2.
+                                            300. 3. )
+                          );
+ mt_ei  = DEFI_MATERIAU ( ELAS_FO : (    E     : e_ei
+                                         NU    : nu_ei
+                                         ALPHA : al_ei
+                                         RHO   : 12.
+                                   )
+                          );
+ mt_rig  = DEFI_MATERIAU ( ELAS : (   E     : 1.
+                                      NU    : 0.
+                                      ALPHA : 0. 
+                                      RHO   : 0.)
+                         );
+% Fonction couple en fonction de drz pour la liaison grille/crayon
+
+ fotrac= DEFI_FONCTION ( NOM_PARA   : 'DRZ'
+                           VALE       : ( 1. 1.
+                                          0. 0.
+                                          0. 0.
+                                          0. 0.
+                                         )
+                         PROL_DROIT : 'LINEAIRE'
+                         PROL_GAUCHE: 'LINEAIRE' );
+
+
+ mt_re1 = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                            RELA_MZ  : fotrac
+                                            RIGI_N_FO:frig1
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re2 = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB      : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig2
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re3  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig3
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re4  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig4
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re5  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig5
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re6  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig6
+                                     EFFO_N_INIT :-35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re7  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig7
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re8  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig8
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re9  = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   :frig9
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+ mt_re10 = DEFI_MATERIAU ( DIS_CONTACT : (COULOMB     : 1.
+                                          RELA_MZ     : fotrac
+                                          RIGI_N_FO   : frig10
+                                     EFFO_N_INIT : -35.)
+                           ELAS : ( E     : 1.
+                                    NU    : 0.
+                                    ALPHA : 0.
+                                    RHO   : 0. )
+                         );
+
+
+% Systeme de maintien
+ e_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                              PROL_DROIT  : 'CONSTANT'
+                              PROL_GAUCHE : 'CONSTANT'
+                              VALE        : ( 0. 1.
+                                              5. 2. )
+                            );
+                            
+ nu_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                               PROL_DROIT  : 'CONSTANT'
+                               PROL_GAUCHE : 'CONSTANT'
+                               VALE        : ( 0. 1.
+                                               5. 2.   )
+                             );
+                             
+ al_ma    = DEFI_CONSTANTE (  VALE        :  0.3  );
+                          
+ sy_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                              PROL_DROIT  : 'CONSTANT'
+                               PROL_GAUCHE : 'CONSTANT'
+                               VALE        : ( 0. 1.
+                                               5. 2. )
+                              );
+                          
+ ds_ma    = DEFI_CONSTANTE (  VALE        :  0.3 );
+                          
+ np_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                               PROL_DROIT  : 'CONSTANT'
+                               PROL_GAUCHE : 'CONSTANT'
+                               VALE        : ( 0. 1.
+                                               5. 2. )
+                              ); 
+                               
+ mey_ma  = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                               PROL_DROIT  : 'CONSTANT'
+                                PROL_GAUCHE : 'CONSTANT'
+                                VALE        : ( 0. 1.
+                                                5. 2.  )
+                              );
+                              
+ mpy_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                                PROL_DROIT  : 'CONSTANT'
+                                PROL_GAUCHE : 'CONSTANT'
+                                VALE        : ( 0. 1.
+                                                5. 2.  )
+                              );
+                              
+ mez_ma     = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                                PROL_DROIT  : 'CONSTANT'
+                                PROL_GAUCHE : 'CONSTANT'
+                                VALE        : ( 0. 1.
+                                                5. 2.  )
+                               );
+                               
+ mpz_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                               PROL_DROIT  : 'CONSTANT'
+                               PROL_GAUCHE : 'CONSTANT'
+                               VALE        : (0. 1.
+                                              5. 2.  )
+                             );
+                             
+ cay_ma    = DEFI_CONSTANTE (  VALE        :  0.3 );
+
+ cby_ma    = DEFI_CONSTANTE (  VALE        :   0.3  );
+
+ caz_ma    = DEFI_CONSTANTE (  VALE        :   0.3 );
+
+ cbz_ma    = DEFI_CONSTANTE (  VALE        :   0.3 ); 
+
+ mpx_ma    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.  )
+                          ); 
+                           
+mt_ma     = DEFI_MATERIAU ( ELAS_FO : (  E       : e_ma 
+                                            NU    : nu_ma 
+                                            ALPHA : al_ma 
+                                            RHO   : 7800. )
+                            ECRO_LINE_FO:   ( D_SIGM_EPSI:ds_ma
+                                              SY : sy_ma   )
+                            VMIS_POUTRE_FO: ( NP : np_ma
+                                              MEY: mey_ma
+                                              MPY: mpy_ma
+                                              CAY: cay_ma
+                                              CBY: cby_ma
+                                              MEZ: mez_ma
+                                              MPZ: mpz_ma
+                                              CAZ: caz_ma
+                                              CBZ: cbz_ma
+                                              MPX: mpx_ma )
+                          );
+               
+%
+%           **** DEFINITION DES MATERIAUX AVEC FLUX NEUTRONIQUE ****
+%
+%
+
+% Grille
+
+
+
+e_gre     = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.   )
+                          );
+         
+e_grm     = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.   )
+                          );
+                          
+nu_gre    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.       )
+                          );
+                          
+nu_grm    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.      )
+                          );
+                          
+al_gre    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.  )
+                          );
+                         
+al_grm    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                             PROL_DROIT  : 'CONSTANT'
+                             PROL_GAUCHE : 'CONSTANT'
+                             VALE        : ( 0. 1.
+                                             5. 2.  )
+                          ); 
+                                                                                                 
+% Tube guide
+
+e_tu     = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.
+                                          )
+                          );
+
+nu_tu    = DEFI_FONCTION ( NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.     )
+                          );
+                          
+al_tu    = DEFI_FONCTION (  NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.  )
+                          );
+
+
+
+
+% Crayon
+
+e_cr     = DEFI_FONCTION (  NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.
+                                          )
+                          );
+                         
+nu_cr    = DEFI_FONCTION (  NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.    )
+                          );
+
+al_cr    = DEFI_FONCTION (  NOM_PARA    : 'TEMP'
+                            PROL_DROIT  : 'CONSTANT'
+                            PROL_GAUCHE : 'CONSTANT'
+                            VALE        : ( 0. 1.
+                                            5. 2.  )
+                          );
+
+
+% GRANDISSEMENT DES GRILLES
+
+
+
+% Grilles extremes 1 et 10
+
+mt_gre1  = DEFI_MATERIAU ( ELAS_FO : ( E     : e_gre
+                                        NU    : nu_gre
+                                        ALPHA : al_gre
+                                        RHO   : 7800. )
+                                          GRAN_IRRA:( FLUX_L   :fluxax1
+                                        FLUX_TN  :fluxrd1
+                                        FONC_MULT:flux_f1
+                                        A        : 0.
+                                        S        : 1. )
+                            LEMAITRE :( N        : 0.
+                                        UN_SUR_K : 0.
+                                        UN_SUR_M : 0.
+                                        QSR_K    : 1.  )
+                          );          
+                          
+% Grilles de melange       
+mt_grm1= DEFI_MATERIAU ( ELAS_FO : ( E        : e_grm
+                                      NU       : nu_grm
+                                      ALPHA    : al_grm
+                                      RHO      : 7800.  )
+                           GRAN_IRRA: ( FLUX_L  :fluxax1
+                                       FLUX_TN  :fluxrd1
+                                       FONC_MULT:flux_f1
+                                       A        : 0.
+                                       S        : 1. )
+                           LEMAITRE : (N        : 0.
+                                       UN_SUR_K : 0.
+                                       UN_SUR_M : 0.
+                                       QSR_K    : 2. )
+                          );
+
+% Definition des materiaux viscoplastiques ( tubes et crayons )
+
+
+mt_tu1  = DEFI_MATERIAU ( ELAS_FO : ( E         : e_tu
+                                        NU       : nu_tu
+                                        ALPHA    : al_tu
+                                        RHO      : 7800. )
+                           GRAN_IRRA: ( FLUX_L   : fluxax1
+                                        FLUX_TN  : fluxrd1
+                                        FONC_MULT: flux_f1
+                                        A        : 0.
+                                        S        : 1.)
+                           LEMAITRE : ( N        : 0.
+                                        UN_SUR_K : 0.
+                                        UN_SUR_M : 0.
+                                        QSR_K    : 2.)
+                          );
+
+
+ mt_cr1  = DEFI_MATERIAU (ELAS_FO : ( E        : e_cr
+                                        NU       : nu_cr
+                                        ALPHA    : al_cr
+                                        RHO      :7800.  )
+                           GRAN_IRRA: ( FLUX_L   : fluxax1
+                                        FLUX_TN  : fluxrd1
+                                        FONC_MULT: flux_f1
+                                        A        : 0.
+                                        S        : 1.)
+                                         LEMAITRE : ( N        : 0.
+                                        UN_SUR_K : 0.
+                                        UN_SUR_M : 0.
+                                        QSR_K    : 2.)         
+                           
+                                    );
+
+%
+%           AFFECTATION DES MATERIAUX A CHAUD - CYCLE  
+%
+%
+ a_mat_1  = AFFE_MATERIAU ( MAILLAGE : ma1
+          
+  % systeme de maintien
+                         AFFE : ( GROUP_MA : (mainti_y, mainti_z)
+                                  MATER : mt_ma
+                                  TEMP_REF: 100.
+                                ) 
+           % grilles de melange
+                         AFFE : ( GROUP_MA : gril_i
+                                  MATER : mt_grm1
+                                  TEMP_REF: 100.
+                                ) 
+           % grilles de extremes
+                         AFFE : ( GROUP_MA : gril_e 
+                                  MATER : mt_gre1
+                                  TEMP_REF: 100.
+                                ) 
+           % crayons combustibles
+                         AFFE : ( GROUP_MA : cray
+                                  MATER : mt_cr1
+                                  TEMP_REF: 100.
+                                )
+           % tubes guides
+                         AFFE : ( GROUP_MA : guid
+                                  MATER : mt_tu1
+                                  TEMP_REF: 100.
+                                )
+           % embout inferieur
+                         AFFE : ( GROUP_MA : eboinf
+                                  MATER : mt_ei
+                                  TEMP_REF: 100.
+                                )
+           %pieds
+                         AFFE : ( GROUP_MA :(pi_ple, pi_tro)
+                                  MATER : mt_ei
+                                 TEMP_REF: 100.
+                                )
+
+           % embout superieur
+                         AFFE : ( GROUP_MA : ebosup
+                                  MATER : mt_es
+                                  TEMP_REF: 100.
+                                )
+           % liaison grille tubes guides
+                         AFFE : ( GROUP_MA : rigid
+                                  MATER : mt_rig
+                                  TEMP_REF: 100.
+                                )
+          
+           % liaison grille crayon
+                         AFFE : ( GROUP_MA : ela1
+                                  MATER : mt_re1
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela2
+                                  MATER : mt_re2
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela3
+                                  MATER : mt_re3
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela4
+                                  MATER : mt_re4
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela5
+                                  MATER : mt_re5
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela6
+                                  MATER : mt_re6
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela7
+                                  MATER : mt_re7
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela8
+                                  MATER : mt_re8
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela9
+                                  MATER : mt_re9
+                                  TEMP_REF: 100.
+                                )
+                         AFFE : ( GROUP_MA : ela10
+                                  MATER : mt_re10
+                                  TEMP_REF: 100.
+                                )
+                     );
+%
+
+
+ L_INST_1 = DEFI_LIST_REEL(
+                         DEBUT: 0.0
+                         INTERVALLE : (JUSQU_A: 0.5    NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 1000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 2000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 3000.  NOMBRE: 5   )
+                         INTERVALLE : (JUSQU_A: 4000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 5000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 6000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 7000.  NOMBRE: 1   )
+                         INTERVALLE : (JUSQU_A: 8000.  NOMBRE: 1   ));
+                         
+ L_ARCH_1 = DEFI_LIST_REEL(
+                         DEBUT: 0.0
+                         INTERVALLE : (JUSQU_A: 0.5     NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 1000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 2000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 3000.   NOMBRE: 5  )
+                         INTERVALLE : (JUSQU_A: 4000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 5000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 6000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 7000.   NOMBRE: 1  )
+                         INTERVALLE : (JUSQU_A: 8000.   NOMBRE: 1  ));
+                         
+%
+% CALCUL PHASE I A V DU CYCLE 1
+%
+
+  RESU = STAT_NON_LINE( MODELE     : mo1
+                        CHAM_MATER : a_mat_1
+                        CARA_ELEM  : cara1
+                        EXCIT :( CHARGE : arch_1   FONC_MULT: arch_f1 )
+                        EXCIT :( CHARGE : foarch_1 FONC_MULT: arch_f1 )
+                        EXCIT :( CHARGE : hydr_1   FONC_MULT: hydr_f1 )
+                        EXCIT :( CHARGE : fohydr_1 FONC_MULT: hydr_f1 )
+                        EXCIT :( CHARGE : cl_di_1  FONC_MULT: cldi_f1 )
+                        EXCIT :( CHARGE : cl_per_1 )
+                        EXCIT :( CHARGE : cl_ctc   )
+                        EXCIT :( CHARGE : pesant_1 )
+                        EXCIT :( CHARGE : therm_1  )
+                        COMP_INCR :(RELATION :'VMIS_POU_LINE'
+                                    GROUP_MA : maintien)
+                        COMP_INCR :(RELATION :'ASSE_COMBU'
+                                    GROUP_MA : (crayons tub_guid     ))
+                        COMP_INCR :( RELATION :'DIS_CONTACT'
+                                     GROUP_MA : li_gr_cr)
+                        COMP_INCR :(RELATION :'ELAS'
+                                    COQUE_NCOU : 1
+                                    GROUP_MA :(embo_inf embo_sup pieds 
+                                               grilles li_gr_gu ))
+                     
+                        INCREMENT :( LIST_INST : l_inst_1
+                                     NUME_INST_FIN  :  20  
+                                   )
+                        
+                        NEWTON : ( MATRICE       : 'TANGENTE'
+                                   REAC_ITER    : 1          )
+                        RECH_LINEAIRE : (ITER_LINE_MAXI: 3)
+                        CONVERGENCE : (RESI_GLOB_RELA: 1.E-4
+                                       ITER_GLOB_MAXI: 50 
+                                       ITER_INTE_MAXI: 500
+                                       ARRET         : 'OUI' )
+                        SOLVEUR : ( METHODE : 'MULT_FRONT'
+                                    RENUM   : 'MD' )
+                        PARM_THETA : 0.5
+                        ARCHIVAGE : ( LIST_INST : l_arch_1)
+                      );
+                      
+fin();
diff --git a/Exemples/ex22/toto.comm b/Exemples/ex22/toto.comm
new file mode 100644 (file)
index 0000000..a58f368
--- /dev/null
@@ -0,0 +1,1309 @@
+
+
+DEBUT();
+# LECTURE DES PARAMETRES 
+#
+# LECTURE DES TEMPS 
+#CYCLE 1
+# LECTURE DU MAILLAGE ET DEFINITIONS DES PROPRIETES ELEMENTS FINIS
+
+
+PRE_GIBI();
+#
+
+
+MA1=LIRE_MAILLAGE();
+#
+
+
+MA1=DEFI_GROUP(reuse =MA1,
+               CREA_GROUP_NO=_F(GROUP_MA=('FIXATI','APPUI','LIAS_1','LIAS_2','EBGUIDE','MAINTIEN','MAIN_SUP','EMBO_SUP','TUB_GUID',
+                                           'GRILLES','EMBO_INF','PIEDS','CRAYONS',),),
+               MAILLAGE=MA1,);
+#
+# AFFECTATION DU MODELE
+#
+
+
+MO1=AFFE_MODELE(AFFE=(_F(GROUP_MA='CRAYONS',
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='POU_D_E',),
+                      _F(GROUP_MA='TUB_GUID',
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='POU_D_E',),
+                      _F(GROUP_MA=('EMBO_SUP','EMBO_INF',),
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='DKT',),
+                      _F(GROUP_MA='PIEDS',
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='POU_D_E',),
+                      _F(GROUP_MA='GRILLES',
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='POU_D_E',),
+                      _F(GROUP_MA='LI_GR_CR',
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='DIS_TR',),
+                      _F(GROUP_MA='LI_GR_GU',
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='DIS_TR',),
+                      _F(GROUP_MA='MAINTIEN',
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='POU_D_E',),),
+                MAILLAGE=MA1,);
+#
+# AFFECTATION DES CARACTERISTIQUES GEOMETRIQUES ELEMENTAIRES
+#
+
+
+CARA1=AFFE_CARA_ELEM(MODELE=MO1,
+                     COQUE=(_F(ANGL_REP=90.0,
+                               GROUP_MA='EBOINF',
+                               EPAIS=2.0,),
+                            _F(ANGL_REP=90.0,
+                               GROUP_MA='EBOSUP',
+                               EPAIS=3.0,),),
+                     DISCRET=(_F(VALE=(1.0,2.0,3.0,4.0,5.0,6.0,),
+                                 REPERE='LOCAL',
+                                 CARA='K_TR_D_L',
+                                 GROUP_MA='ELASTI',),
+                              _F(VALE=(1.0,2.0,3.0,4.0,5.0,6.0,),
+                                 REPERE='LOCAL',
+                                 CARA='K_TR_D_L',
+                                 GROUP_MA='RIGID',),),
+                     ORIENTATION=(_F(VALE=(1.0,0.0,0.0,),
+                                     CARA='VECT_Y',
+                                     GROUP_MA=('GRIL_I','GRIL_E',),),
+                                  _F(VALE=(0.0,1.0,0.0,),
+                                     CARA='VECT_Y',
+                                     GROUP_MA='MAINTI_Y',),
+                                  _F(VALE=(0.0,0.0,1.0,),
+                                     CARA='VECT_Y',
+                                     GROUP_MA='MAINTI_Z',),
+                                  _F(VALE=(0.0,1.0,0.0,),
+                                     CARA='VECT_Y',
+                                     GROUP_MA=('PI_PLE','PI_TRO',),),
+                                  _F(VALE=(1.0,0.0,0.0,),
+                                     CARA='VECT_Y',
+                                     GROUP_MA=('ELASTI','RIGID',),),),
+                     POUTRE=(_F(SECTION='CERCLE',
+                                GROUP_MA='CRAY',
+                                VALE=(3.0,3.0,),
+                                CARA=('R','EP',),),
+                             _F(SECTION='CERCLE',
+                                GROUP_MA='GUID',
+                                VALE=(3.0,3.0,),
+                                CARA=('R','EP',),),
+                             _F(SECTION='CERCLE',
+                                GROUP_MA='RETRE',
+                                VALE=(3.0,3.0,),
+                                CARA=('R','EP',),),
+                             _F(SECTION='RECTANGLE',
+                                GROUP_MA='GRIL_I',
+                                VALE=(3.0,3.0,),
+                                CARA=('HY','HZ',),),
+                             _F(SECTION='RECTANGLE',
+                                GROUP_MA='GRIL_E',
+                                VALE=(3.0,3.0,),
+                                CARA=('HY','HZ',),),
+                             _F(SECTION='RECTANGLE',
+                                GROUP_MA=('MAINTI_Y','MAINTI_Z',),
+                                VALE=(3.0,3.0,),
+                                CARA=('HY','HZ',),),
+                             _F(SECTION='GENERALE',
+                                GROUP_MA='PI_PLE',
+                                VALE=(1.0,2.0,3.0,4.0,),
+                                CARA=('A','IZ','IY','JX',),),
+                             _F(SECTION='GENERALE',
+                                GROUP_MA='PI_TRO',
+                                VALE=(1.0,2.0,3.0,4.0,),
+                                CARA=('A','IZ','IY','JX',),),),);
+#
+# DEFINITION DES CHARGES ET CONDITIONS LIMITES
+# DEFINITION DES TEMPERATURES NODALES EVOLUTIVES
+#
+
+
+F_TP1_1=DEFI_FONCTION(NOM_RESU='TEMP',
+                      PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='X',
+                      VALE=(0.0,1.0,5.0,4.0,),
+                      PROL_DROIT='CONSTANT',);
+
+F_TP2_1=DEFI_FONCTION(NOM_RESU='TEMP',
+                      PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='X',
+                      VALE=(0.0,1.0,5.0,4.0,),
+                      PROL_DROIT='CONSTANT',);
+
+F_TP3_1=DEFI_FONCTION(NOM_RESU='TEMP',
+                      PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='X',
+                      VALE=(0.0,1.0,5.0,4.0,),
+                      PROL_DROIT='CONSTANT',);
+
+CHTEM1_1=AFFE_CHAM_NO(GRANDEUR='TEMP_F',
+                      AFFE=(_F(FONCTION=F_TP1_1,
+                               GROUP_NO=('MAINTIEN','PIEDS','TUB_GUID','GRILLES','CRAYONS',),
+                               NOM_CMP='TEMP',),
+                            _F(FONCTION=(F_TP1_1,F_TP1_1,F_TP1_1,),
+                               GROUP_NO=('EMBO_SUP','EMBO_INF',),
+                               NOM_CMP=('TEMP_INF','TEMP','TEMP_SUP',),),),
+                      MAILLAGE=MA1,);
+
+CHTEM2_1=AFFE_CHAM_NO(GRANDEUR='TEMP_F',
+                      AFFE=(_F(FONCTION=F_TP2_1,
+                               GROUP_NO=('MAINTIEN','PIEDS','TUB_GUID','GRILLES','CRAYONS',),
+                               NOM_CMP='TEMP',),
+                            _F(FONCTION=(F_TP2_1,F_TP2_1,F_TP2_1,),
+                               GROUP_NO=('EMBO_SUP','EMBO_INF',),
+                               NOM_CMP=('TEMP_INF','TEMP','TEMP_SUP',),),),
+                      MAILLAGE=MA1,);
+
+CHTEM3_1=AFFE_CHAM_NO(GRANDEUR='TEMP_F',
+                      AFFE=(_F(FONCTION=F_TP3_1,
+                               GROUP_NO=('MAINTIEN','PIEDS','TUB_GUID','GRILLES',),
+                               NOM_CMP='TEMP',),
+                            _F(FONCTION=(F_TP3_1,F_TP3_1,F_TP3_1,),
+                               GROUP_NO=('EMBO_SUP','EMBO_INF',),
+                               NOM_CMP=('TEMP_INF','TEMP','TEMP_SUP',),),
+                            _F(FONCTION=F_TP3_1,
+                               GROUP_NO='CRAYONS',
+                               NOM_CMP='TEMP',),),
+                      MAILLAGE=MA1,);
+
+CHTH_1=CREA_RESU(NOM_CHAM='TEMP',
+                 CHAM_GD=(_F(INST=0.0,
+                             CHAM_NO=CHTEM1_1,),
+                          _F(INST=1000.0,
+                             CHAM_NO=CHTEM1_1,),
+                          _F(INST=2000.0,
+                             CHAM_NO=CHTEM2_1,),
+                          _F(INST=3000.0,
+                             CHAM_NO=CHTEM3_1,),
+                          _F(INST=4000.0,
+                             CHAM_NO=CHTEM3_1,),
+                          _F(INST=5000.0,
+                             CHAM_NO=CHTEM2_1,),
+                          _F(INST=6000.0,
+                             CHAM_NO=CHTEM1_1,),
+                          _F(INST=7000.0,
+                             CHAM_NO=CHTEM1_1,),),
+                 TYPE_RESU='EVOL_THER',);
+# CHARGEMENT: CHARGES THERMO-MECANIQUES
+# ----------------------------------------
+
+
+THERM_1=AFFE_CHAR_MECA(MODELE=MO1,
+                       TEMP_CALCULEE=CHTH_1,);
+# DEFINITION DES CONDITIONS LIMITES
+#            DES CONDITIONS DE CONTACT
+#
+# CHARGEMENT: PESANTEUR
+#
+
+
+PESANT_1=AFFE_CHAR_MECA(MODELE=MO1,
+                        PESANTEUR=(9.8100000000000005,-1.0,0.0,0.0,),);
+#
+# CONDITIONS AUX LIMITES
+#
+
+
+CL_PER_1=AFFE_CHAR_MECA(MODELE=MO1,
+                        DDL_IMPO=(_F(DZ=0.0,
+                                     DX=0.0,
+                                     DY=0.0,
+                                     GROUP_NO='FIXATI',
+                                     DRZ=0.0,
+                                     DRX=0.0,
+                                     DRY=0.0,),
+                                  _F(DX=0.0,
+                                     GROUP_NO='APPUI',),
+                                  _F(DZ=0.0,
+                                     DY=0.0,
+                                     GROUP_NO='EBGUIDE',
+                                     DRZ=0.0,
+                                     DRX=0.0,
+                                     DRY=0.0,),
+                                  _F(GROUP_NO=('LIAS_1','LIAS_2',),
+                                     DRX=0.0,),),
+                        LIAISON_GROUP=(_F(COEF_MULT_1=1.0,
+                                          DDL_1='DX',
+                                          COEF_MULT_2=-1.0,
+                                          COEF_IMPO=0.0,
+                                          GROUP_NO_1='LIAS_1',
+                                          GROUP_NO_2='LIAS_2',
+                                          DDL_2='DX',),
+                                       _F(COEF_MULT_1=1.0,
+                                          DDL_1='DY',
+                                          COEF_MULT_2=-1.0,
+                                          COEF_IMPO=0.0,
+                                          GROUP_NO_1='LIAS_1',
+                                          GROUP_NO_2='LIAS_2',
+                                          DDL_2='DY',),
+                                       _F(COEF_MULT_1=1.0,
+                                          DDL_1='DZ',
+                                          COEF_MULT_2=-1.0,
+                                          COEF_IMPO=0.0,
+                                          GROUP_NO_1='LIAS_1',
+                                          GROUP_NO_2='LIAS_2',
+                                          DDL_2='DZ',),
+                                       _F(COEF_MULT_1=1.0,
+                                          DDL_1='DRY',
+                                          COEF_MULT_2=-1.0,
+                                          COEF_IMPO=0.0,
+                                          GROUP_NO_1='LIAS_1',
+                                          GROUP_NO_2='LIAS_2',
+                                          DDL_2='DRY',),
+                                       _F(COEF_MULT_1=1.0,
+                                          DDL_1='DRZ',
+                                          COEF_MULT_2=-1.0,
+                                          COEF_IMPO=0.0,
+                                          GROUP_NO_1='LIAS_1',
+                                          GROUP_NO_2='LIAS_2',
+                                          DDL_2='DRZ',),),);
+#
+
+
+CL_CTC=AFFE_CHAR_MECA(INFO=1,
+                      MODELE=MO1,
+                      CONTACT=_F(GROUP_MA_1='EBOINF',
+                                 VECT_NORM_2=(-1.0,0.0,0.0,),
+                                 APPARIEMENT='NODAL',
+                                 GROUP_MA_2='MCRBAS',),);
+#                            
+# DEPLACEMENT DU SYSTEME DE MAINTIEN
+#
+
+
+CLDI_F1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='INST',
+                      VALE=
+                      (0.0,0.0,1000.0,0.10000000000000001,2000.0,0.20000000000000001,3000.0,
+                             0.20000000000000001,4000.0,0.20000000000000001,5000.0,0.20000000000000001,6000.0,
+                             0.10000000000000001,7000.0,0.10000000000000001,),
+                      PROL_DROIT='CONSTANT',);
+
+CL_DI_1=AFFE_CHAR_MECA(MODELE=MO1,
+                       DDL_IMPO=_F(DX=-1.0,
+                                   GROUP_NO='MAIN_SUP',),);
+# DEFINITION DES FORCES EXTERIEURES
+#
+# FONCTION MULTIPLICATIVE DE LA FORCE HYDRODYNAMIQUE NORMEE
+#
+
+
+HYDR_F1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='INST',
+                      VALE=
+                      (0.0,0.0,1000.0,0.10000000000000001,2000.0,0.20000000000000001,3000.0,
+                             0.20000000000000001,4000.0,0.20000000000000001,5000.0,0.20000000000000001,6000.0,
+                             0.10000000000000001,7000.0,0.10000000000000001,),
+                      PROL_DROIT='CONSTANT',);
+#
+# PROFIL DES FORCES HYDRODYNAMIQUES TUBES GUIDES A FROID
+#
+
+
+HYFRTU_1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='X',
+                       VALE=(0.0,1.0,5.0,2.0,),
+                       PROL_DROIT='CONSTANT',);
+#
+# PROFIL DES FORCES HYDRODYNAMIQUES CRAYON A FROID
+#
+
+
+HYFRCR_1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='X',
+                       VALE=(0.0,1.0,5.0,2.0,),
+                       PROL_DROIT='CONSTANT',);
+#
+# CHARGEMENT : FORCES HYDRODYNAMIQUES 
+#
+
+
+HYDR_1=AFFE_CHAR_MECA(FORCE_POUTRE=(_F(GROUP_MA='GRIL10',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL1',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL2',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL3',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL4',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL5',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL6',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL7',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL8',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL9',
+                                       FX=10.0,),),
+                      MODELE=MO1,
+                      FORCE_COQUE=(_F(FX=10.0,
+                                      GROUP_MA='EBOSUP',),
+                                   _F(FX=10.0,
+                                      GROUP_MA='EBOINF',),),);
+
+TOTO_1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='X',
+                     VALE=(0.0,10.0,5.0,10.0,),
+                     PROL_DROIT='CONSTANT',);
+#                         
+
+
+FOHYDR_1=AFFE_CHAR_MECA_F(FORCE_POUTRE=(_F(GROUP_MA='GUID',
+                                           FX=TOTO_1,),
+                                        _F(GROUP_MA='CRAY',
+                                           FX=TOTO_1,),),
+                          MODELE=MO1,);
+#
+# PROFIL DES FORCES D'ARCHIMEDE TUBE GUIDE 
+#
+
+
+ARFRTU_1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='X',
+                       VALE=(0.0,10.0,5.0,10.0,),
+                       PROL_DROIT='CONSTANT',);
+#
+# PROFIL DES FORCES D'ARCHIMEDE CRAYON 
+#
+
+
+ARFRCR_1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='X',
+                       VALE=(0.0,10.0,5.0,10.0,),
+                       PROL_DROIT='CONSTANT',);
+#
+# FONCTION MULTIPLICATIVE DE LA FORCE D'ARCHIMEDE
+#
+
+
+ARCH_F1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='INST',
+                      VALE=
+                      (0.0,0.0,1000.0,0.10000000000000001,2000.0,0.20000000000000001,3000.0,
+                             0.20000000000000001,4000.0,0.20000000000000001,5000.0,0.20000000000000001,6000.0,
+                             0.10000000000000001,7000.0,0.10000000000000001,),
+                      PROL_DROIT='CONSTANT',);
+#
+#
+# CHARGEMENT : FORCES D'ARCHIMEDE 
+# ----------------------------------------
+#
+
+
+ARCH_1=AFFE_CHAR_MECA(FORCE_POUTRE=(_F(GROUP_MA='MAINTIEN',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL10',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL1',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL2',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL3',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL4',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL5',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL6',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL7',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL8',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL9',
+                                       FX=10.0,),),
+                      MODELE=MO1,
+                      FORCE_COQUE=(_F(FX=10.0,
+                                      GROUP_MA='EBOSUP',),
+                                   _F(FX=10.0,
+                                      GROUP_MA='EBOINF',),),);
+
+FOARCH_1=AFFE_CHAR_MECA_F(FORCE_POUTRE=(_F(GROUP_MA='GUID',
+                                           FX=ARCH_F1,),
+                                        _F(GROUP_MA='CRAY',
+                                           FX=ARCH_F1,),),
+                          MODELE=MO1,);
+#
+# 
+# FORCE DE SERRAGE DE LA LIAISON GRILLE - CRAYON 
+#
+#
+#
+#
+#
+# DEFINITION DE LA LISTE D'INSTANTS
+#
+
+
+L_FRIG=DEFI_LIST_REEL(INTERVALLE=_F(JUSQU_A=1000.0,
+                                    NOMBRE=100,),
+                      DEBUT=0.0,);
+#
+# INRTERPRETATION DES FONCTIONS
+#
+
+
+F1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F2=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F3=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F4=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F5=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F6=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F7=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F8=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F9=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F10=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                  NOM_PARA='INST',
+                  VALE=(0.0,0.0,43200.0,0.0,),
+                  PROL_DROIT='CONSTANT',);
+
+FRIG1=CALC_FONC_INTERP(FONCTION=F1,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG2=CALC_FONC_INTERP(FONCTION=F2,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG3=CALC_FONC_INTERP(FONCTION=F3,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG4=CALC_FONC_INTERP(FONCTION=F4,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG5=CALC_FONC_INTERP(FONCTION=F5,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG6=CALC_FONC_INTERP(FONCTION=F6,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG7=CALC_FONC_INTERP(FONCTION=F7,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG8=CALC_FONC_INTERP(FONCTION=F8,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG9=CALC_FONC_INTERP(FONCTION=F9,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG10=CALC_FONC_INTERP(FONCTION=F10,
+                        PROL_DROIT='CONSTANT',
+                        INTERPOL='LIN',
+                        PROL_GAUCHE='CONSTANT',
+                        LIST_PARA=L_FRIG,);
+#
+# DEFINITION DU FLUX NEUTRONIQUE RADIAL
+
+
+FLUX_F1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='INST',
+                      VALE=
+                      (0.0,0.0,43200.0,0.0,974520.0,453280.0,2638800.0,2077850.0,4087800.0,3512790.0,
+                             5428440.0,4856770.0,7245000.0,6676270.0,8853480.0,8279770.0,10460900.0,9872610.0,12202900.0,
+                             11586900.0,13944600.0,13295200.0,14143700.0,13490200.0,15563200.0,14875300.0,17236100.0,
+                             16506900.0,17948200.0,17199200.0,18190100.0,17433400.0,18193700.0,17435200.0,18197300.0,
+                             17435200.0,18200900.0,17435200.0,),
+                      PROL_DROIT='CONSTANT',);
+# DEFINITION DU FLUX AXIAL POUR LE CYCLE 1
+
+
+FLUXAX1=LIRE_FONCTION(PROL_GAUCHE='CONSTANT',
+                      UNITE=60,
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,3.8032834757835002e-07,-0.088200000000000001,3.8083689458688999e-07,
+                             -0.075600000000000001,3.8296082621083001e-07,-0.063,3.858400997151e-07,-0.0504,
+                             3.8946100427349999e-07,-0.0378,3.9259455128205e-07,-0.0252,3.9258457977207998e-07,-0.0126,
+                             3.9294106125356001e-07,0.0,3.9399554843304999e-07,0.0126,3.9293233618234e-07,0.0252,
+                             3.9256712962963002e-07,0.0378,3.9256712962963002e-07,0.0504,3.8942610398860001e-07,0.063,
+                             3.8579522792023001e-07,0.075600000000000001,3.8290972222222002e-07,0.088200000000000001,
+                             3.8077706552707e-07,0.1008,3.8026103988603998e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_2=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,4.3595566239316001e-07,-0.088200000000000001,4.3866542022792e-07,
+                             -0.075600000000000001,4.4331463675214e-07,-0.063,4.4911556267806002e-07,-0.0504,
+                             4.5750658831909e-07,-0.0378,4.6647222222221997e-07,-0.0252,4.6002938034188002e-07,-0.0126,
+                             4.6004309116809001e-07,0.0,4.6686235754985997e-07,0.0126,4.6003311965811999e-07,0.0252,
+                             4.6000943732193999e-07,0.0378,4.6643981481481001e-07,0.0504,4.5746420940171002e-07,0.063,
+                             4.4906445868945999e-07,0.075600000000000001,4.4325356125356e-07,0.088200000000000001,
+                             4.3859686609687001e-07,0.1008,4.3587838319088001e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_3=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,4.9431891025640996e-07,-0.088200000000000001,5.0005128205127998e-07,
+                             -0.075600000000000001,5.1337197293447004e-07,-0.063,5.2915313390313001e-07,-0.0504,
+                             5.3788069800570004e-07,-0.0378,5.3504629629630004e-07,-0.0252,5.3221189458688998e-07,-0.0126,
+                             5.3136431623932e-07,0.0,5.3135870726495999e-07,0.0126,5.3135309829059998e-07,0.0252,
+                             5.3218696581197002e-07,0.0378,5.3500827991452996e-07,0.0504,5.3782959401709e-07,0.063,
+                             5.2909205840456002e-07,0.075600000000000001,5.1330217236466999e-07,0.088200000000000001,
+                             4.9997150997151001e-07,0.1008,4.9423165954416005e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_4=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,5.5489957264956999e-07,-0.088200000000000001,5.6477884615384998e-07,
+                             -0.075600000000000001,5.9007781339030998e-07,-0.063,5.9726415598291003e-07,-0.0504,
+                             6.0445049857550001e-07,-0.0378,5.9840776353275996e-07,-0.0252,5.8440651709402002e-07,-0.0126,
+                             5.8263906695157003e-07,0.0,5.9153240740741004e-07,0.0126,5.8262660256409999e-07,0.0252,
+                             5.8438034188033999e-07,0.0378,5.9836663105413e-07,0.0504,6.0439316239316004e-07,0.063,
+                             5.9719497863248e-07,0.075600000000000001,5.8999679487179001e-07,0.088200000000000001,
+                             5.6469159544159996e-07,0.1008,5.5480110398860005e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_5=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,6.1267200854701004e-07,-0.088200000000000001,6.2962357549858005e-07,
+                             -0.075600000000000001,6.5655413105413e-07,-0.063,6.6164583333332999e-07,-0.0504,
+                             6.5190242165241998e-07,-0.0378,6.5212678062678005e-07,-0.0252,6.3746616809116999e-07,-0.0126,
+                             6.3547435897436004e-07,0.0,6.4509686609687001e-07,0.0126,6.3546064814814995e-07,0.0252,
+                             6.3743625356125e-07,0.0378,6.5207941595442004e-07,0.0504,6.5183885327634997e-07,0.063,
+                             6.6156980056979999e-07,0.075600000000000001,6.5646563390312997e-07,0.088200000000000001,
+                             6.2952386039885999e-07,0.1008,6.1256356837606998e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_6=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,6.5755128205127996e-07,-0.088200000000000001,6.8336253561253996e-07,
+                             -0.075600000000000001,6.9012072649573003e-07,-0.063,6.9687891737892e-07,-0.0504,
+                             6.9362571225071001e-07,-0.0378,6.9074768518518997e-07,-0.0252,6.8786965811965998e-07,-0.0126,
+                             6.8586413817664004e-07,0.0,6.8585603632478996e-07,0.0126,6.8584793447293003e-07,0.0252,
+                             6.8783600427350001e-07,0.0378,6.9069720441594996e-07,0.0504,6.9355840455840002e-07,0.063,
+                             6.9679789886040002e-07,0.075600000000000001,6.9002412749288002e-07,0.088200000000000001,
+                             6.8325035612536003e-07,0.1008,6.5743162393161998e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_7=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,6.9684526353276003e-07,-0.088200000000000001,7.1406606125356005e-07,
+                             -0.075600000000000001,7.3236502849003e-07,-0.063,7.2076442307691997e-07,-0.0504,
+                             7.1793500712250995e-07,-0.0378,7.2835648148147998e-07,-0.0252,7.1444747150996998e-07,-0.0126,
+                             7.1130893874644005e-07,0.0,7.2107727920227996e-07,0.0126,7.1129398148148005e-07,0.0252,
+                             7.1441257122506995e-07,0.0378,7.2830288461537998e-07,0.0504,7.1786396011395999e-07,0.063,
+                             7.2067841880341996e-07,0.075600000000000001,7.3226157407406997e-07,0.088200000000000001,
+                             7.1395138888889005e-07,0.1008,6.9671812678063005e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_8=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,7.3679362535612996e-07,-0.088200000000000001,7.5423130341880005e-07,
+                             -0.075600000000000001,7.7215633903134002e-07,-0.063,7.5865740740741005e-07,-0.0504,
+                             7.5547774216523998e-07,-0.0378,7.6662464387464e-07,-0.0252,7.5088461538461995e-07,-0.0126,
+                             7.4313924501423998e-07,0.0,7.486323005698e-07,0.0126,7.4312054843304996e-07,0.0252,
+                             7.5084722222222e-07,0.0378,7.6656730769230998e-07,0.0504,7.5540170940170999e-07,0.063,
+                             7.5856267806267997e-07,0.075600000000000001,7.7204415954415998e-07,0.088200000000000001,
+                             7.5410790598291005e-07,0.1008,7.3665776353275997e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_9=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,7.7370940170939995e-07,-0.088200000000000001,8.0144764957264998e-07,
+                             -0.075600000000000001,8.0374358974358997e-07,-0.063,8.0603952991452995e-07,-0.0504,
+                             8.0238372507123005e-07,-0.0378,7.9936672008546997e-07,-0.0252,7.9634971509971995e-07,-0.0126,
+                             7.8317361111111004e-07,0.0,7.8316426282051005e-07,0.0126,7.8315491452990996e-07,0.0252,
+                             7.9631107549857995e-07,0.0378,7.9930689102564003e-07,0.0504,8.0230270655270996e-07,0.063,
+                             8.0593856837607005e-07,0.075600000000000001,8.0362580128205003e-07,0.088200000000000001,
+                             8.0131303418803e-07,0.1008,7.7356356837607e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_10=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,7.9424198717948999e-07,-0.088200000000000001,8.1225925925926001e-07,
+                              -0.075600000000000001,8.3075516381766e-07,-0.063,8.1540651709402001e-07,-0.0504,
+                              8.1131071937321997e-07,-0.0378,8.2297489316238996e-07,-0.0252,8.0577403846154003e-07,-0.0126,
+                              7.9717236467236002e-07,0.0,8.0284615384615001e-07,0.0126,7.9715117521368004e-07,0.0252,
+                              8.0573165954416005e-07,0.0378,8.2291257122506995e-07,0.0504,8.1122845441594998e-07,0.063,
+                              8.1530306267805998e-07,0.075600000000000001,8.3063051994301999e-07,0.088200000000000001,
+                              8.1211841168090999e-07,0.1008,7.9408742877492998e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLY_1_11=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,8.1647845441594995e-07,-0.088200000000000001,8.3510648148147996e-07,
+                              -0.075600000000000001,8.5487873931623998e-07,-0.063,8.3969088319087998e-07,-0.0504,
+                              8.3502920227919995e-07,-0.0378,8.4651014957265e-07,-0.0252,8.2973931623932002e-07,-0.0126,
+                              8.2549269943020005e-07,0.0,8.3637909544160002e-07,0.0126,8.2547275641026002e-07,0.0252,
+                              8.2969319800569997e-07,0.0378,8.4644408831909002e-07,0.0504,8.3493945868945997e-07,0.063,
+                              8.3957995014244996e-07,0.075600000000000001,8.5474786324785998e-07,0.088200000000000001,
+                              8.3495690883191003e-07,0.1008,8.1631641737892005e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLY_1_12=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,8.3948272792023003e-07,-0.088200000000000001,8.7002546296295996e-07,
+                              -0.075600000000000001,8.7608564814814997e-07,-0.063,8.8214583333333004e-07,-0.0504,
+                              8.7589245014244996e-07,-0.0378,8.7128872863248004e-07,-0.0252,8.6668500712251001e-07,-0.0126,
+                              8.6321616809117001e-07,0.0,8.6320432692307996e-07,0.0126,8.6319248575499001e-07,0.0252,
+                              8.6663764245014005e-07,0.0378,8.7121705840456005e-07,0.0504,8.7579647435896998e-07,0.063,
+                              8.8202617521368001e-07,0.075600000000000001,8.7594667022791999e-07,0.088200000000000001,
+                              8.6986716524217003e-07,0.1008,8.3931196581196996e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLY_1_13=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,8.5508315527066002e-07,-0.088200000000000001,8.7546616809116998e-07,
+                              -0.075600000000000001,9.0944533475783005e-07,-0.063,9.1292663817663998e-07,-0.0504,
+                              8.9653721509972004e-07,-0.0378,8.9547275641025999e-07,-0.0252,8.7405644586895003e-07,-0.0126,
+                              8.7004789886040001e-07,0.0,8.8226549145299002e-07,0.0126,8.7002546296295996e-07,0.0252,
+                              8.7400534188033999e-07,0.0378,8.9539672364672004e-07,0.0504,8.9643376068376001e-07,0.063,
+                              9.1279825498575999e-07,0.075600000000000001,9.0929576210826002e-07,0.088200000000000001,
+                              8.7530288461538001e-07,0.1008,8.5490491452990995e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLY_1_14=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,8.5798237179486999e-07,-0.088200000000000001,8.6880893874644002e-07,
+                              -0.075600000000000001,9.0299750712251001e-07,-0.063,9.0948646723646997e-07,-0.0504,
+                              9.1597542735043003e-07,-0.0378,9.0500302706552995e-07,-0.0252,8.8214084757835001e-07,-0.0126,
+                              8.7779825498574995e-07,0.0,8.8993732193732e-07,0.0126,8.7777207977207998e-07,0.0252,
+                              8.8208974358973997e-07,0.0378,9.0492325498575998e-07,0.0504,9.1586574074073996e-07,0.063,
+                              9.0935434472933995e-07,0.075600000000000001,9.0284294871795e-07,0.088200000000000001,
+                              8.6864066951567002e-07,0.1008,8.5779665242165003e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLY_1_15=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,8.5773557692308004e-07,-0.088200000000000001,8.6180893874644003e-07,
+                              -0.075600000000000001,8.7862838319088002e-07,-0.063,8.9924074074074004e-07,-0.0504,
+                              9.0872489316239005e-07,-0.0378,9.0174545940170996e-07,-0.0252,8.9476602564102997e-07,-0.0126,
+                              8.9122364672365005e-07,0.0,8.9120993589743996e-07,0.0126,8.9119622507122997e-07,0.0252,
+                              8.9471118233617996e-07,0.0378,9.0166132478632003e-07,0.0504,9.0861146723646996e-07,0.063,
+                              8.9910363247862999e-07,0.075600000000000001,8.7847257834757996e-07,0.088200000000000001,
+                              8.6163693019942995e-07,0.1008,8.5754362535613004e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLY_1_16=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,8.5903935185184999e-07,-0.088200000000000001,8.5690046296295998e-07,
+                              -0.075600000000000001,8.5831018518518999e-07,-0.063,8.6167307692307999e-07,-0.0504,
+                              8.7125320512820998e-07,-0.0378,8.8563586182335997e-07,-0.0252,8.7089298433048003e-07,-0.0126,
+                              8.6842877492877004e-07,0.0,8.7942111823362e-07,0.0126,8.6840135327634996e-07,0.0252,
+                              8.7083814102563997e-07,0.0378,8.8554985754985996e-07,0.0504,8.7113977920228004e-07,0.063,
+                              8.6153846153846001e-07,0.075600000000000001,8.5815313390312996e-07,0.088200000000000001,
+                              8.5672471509971999e-07,0.1008,8.5884116809116995e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLY_1_17=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,8.6388675213674999e-07,-0.088200000000000001,8.5563782051281999e-07,
+                              -0.075600000000000001,8.5087019230768996e-07,-0.063,8.4755965099714995e-07,-0.0504,
+                              8.4761698717949003e-07,-0.0378,8.5133636039885996e-07,-0.0252,8.4844088319088001e-07,-0.0126,
+                              8.4633689458689002e-07,0.0,8.4644658119657999e-07,0.0126,8.4630947293447004e-07,0.0252,
+                              8.4838479344729004e-07,0.0378,8.512516025641e-07,0.0504,8.4750480769231e-07,0.063,
+                              8.4742378917379002e-07,0.075600000000000001,8.5071064814815003e-07,0.088200000000000001,
+                              8.5545584045584e-07,0.1008,8.6368108974359e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLUXRD1=DEFI_NAPPE(FONCTION=(FLY_1_1,FLY_1_2,FLY_1_3,FLY_1_4,FLY_1_5,FLY_1_6,FLY_1_7,FLY_1_8,FLY_1_9,FLY_1_10,FLY_1_11,FLY_1_12,
+                              FLY_1_13,FLY_1_14,FLY_1_15,FLY_1_16,FLY_1_17,),
+                   PARA=
+                   (-0.1008,-0.088200000000000001,-0.075600000000000001,-0.063,-0.0504,-0.0378,-0.0252,
+                          -0.0126,0.0,0.0126,0.0252,0.0378,0.0504,0.063,0.075600000000000001,0.088200000000000001,0.1008,),
+                   PROL_GAUCHE='CONSTANT',
+                   NOM_PARA='Z',
+                   PROL_DROIT='CONSTANT',);
+#
+# DEFINITION DES MATERIAUX ET AFFECTATIONS
+#
+#           **** DEFINITION DES MATERIAUX SANS FLUX NEUTRONIQUE ****
+#
+#
+# FAMILLE ASSEMBLAGE : NUMERO_FAM
+#
+# EMBOUT SUPERIEUR
+
+
+E_ES=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                   NOM_PARA='TEMP',
+                   VALE=(100.0,2.0,300.0,3.0,),
+                   PROL_DROIT='CONSTANT',);
+
+NU_ES=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(100.0,2.0,300.0,3.0,),
+                    PROL_DROIT='CONSTANT',);
+
+AL_ES=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(100.0,2.0,300.0,3.0,),
+                    PROL_DROIT='CONSTANT',);
+
+MT_ES=DEFI_MATERIAU(ELAS_FO=_F(NU=NU_ES,
+                               ALPHA=AL_ES,
+                               RHO=7800.0,
+                               E=E_ES,),);
+# EMBOUT INFERIEUR
+
+
+E_EI=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                   NOM_PARA='TEMP',
+                   VALE=(100.0,2.0,300.0,3.0,),
+                   PROL_DROIT='CONSTANT',);
+
+NU_EI=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(100.0,2.0,300.0,3.0,),
+                    PROL_DROIT='CONSTANT',);
+
+AL_EI=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(100.0,2.0,300.0,3.0,),
+                    PROL_DROIT='CONSTANT',);
+
+MT_EI=DEFI_MATERIAU(ELAS_FO=_F(NU=NU_EI,
+                               ALPHA=AL_EI,
+                               RHO=12.0,
+                               E=E_EI,),);
+
+MT_RIG=DEFI_MATERIAU(ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+# FONCTION COUPLE EN FONCTION DE DRZ POUR LA LIAISON GRILLE/CRAYON
+
+
+FOTRAC=DEFI_FONCTION(PROL_GAUCHE='LINEAIRE',
+                     NOM_PARA='DRZ',
+                     VALE=(1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,),
+                     PROL_DROIT='LINEAIRE',);
+
+MT_RE1=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG1,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE2=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG2,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE3=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG3,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE4=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG4,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE5=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG5,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE6=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG6,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE7=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG7,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE8=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG8,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE9=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG9,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE10=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                     RELA_MZ=FOTRAC,
+                                     RIGI_N_FO=FRIG10,
+                                     COULOMB=1.0,),
+                      ELAS=_F(NU=0.0,
+                              ALPHA=0.0,
+                              RHO=0.0,
+                              E=1.0,),);
+# SYSTEME DE MAINTIEN
+
+
+E_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                   NOM_PARA='TEMP',
+                   VALE=(0.0,1.0,5.0,2.0,),
+                   PROL_DROIT='CONSTANT',);
+
+NU_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+
+AL_MA=DEFI_CONSTANTE(VALE=0.29999999999999999,);
+
+SY_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+
+DS_MA=DEFI_CONSTANTE(VALE=0.29999999999999999,);
+
+NP_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+
+MEY_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+MPY_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+MEZ_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+MPZ_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+CAY_MA=DEFI_CONSTANTE(VALE=0.29999999999999999,);
+
+CBY_MA=DEFI_CONSTANTE(VALE=0.29999999999999999,);
+
+CAZ_MA=DEFI_CONSTANTE(VALE=0.29999999999999999,);
+
+CBZ_MA=DEFI_CONSTANTE(VALE=0.29999999999999999,);
+
+MPX_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+MT_MA=DEFI_MATERIAU(VMIS_POUTRE_FO=_F(MEZ=MEZ_MA,
+                                      MPX=MPX_MA,
+                                      MPZ=MPZ_MA,
+                                      CBY=CBY_MA,
+                                      NP=NP_MA,
+                                      CBZ=CBZ_MA,
+                                      MEY=MEY_MA,
+                                      CAY=CAY_MA,
+                                      CAZ=CAZ_MA,
+                                      MPY=MPY_MA,),
+                    ECRO_LINE_FO=_F(D_SIGM_EPSI=DS_MA,
+                                    SY=SY_MA,),
+                    ELAS_FO=_F(NU=NU_MA,
+                               ALPHA=AL_MA,
+                               RHO=7800.0,
+                               E=E_MA,),);
+#
+#           **** DEFINITION DES MATERIAUX AVEC FLUX NEUTRONIQUE ****
+#
+#
+# GRILLE
+
+
+E_GRE=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+
+E_GRM=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+
+NU_GRE=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+NU_GRM=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+AL_GRE=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+AL_GRM=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+# TUBE GUIDE
+
+
+E_TU=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                   NOM_PARA='TEMP',
+                   VALE=(0.0,1.0,5.0,2.0,),
+                   PROL_DROIT='CONSTANT',);
+
+NU_TU=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+
+AL_TU=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+# CRAYON
+
+
+E_CR=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                   NOM_PARA='TEMP',
+                   VALE=(0.0,1.0,5.0,2.0,),
+                   PROL_DROIT='CONSTANT',);
+
+NU_CR=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+
+AL_CR=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+# GRANDISSEMENT DES GRILLES
+# GRILLES EXTREMES 1 ET 10
+
+
+MT_GRE1=DEFI_MATERIAU(GRAN_IRRA=_F(FONC_MULT=FLUX_F1,
+                                   FLUX_L=FLUXAX1,
+                                   FLUX_TN=FLUXRD1,
+                                   S=1.0,
+                                   A=0.0,),
+                      LEMAITRE=_F(N=0.0,
+                                  UN_SUR_M=0.0,
+                                  QSR_K=1.0,
+                                  UN_SUR_K=0.0,),
+                      ELAS_FO=_F(NU=NU_GRE,
+                                 ALPHA=AL_GRE,
+                                 RHO=7800.0,
+                                 E=E_GRE,),);
+# GRILLES DE MELANGE       
+
+
+MT_GRM1=DEFI_MATERIAU(GRAN_IRRA=_F(FONC_MULT=FLUX_F1,
+                                   FLUX_L=FLUXAX1,
+                                   FLUX_TN=FLUXRD1,
+                                   S=1.0,
+                                   A=0.0,),
+                      LEMAITRE=_F(N=0.0,
+                                  UN_SUR_M=0.0,
+                                  QSR_K=2.0,
+                                  UN_SUR_K=0.0,),
+                      ELAS_FO=_F(NU=NU_GRM,
+                                 ALPHA=AL_GRM,
+                                 RHO=7800.0,
+                                 E=E_GRM,),);
+# DEFINITION DES MATERIAUX VISCOPLASTIQUES ( TUBES ET CRAYONS )
+
+
+MT_TU1=DEFI_MATERIAU(GRAN_IRRA=_F(FONC_MULT=FLUX_F1,
+                                  FLUX_L=FLUXAX1,
+                                  FLUX_TN=FLUXRD1,
+                                  S=1.0,
+                                  A=0.0,),
+                     LEMAITRE=_F(N=0.0,
+                                 UN_SUR_M=0.0,
+                                 QSR_K=2.0,
+                                 UN_SUR_K=0.0,),
+                     ELAS_FO=_F(NU=NU_TU,
+                                ALPHA=AL_TU,
+                                RHO=7800.0,
+                                E=E_TU,),);
+
+MT_CR1=DEFI_MATERIAU(GRAN_IRRA=_F(FONC_MULT=FLUX_F1,
+                                  FLUX_L=FLUXAX1,
+                                  FLUX_TN=FLUXRD1,
+                                  S=1.0,
+                                  A=0.0,),
+                     LEMAITRE=_F(N=0.0,
+                                 UN_SUR_M=0.0,
+                                 QSR_K=2.0,
+                                 UN_SUR_K=0.0,),
+                     ELAS_FO=_F(NU=NU_CR,
+                                ALPHA=AL_CR,
+                                RHO=7800.0,
+                                E=E_CR,),);
+#
+#           AFFECTATION DES MATERIAUX A CHAUD - CYCLE  
+#
+#
+
+
+A_MAT_1=AFFE_MATERIAU(AFFE=(_F(TEMP_REF=100.0,
+                               MATER=MT_MA,
+                               GROUP_MA=('MAINTI_Y','MAINTI_Z',),),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_GRM1,
+                               GROUP_MA='GRIL_I',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_GRE1,
+                               GROUP_MA='GRIL_E',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_CR1,
+                               GROUP_MA='CRAY',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_TU1,
+                               GROUP_MA='GUID',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_EI,
+                               GROUP_MA='EBOINF',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_EI,
+                               GROUP_MA=('PI_PLE','PI_TRO',),),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_ES,
+                               GROUP_MA='EBOSUP',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RIG,
+                               GROUP_MA='RIGID',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE1,
+                               GROUP_MA='ELA1',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE2,
+                               GROUP_MA='ELA2',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE3,
+                               GROUP_MA='ELA3',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE4,
+                               GROUP_MA='ELA4',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE5,
+                               GROUP_MA='ELA5',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE6,
+                               GROUP_MA='ELA6',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE7,
+                               GROUP_MA='ELA7',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE8,
+                               GROUP_MA='ELA8',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE9,
+                               GROUP_MA='ELA9',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE10,
+                               GROUP_MA='ELA10',),),
+                      MAILLAGE=MA1,);
+#
+
+
+L_INST_1=DEFI_LIST_REEL(INTERVALLE=(_F(JUSQU_A=0.5,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=1000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=2000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=3000.0,
+                                       NOMBRE=5,),
+                                    _F(JUSQU_A=4000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=5000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=6000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=7000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=8000.0,
+                                       NOMBRE=1,),),
+                        DEBUT=0.0,);
+
+L_ARCH_1=DEFI_LIST_REEL(INTERVALLE=(_F(JUSQU_A=0.5,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=1000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=2000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=3000.0,
+                                       NOMBRE=5,),
+                                    _F(JUSQU_A=4000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=5000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=6000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=7000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=8000.0,
+                                       NOMBRE=1,),),
+                        DEBUT=0.0,);
+#
+# CALCUL PHASE I A V DU CYCLE 1
+#
+
+
+RESU=STAT_NON_LINE(CHAM_MATER=A_MAT_1,
+                   MODELE=MO1,
+                   ARCHIVAGE=_F(LIST_INST=L_ARCH_1,),
+                   CONVERGENCE=_F(ITER_GLOB_MAXI=50,
+                                  ITER_INTE_MAXI=500,
+                                  RESI_GLOB_RELA=1.E-4,
+                                  ARRET='OUI',),
+                   COMP_INCR=(_F(RELATION='VMIS_POU_LINE',
+                                 GROUP_MA='MAINTIEN',),
+                              _F(RELATION='ASSE_COMBU',
+                                 GROUP_MA=('CRAYONS','TUB_GUID',),),
+                              _F(RELATION='DIS_CONTACT',
+                                 GROUP_MA='LI_GR_CR',),
+                              _F(COQUE_NCOU=1,
+                                 RELATION='ELAS',
+                                 GROUP_MA=('EMBO_INF','EMBO_SUP','PIEDS','GRILLES','LI_GR_GU',),),),
+                   INCREMENT=_F(NUME_INST_FIN=20,
+                                LIST_INST=L_INST_1,),
+                   CARA_ELEM=CARA1,
+                   RECH_LINEAIRE=_F(ITER_LINE_MAXI=3,),
+                   NEWTON=_F(REAC_ITER=1,
+                             MATRICE='TANGENTE',),
+                   SOLVEUR=_F(METHODE='MULT_FRONT',
+                              RENUM='MD',),
+                   EXCIT=(_F(FONC_MULT=ARCH_F1,
+                             CHARGE=ARCH_1,),
+                          _F(FONC_MULT=ARCH_F1,
+                             CHARGE=FOARCH_1,),
+                          _F(FONC_MULT=HYDR_F1,
+                             CHARGE=HYDR_1,),
+                          _F(FONC_MULT=HYDR_F1,
+                             CHARGE=FOHYDR_1,),
+                          _F(FONC_MULT=CLDI_F1,
+                             CHARGE=CL_DI_1,),
+                          _F(CHARGE=CL_PER_1,),
+                          _F(CHARGE=CL_CTC,),
+                          _F(CHARGE=PESANT_1,),
+                          _F(CHARGE=THERM_1,),),
+                   PARM_THETA=0.5,);
+
+FIN();
diff --git a/Exemples/ex22/tutu.comm b/Exemples/ex22/tutu.comm
new file mode 100644 (file)
index 0000000..ca0b5d1
--- /dev/null
@@ -0,0 +1,1610 @@
+
+
+DEBUT();
+% LECTURE DES PARAMETRES 
+%
+% LECTURE DES TEMPS 
+%CYCLE 1
+% LECTURE DU MAILLAGE ET DEFINITIONS DES PROPRIETES ELEMENTS FINIS
+
+
+PRE_GIBI();
+%
+
+
+MA1=LIRE_MAILLAGE();
+%
+
+
+&MA1=DEFI_GROUP(CREA_GROUP_NO:(GROUP_MA:(FIXATI,APPUI,LIAS_1,LIAS_2,
+                                          EBGUIDE,MAINTIEN,
+                                          MAIN_SUP,EMBO_SUP,
+                                          TUB_GUID,GRILLES,
+                                          EMBO_INF,PIEDS,
+                                          CRAYONS),)
+                MAILLAGE:MA1);
+%
+% AFFECTATION DU MODELE
+%
+
+
+MO1=AFFE_MODELE(AFFE:(GROUP_MA:CRAYONS
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'POU_D_E')
+                AFFE:(GROUP_MA:TUB_GUID
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'POU_D_E')
+                AFFE:(GROUP_MA:(EMBO_SUP,EMBO_INF)
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'DKT')
+                AFFE:(GROUP_MA:PIEDS
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'POU_D_E')
+                AFFE:(GROUP_MA:GRILLES
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'POU_D_E')
+                AFFE:(GROUP_MA:LI_GR_CR
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'DIS_TR')
+                AFFE:(GROUP_MA:LI_GR_GU
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'DIS_TR')
+                AFFE:(GROUP_MA:MAINTIEN
+                      PHENOMENE:'MECANIQUE'
+                      MODELISATION:'POU_D_E')
+                MAILLAGE:MA1);
+%
+% AFFECTATION DES CARACTERISTIQUES GEOMETRIQUES ELEMENTAIRES
+%
+
+
+CARA1=AFFE_CARA_ELEM(MODELE:MO1
+                     COQUE:(ANGL_REP:90.0
+                            GROUP_MA:EBOINF
+                            EPAIS:2.0)
+                     COQUE:(ANGL_REP:90.0
+                            GROUP_MA:EBOSUP
+                            EPAIS:3.0)
+                     DISCRET:(VALE:(1.0,2.0,3.0,4.0,5.0,6.0)
+                              REPERE:'LOCAL'
+                              CARA:'K_TR_D_L'
+                              GROUP_MA:ELASTI)
+                     DISCRET:(VALE:(1.0,2.0,3.0,4.0,5.0,6.0)
+                              REPERE:'LOCAL'
+                              CARA:'K_TR_D_L'
+                              GROUP_MA:RIGID)
+                     ORIENTATION:(VALE:(1.0,0.0,0.0)
+                                  CARA:'VECT_Y'
+                                  GROUP_MA:(GRIL_I,GRIL_E))
+                     ORIENTATION:(VALE:(0.0,1.0,0.0)
+                                  CARA:'VECT_Y'
+                                  GROUP_MA:(MAINTI_Y))
+                     ORIENTATION:(VALE:(0.0,0.0,1.0)
+                                  CARA:'VECT_Y'
+                                  GROUP_MA:(MAINTI_Z))
+                     ORIENTATION:(VALE:(0.0,1.0,0.0)
+                                  CARA:'VECT_Y'
+                                  GROUP_MA:(PI_PLE,PI_TRO))
+                     ORIENTATION:(VALE:(1.0,0.0,0.0)
+                                  CARA:'VECT_Y'
+                                  GROUP_MA:(ELASTI,RIGID))
+                     POUTRE:(SECTION:'CERCLE'
+                             GROUP_MA:CRAY
+                             VALE:(3.0,3.0)
+                             CARA:('R','EP'))
+                     POUTRE:(SECTION:'CERCLE'
+                             GROUP_MA:GUID
+                             VALE:(3.0,3.0)
+                             CARA:('R','EP'))
+                     POUTRE:(SECTION:'CERCLE'
+                             GROUP_MA:RETRE
+                             VALE:(3.0,3.0)
+                             CARA:('R','EP'))
+                     POUTRE:(SECTION:'RECTANGLE'
+                             GROUP_MA:(GRIL_I)
+                             VALE:(3.0,3.0)
+                             CARA:('HY','HZ'))
+                     POUTRE:(SECTION:'RECTANGLE'
+                             GROUP_MA:(GRIL_E)
+                             VALE:(3.0,3.0)
+                             CARA:('HY','HZ'))
+                     POUTRE:(SECTION:'RECTANGLE'
+                             GROUP_MA:(MAINTI_Y,MAINTI_Z)
+                             VALE:(3.0,3.0)
+                             CARA:('HY','HZ'))
+                     POUTRE:(SECTION:'GENERALE'
+                             GROUP_MA:PI_PLE
+                             VALE:(1.0,2.0,3.0,4.0)
+                             CARA:('A','IZ','IY','JX'))
+                     POUTRE:(SECTION:'GENERALE'
+                             GROUP_MA:PI_TRO
+                             VALE:(1.0,2.0,3.0,4.0)
+                             CARA:('A','IZ','IY','JX')));
+%
+% DEFINITION DES CHARGES ET CONDITIONS LIMITES
+% DEFINITION DES TEMPERATURES NODALES EVOLUTIVES
+%
+
+
+F_TP1_1=DEFI_FONCTION(NOM_RESU:'TEMP'
+                      PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'X'
+                      VALE:(0.0,1.0,5.0,4.0)
+                      PROL_DROIT:'CONSTANT');
+
+F_TP2_1=DEFI_FONCTION(NOM_RESU:'TEMP'
+                      PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'X'
+                      VALE:(0.0,1.0,5.0,4.0)
+                      PROL_DROIT:'CONSTANT');
+
+F_TP3_1=DEFI_FONCTION(NOM_RESU:'TEMP'
+                      PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'X'
+                      VALE:(0.0,1.0,5.0,4.0)
+                      PROL_DROIT:'CONSTANT');
+
+CHTEM1_1=AFFE_CHAM_NO(GRANDEUR:'TEMP_F'
+                      AFFE:(FONCTION:F_TP1_1
+                            GROUP_NO:
+                            
+                                       (MAINTIEN,PIEDS,
+                                       TUB_GUID,GRILLES,
+                                       CRAYONS),
+                            NOM_CMP:'TEMP')
+                      AFFE:(FONCTION:(F_TP1_1,F_TP1_1,F_TP1_1)
+                            GROUP_NO:(EMBO_SUP,EMBO_INF)
+                            NOM_CMP:('TEMP_INF','TEMP','TEMP_SUP'))
+                      MAILLAGE:MA1);
+
+CHTEM2_1=AFFE_CHAM_NO(GRANDEUR:'TEMP_F'
+                      AFFE:(FONCTION:F_TP2_1
+                            GROUP_NO:
+                            
+                                       (MAINTIEN,PIEDS,
+                                       TUB_GUID,GRILLES,
+                                       CRAYONS),
+                            NOM_CMP:'TEMP')
+                      AFFE:(FONCTION:(F_TP2_1,F_TP2_1,F_TP2_1)
+                            GROUP_NO:(EMBO_SUP,EMBO_INF)
+                            NOM_CMP:('TEMP_INF','TEMP','TEMP_SUP'))
+                      MAILLAGE:MA1);
+
+CHTEM3_1=AFFE_CHAM_NO(GRANDEUR:'TEMP_F'
+                      AFFE:(FONCTION:F_TP3_1
+                            GROUP_NO:(MAINTIEN,PIEDS,TUB_GUID,GRILLES)
+                            NOM_CMP:'TEMP')
+                      AFFE:(FONCTION:(F_TP3_1,F_TP3_1,F_TP3_1)
+                            GROUP_NO:(EMBO_SUP,EMBO_INF)
+                            NOM_CMP:('TEMP_INF','TEMP','TEMP_SUP'))
+                      AFFE:(FONCTION:F_TP3_1
+                            GROUP_NO:CRAYONS
+                            NOM_CMP:'TEMP')
+                      MAILLAGE:MA1);
+
+CHTH_1=CREA_RESU(NOM_CHAM:'TEMP'
+                 CHAM_GD:(INST:0.0
+                          CHAM_NO:CHTEM1_1)
+                 CHAM_GD:(INST:1000.0
+                          CHAM_NO:CHTEM1_1)
+                 CHAM_GD:(INST:2000.0
+                          CHAM_NO:CHTEM2_1)
+                 CHAM_GD:(INST:3000.0
+                          CHAM_NO:CHTEM3_1)
+                 CHAM_GD:(INST:4000.0
+                          CHAM_NO:CHTEM3_1)
+                 CHAM_GD:(INST:5000.0
+                          CHAM_NO:CHTEM2_1)
+                 CHAM_GD:(INST:6000.0
+                          CHAM_NO:CHTEM1_1)
+                 CHAM_GD:(INST:7000.0
+                          CHAM_NO:CHTEM1_1)
+                 TYPE_RESU:'EVOL_THER');
+% CHARGEMENT: CHARGES THERMO-MECANIQUES
+% ----------------------------------------
+
+
+THERM_1=AFFE_CHAR_MECA(MODELE:MO1
+                       TEMP_CALCULEE:CHTH_1);
+% DEFINITION DES CONDITIONS LIMITES
+%            DES CONDITIONS DE CONTACT
+%
+% CHARGEMENT: PESANTEUR
+%
+
+
+PESANT_1=AFFE_CHAR_MECA(MODELE:MO1
+                        PESANTEUR:(9.8100000000000005,-1.0,0.0,0.0));
+%
+% CONDITIONS AUX LIMITES
+%
+
+
+CL_PER_1=AFFE_CHAR_MECA(MODELE:MO1
+                        DDL_IMPO:(DZ:0.0
+                                  DX:0.0
+                                  DY:0.0
+                                  GROUP_NO:FIXATI
+                                  DRZ:0.0
+                                  DRX:0.0
+                                  DRY:0.0)
+                        DDL_IMPO:(DX:0.0
+                                  GROUP_NO:APPUI)
+                        DDL_IMPO:(DZ:0.0
+                                  DY:0.0
+                                  GROUP_NO:EBGUIDE
+                                  DRZ:0.0
+                                  DRX:0.0
+                                  DRY:0.0)
+                        DDL_IMPO:(GROUP_NO:(LIAS_1,LIAS_2)
+                                  DRX:0.0)
+                        LIAISON_GROUP:(COEF_MULT_1:1.0
+                                       DDL_1:'DX'
+                                       COEF_MULT_2:-1.0
+                                       COEF_IMPO:0.0
+                                       GROUP_NO_1:LIAS_1
+                                       GROUP_NO_2:LIAS_2
+                                       DDL_2:'DX')
+                        LIAISON_GROUP:(COEF_MULT_1:1.0
+                                       DDL_1:'DY'
+                                       COEF_MULT_2:-1.0
+                                       COEF_IMPO:0.0
+                                       GROUP_NO_1:LIAS_1
+                                       GROUP_NO_2:LIAS_2
+                                       DDL_2:'DY')
+                        LIAISON_GROUP:(COEF_MULT_1:1.0
+                                       DDL_1:'DZ'
+                                       COEF_MULT_2:-1.0
+                                       COEF_IMPO:0.0
+                                       GROUP_NO_1:LIAS_1
+                                       GROUP_NO_2:LIAS_2
+                                       DDL_2:'DZ')
+                        LIAISON_GROUP:(COEF_MULT_1:1.0
+                                       DDL_1:'DRY'
+                                       COEF_MULT_2:-1.0
+                                       COEF_IMPO:0.0
+                                       GROUP_NO_1:LIAS_1
+                                       GROUP_NO_2:LIAS_2
+                                       DDL_2:'DRY')
+                        LIAISON_GROUP:(COEF_MULT_1:1.0
+                                       DDL_1:'DRZ'
+                                       COEF_MULT_2:-1.0
+                                       COEF_IMPO:0.0
+                                       GROUP_NO_1:LIAS_1
+                                       GROUP_NO_2:LIAS_2
+                                       DDL_2:'DRZ'));
+%
+
+
+CL_CTC=AFFE_CHAR_MECA(INFO:1
+                      MODELE:MO1
+                      CONTACT:(GROUP_MA_1:EBOINF
+                               VECT_NORM_2:(-1.0,0.0,0.0)
+                               APPARIEMENT:'NODAL'
+                               GROUP_MA_2:MCRBAS));
+%                            
+% DEPLACEMENT DU SYSTEME DE MAINTIEN
+%
+
+
+CLDI_F1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'INST'
+                      VALE:
+                      (0.0,0.0,1000.0,
+                             0.10000000000000001,2000.0,
+                             0.20000000000000001,3000.0,
+                             0.20000000000000001,4000.0,
+                             0.20000000000000001,5000.0,
+                             0.20000000000000001,6000.0,
+                             0.10000000000000001,7000.0,
+                             0.10000000000000001),
+                      PROL_DROIT:'CONSTANT');
+
+CL_DI_1=AFFE_CHAR_MECA(MODELE:MO1
+                       DDL_IMPO:(DX:-1.0
+                                 GROUP_NO:MAIN_SUP));
+% DEFINITION DES FORCES EXTERIEURES
+%
+% FONCTION MULTIPLICATIVE DE LA FORCE HYDRODYNAMIQUE NORMEE
+%
+
+
+HYDR_F1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'INST'
+                      VALE:
+                      (0.0,0.0,1000.0,
+                             0.10000000000000001,2000.0,
+                             0.20000000000000001,3000.0,
+                             0.20000000000000001,4000.0,
+                             0.20000000000000001,5000.0,
+                             0.20000000000000001,6000.0,
+                             0.10000000000000001,7000.0,
+                             0.10000000000000001),
+                      PROL_DROIT:'CONSTANT');
+%
+% PROFIL DES FORCES HYDRODYNAMIQUES TUBES GUIDES A FROID
+%
+
+
+HYFRTU_1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'X'
+                       VALE:(0.0,1.0,5.0,2.0)
+                       PROL_DROIT:'CONSTANT');
+%
+% PROFIL DES FORCES HYDRODYNAMIQUES CRAYON A FROID
+%
+
+
+HYFRCR_1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'X'
+                       VALE:(0.0,1.0,5.0,2.0)
+                       PROL_DROIT:'CONSTANT');
+%
+% CHARGEMENT : FORCES HYDRODYNAMIQUES 
+%
+
+
+HYDR_1=AFFE_CHAR_MECA(FORCE_POUTRE:(GROUP_MA:(GRIL10)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL1)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL2)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL3)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL4)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL5)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL6)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL7)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL8)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL9)
+                                    FX:10.0)
+                      MODELE:MO1
+                      FORCE_COQUE:(FX:10.0
+                                   GROUP_MA:EBOSUP)
+                      FORCE_COQUE:(FX:10.0
+                                   GROUP_MA:EBOINF));
+
+TOTO_1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'X'
+                     VALE:(0.0,10.0,5.0,10.0)
+                     PROL_DROIT:'CONSTANT');
+%                         
+
+
+FOHYDR_1=AFFE_CHAR_MECA_F(FORCE_POUTRE:(GROUP_MA:(GUID)
+                                        FX:TOTO_1)
+                          FORCE_POUTRE:(GROUP_MA:CRAY
+                                        FX:TOTO_1)
+                          MODELE:MO1);
+%
+% PROFIL DES FORCES D'ARCHIMEDE TUBE GUIDE 
+%
+
+
+ARFRTU_1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'X'
+                       VALE:(0.0,10.0,5.0,10.0)
+                       PROL_DROIT:'CONSTANT');
+%
+% PROFIL DES FORCES D'ARCHIMEDE CRAYON 
+%
+
+
+ARFRCR_1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'X'
+                       VALE:(0.0,10.0,5.0,10.0)
+                       PROL_DROIT:'CONSTANT');
+%
+% FONCTION MULTIPLICATIVE DE LA FORCE D'ARCHIMEDE
+%
+
+
+ARCH_F1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'INST'
+                      VALE:
+                      (0.0,0.0,1000.0,
+                             0.10000000000000001,2000.0,
+                             0.20000000000000001,3000.0,
+                             0.20000000000000001,4000.0,
+                             0.20000000000000001,5000.0,
+                             0.20000000000000001,6000.0,
+                             0.10000000000000001,7000.0,
+                             0.10000000000000001),
+                      PROL_DROIT:'CONSTANT');
+%
+%
+% CHARGEMENT : FORCES D'ARCHIMEDE 
+% ----------------------------------------
+%
+
+
+ARCH_1=AFFE_CHAR_MECA(FORCE_POUTRE:(GROUP_MA:MAINTIEN
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL10)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL1)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL2)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL3)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL4)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL5)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL6)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL7)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL8)
+                                    FX:10.0)
+                      FORCE_POUTRE:(GROUP_MA:(GRIL9)
+                                    FX:10.0)
+                      MODELE:MO1
+                      FORCE_COQUE:(FX:10.0
+                                   GROUP_MA:EBOSUP)
+                      FORCE_COQUE:(FX:10.0
+                                   GROUP_MA:EBOINF));
+
+FOARCH_1=AFFE_CHAR_MECA_F(FORCE_POUTRE:(GROUP_MA:GUID
+                                        FX:ARCH_F1)
+                          FORCE_POUTRE:(GROUP_MA:CRAY
+                                        FX:ARCH_F1)
+                          MODELE:MO1);
+%
+% 
+% FORCE DE SERRAGE DE LA LIAISON GRILLE - CRAYON 
+%
+%
+%
+%
+%
+% DEFINITION DE LA LISTE D'INSTANTS
+%
+
+
+L_FRIG=DEFI_LIST_REEL(INTERVALLE:(JUSQU_A:1000.0
+                                  NOMBRE:100)
+                      DEBUT:0.0);
+%
+% INRTERPRETATION DES FONCTIONS
+%
+
+
+F1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F2=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F3=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F4=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F5=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F6=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F7=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F8=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F9=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                 NOM_PARA:'INST'
+                 VALE:(0.0,0.0,4.3200E4,0.0)
+                 PROL_DROIT:'CONSTANT');
+
+F10=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                  NOM_PARA:'INST'
+                  VALE:(0.0,0.0,4.3200E4,0.0)
+                  PROL_DROIT:'CONSTANT');
+
+FRIG1=CALC_FONC_INTERP(FONCTION:F1
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG2=CALC_FONC_INTERP(FONCTION:F2
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG3=CALC_FONC_INTERP(FONCTION:F3
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG4=CALC_FONC_INTERP(FONCTION:F4
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG5=CALC_FONC_INTERP(FONCTION:F5
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG6=CALC_FONC_INTERP(FONCTION:F6
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG7=CALC_FONC_INTERP(FONCTION:F7
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG8=CALC_FONC_INTERP(FONCTION:F8
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG9=CALC_FONC_INTERP(FONCTION:F9
+                       PROL_DROIT:'CONSTANT'
+                       INTERPOL:'LIN'
+                       PROL_GAUCHE:'CONSTANT'
+                       LIST_PARA:L_FRIG);
+
+FRIG10=CALC_FONC_INTERP(FONCTION:F10
+                        PROL_DROIT:'CONSTANT'
+                        INTERPOL:'LIN'
+                        PROL_GAUCHE:'CONSTANT'
+                        LIST_PARA:L_FRIG);
+%
+% DEFINITION DU FLUX NEUTRONIQUE RADIAL
+
+
+FLUX_F1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'INST'
+                      VALE:
+                      (0.0,0.0,4.3200E4,0.0,
+                             9.74520E5,4.53280E5,2.638800E6,
+                             2.077850E6,4.087800E6,3.512790E6,
+                             5.428440E6,4.856770E6,7.245000E6,
+                             6.676270E6,8.853480E6,8.279770E6,
+                             1.0460900E7,9.872610E6,1.2202900E7,
+                             1.1586900E7,1.3944600E7,1.3295200E7,
+                             1.4143700E7,1.3490200E7,1.5563200E7,
+                             1.4875300E7,1.7236100E7,1.6506900E7,
+                             1.7948200E7,1.7199200E7,1.8190100E7,
+                             1.7433400E7,1.8193700E7,1.7435200E7,
+                             1.8197300E7,1.7435200E7,1.8200900E7,
+                             1.7435200E7),
+                      PROL_DROIT:'CONSTANT');
+% DEFINITION DU FLUX AXIAL POUR LE CYCLE 1
+
+
+FLUXAX1=LIRE_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      UNITE:60
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_1=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             3.8032834757835002E-07,
+                             -0.088200000000000001,
+                             3.8083689458688999E-07,
+                             -0.075600000000000001,
+                             3.8296082621083001E-07,-0.063,
+                             3.858400997151E-07,-0.0504,
+                             3.8946100427349999E-07,-0.0378,
+                             3.9259455128205E-07,-0.0252,
+                             3.9258457977207998E-07,-0.0126,
+                             3.9294106125356001E-07,0.0,
+                             3.9399554843304999E-07,0.0126,
+                             3.9293233618234E-07,0.0252,
+                             3.9256712962963002E-07,0.0378,
+                             3.9256712962963002E-07,0.0504,
+                             3.8942610398860001E-07,0.063,
+                             3.8579522792023001E-07,
+                             0.075600000000000001,
+                             3.8290972222222002E-07,
+                             0.088200000000000001,
+                             3.8077706552707E-07,0.1008,
+                             3.8026103988603998E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_2=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             4.3595566239316001E-07,
+                             -0.088200000000000001,
+                             4.3866542022792E-07,
+                             -0.075600000000000001,
+                             4.4331463675214E-07,-0.063,
+                             4.4911556267806002E-07,-0.0504,
+                             4.5750658831909E-07,-0.0378,
+                             4.6647222222221997E-07,-0.0252,
+                             4.6002938034188002E-07,-0.0126,
+                             4.6004309116809001E-07,0.0,
+                             4.6686235754985997E-07,0.0126,
+                             4.6003311965811999E-07,0.0252,
+                             4.6000943732193999E-07,0.0378,
+                             4.6643981481481001E-07,0.0504,
+                             4.5746420940171002E-07,0.063,
+                             4.4906445868945999E-07,
+                             0.075600000000000001,
+                             4.4325356125356E-07,
+                             0.088200000000000001,
+                             4.3859686609687001E-07,0.1008,
+                             4.3587838319088001E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_3=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             4.9431891025640996E-07,
+                             -0.088200000000000001,
+                             5.0005128205127998E-07,
+                             -0.075600000000000001,
+                             5.1337197293447004E-07,-0.063,
+                             5.2915313390313001E-07,-0.0504,
+                             5.3788069800570004E-07,-0.0378,
+                             5.3504629629630004E-07,-0.0252,
+                             5.3221189458688998E-07,-0.0126,
+                             5.3136431623932E-07,0.0,
+                             5.3135870726495999E-07,0.0126,
+                             5.3135309829059998E-07,0.0252,
+                             5.3218696581197002E-07,0.0378,
+                             5.3500827991452996E-07,0.0504,
+                             5.3782959401709E-07,0.063,
+                             5.2909205840456002E-07,
+                             0.075600000000000001,
+                             5.1330217236466999E-07,
+                             0.088200000000000001,
+                             4.9997150997151001E-07,0.1008,
+                             4.9423165954416005E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_4=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             5.5489957264956999E-07,
+                             -0.088200000000000001,
+                             5.6477884615384998E-07,
+                             -0.075600000000000001,
+                             5.9007781339030998E-07,-0.063,
+                             5.9726415598291003E-07,-0.0504,
+                             6.0445049857550001E-07,-0.0378,
+                             5.9840776353275996E-07,-0.0252,
+                             5.8440651709402002E-07,-0.0126,
+                             5.8263906695157003E-07,0.0,
+                             5.9153240740741004E-07,0.0126,
+                             5.8262660256409999E-07,0.0252,
+                             5.8438034188033999E-07,0.0378,
+                             5.9836663105413E-07,0.0504,
+                             6.0439316239316004E-07,0.063,
+                             5.9719497863248E-07,
+                             0.075600000000000001,
+                             5.8999679487179001E-07,
+                             0.088200000000000001,
+                             5.6469159544159996E-07,0.1008,
+                             5.5480110398860005E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_5=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             6.1267200854701004E-07,
+                             -0.088200000000000001,
+                             6.2962357549858005E-07,
+                             -0.075600000000000001,
+                             6.5655413105413E-07,-0.063,
+                             6.6164583333332999E-07,-0.0504,
+                             6.5190242165241998E-07,-0.0378,
+                             6.5212678062678005E-07,-0.0252,
+                             6.3746616809116999E-07,-0.0126,
+                             6.3547435897436004E-07,0.0,
+                             6.4509686609687001E-07,0.0126,
+                             6.3546064814814995E-07,0.0252,
+                             6.3743625356125E-07,0.0378,
+                             6.5207941595442004E-07,0.0504,
+                             6.5183885327634997E-07,0.063,
+                             6.6156980056979999E-07,
+                             0.075600000000000001,
+                             6.5646563390312997E-07,
+                             0.088200000000000001,
+                             6.2952386039885999E-07,0.1008,
+                             6.1256356837606998E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_6=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             6.5755128205127996E-07,
+                             -0.088200000000000001,
+                             6.8336253561253996E-07,
+                             -0.075600000000000001,
+                             6.9012072649573003E-07,-0.063,
+                             6.9687891737892E-07,-0.0504,
+                             6.9362571225071001E-07,-0.0378,
+                             6.9074768518518997E-07,-0.0252,
+                             6.8786965811965998E-07,-0.0126,
+                             6.8586413817664004E-07,0.0,
+                             6.8585603632478996E-07,0.0126,
+                             6.8584793447293003E-07,0.0252,
+                             6.8783600427350001E-07,0.0378,
+                             6.9069720441594996E-07,0.0504,
+                             6.9355840455840002E-07,0.063,
+                             6.9679789886040002E-07,
+                             0.075600000000000001,
+                             6.9002412749288002E-07,
+                             0.088200000000000001,
+                             6.8325035612536003E-07,0.1008,
+                             6.5743162393161998E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_7=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             6.9684526353276003E-07,
+                             -0.088200000000000001,
+                             7.1406606125356005E-07,
+                             -0.075600000000000001,
+                             7.3236502849003E-07,-0.063,
+                             7.2076442307691997E-07,-0.0504,
+                             7.1793500712250995E-07,-0.0378,
+                             7.2835648148147998E-07,-0.0252,
+                             7.1444747150996998E-07,-0.0126,
+                             7.1130893874644005E-07,0.0,
+                             7.2107727920227996E-07,0.0126,
+                             7.1129398148148005E-07,0.0252,
+                             7.1441257122506995E-07,0.0378,
+                             7.2830288461537998E-07,0.0504,
+                             7.1786396011395999E-07,0.063,
+                             7.2067841880341996E-07,
+                             0.075600000000000001,
+                             7.3226157407406997E-07,
+                             0.088200000000000001,
+                             7.1395138888889005E-07,0.1008,
+                             6.9671812678063005E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_8=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             7.3679362535612996E-07,
+                             -0.088200000000000001,
+                             7.5423130341880005E-07,
+                             -0.075600000000000001,
+                             7.7215633903134002E-07,-0.063,
+                             7.5865740740741005E-07,-0.0504,
+                             7.5547774216523998E-07,-0.0378,
+                             7.6662464387464E-07,-0.0252,
+                             7.5088461538461995E-07,-0.0126,
+                             7.4313924501423998E-07,0.0,
+                             7.486323005698E-07,0.0126,
+                             7.4312054843304996E-07,0.0252,
+                             7.5084722222222E-07,0.0378,
+                             7.6656730769230998E-07,0.0504,
+                             7.5540170940170999E-07,0.063,
+                             7.5856267806267997E-07,
+                             0.075600000000000001,
+                             7.7204415954415998E-07,
+                             0.088200000000000001,
+                             7.5410790598291005E-07,0.1008,
+                             7.3665776353275997E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_9=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                      NOM_PARA:'Y'
+                      VALE:
+                      (-0.1008,
+                             7.7370940170939995E-07,
+                             -0.088200000000000001,
+                             8.0144764957264998E-07,
+                             -0.075600000000000001,
+                             8.0374358974358997E-07,-0.063,
+                             8.0603952991452995E-07,-0.0504,
+                             8.0238372507123005E-07,-0.0378,
+                             7.9936672008546997E-07,-0.0252,
+                             7.9634971509971995E-07,-0.0126,
+                             7.8317361111111004E-07,0.0,
+                             7.8316426282051005E-07,0.0126,
+                             7.8315491452990996E-07,0.0252,
+                             7.9631107549857995E-07,0.0378,
+                             7.9930689102564003E-07,0.0504,
+                             8.0230270655270996E-07,0.063,
+                             8.0593856837607005E-07,
+                             0.075600000000000001,
+                             8.0362580128205003E-07,
+                             0.088200000000000001,
+                             8.0131303418803E-07,0.1008,
+                             7.7356356837607E-07),
+                      PROL_DROIT:'CONSTANT');
+
+FLY_1_10=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              7.9424198717948999E-07,
+                              -0.088200000000000001,
+                              8.1225925925926001E-07,
+                              -0.075600000000000001,
+                              8.3075516381766E-07,-0.063,
+                              8.1540651709402001E-07,-0.0504,
+                              8.1131071937321997E-07,-0.0378,
+                              8.2297489316238996E-07,-0.0252,
+                              8.0577403846154003E-07,-0.0126,
+                              7.9717236467236002E-07,0.0,
+                              8.0284615384615001E-07,0.0126,
+                              7.9715117521368004E-07,0.0252,
+                              8.0573165954416005E-07,0.0378,
+                              8.2291257122506995E-07,0.0504,
+                              8.1122845441594998E-07,0.063,
+                              8.1530306267805998E-07,
+                              0.075600000000000001,
+                              8.3063051994301999E-07,
+                              0.088200000000000001,
+                              8.1211841168090999E-07,0.1008,
+                              7.9408742877492998E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLY_1_11=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              8.1647845441594995E-07,
+                              -0.088200000000000001,
+                              8.3510648148147996E-07,
+                              -0.075600000000000001,
+                              8.5487873931623998E-07,-0.063,
+                              8.3969088319087998E-07,-0.0504,
+                              8.3502920227919995E-07,-0.0378,
+                              8.4651014957265E-07,-0.0252,
+                              8.2973931623932002E-07,-0.0126,
+                              8.2549269943020005E-07,0.0,
+                              8.3637909544160002E-07,0.0126,
+                              8.2547275641026002E-07,0.0252,
+                              8.2969319800569997E-07,0.0378,
+                              8.4644408831909002E-07,0.0504,
+                              8.3493945868945997E-07,0.063,
+                              8.3957995014244996E-07,
+                              0.075600000000000001,
+                              8.5474786324785998E-07,
+                              0.088200000000000001,
+                              8.3495690883191003E-07,0.1008,
+                              8.1631641737892005E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLY_1_12=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              8.3948272792023003E-07,
+                              -0.088200000000000001,
+                              8.7002546296295996E-07,
+                              -0.075600000000000001,
+                              8.7608564814814997E-07,-0.063,
+                              8.8214583333333004E-07,-0.0504,
+                              8.7589245014244996E-07,-0.0378,
+                              8.7128872863248004E-07,-0.0252,
+                              8.6668500712251001E-07,-0.0126,
+                              8.6321616809117001E-07,0.0,
+                              8.6320432692307996E-07,0.0126,
+                              8.6319248575499001E-07,0.0252,
+                              8.6663764245014005E-07,0.0378,
+                              8.7121705840456005E-07,0.0504,
+                              8.7579647435896998E-07,0.063,
+                              8.8202617521368001E-07,
+                              0.075600000000000001,
+                              8.7594667022791999E-07,
+                              0.088200000000000001,
+                              8.6986716524217003E-07,0.1008,
+                              8.3931196581196996E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLY_1_13=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              8.5508315527066002E-07,
+                              -0.088200000000000001,
+                              8.7546616809116998E-07,
+                              -0.075600000000000001,
+                              9.0944533475783005E-07,-0.063,
+                              9.1292663817663998E-07,-0.0504,
+                              8.9653721509972004E-07,-0.0378,
+                              8.9547275641025999E-07,-0.0252,
+                              8.7405644586895003E-07,-0.0126,
+                              8.7004789886040001E-07,0.0,
+                              8.8226549145299002E-07,0.0126,
+                              8.7002546296295996E-07,0.0252,
+                              8.7400534188033999E-07,0.0378,
+                              8.9539672364672004E-07,0.0504,
+                              8.9643376068376001E-07,0.063,
+                              9.1279825498575999E-07,
+                              0.075600000000000001,
+                              9.0929576210826002E-07,
+                              0.088200000000000001,
+                              8.7530288461538001E-07,0.1008,
+                              8.5490491452990995E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLY_1_14=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              8.5798237179486999E-07,
+                              -0.088200000000000001,
+                              8.6880893874644002E-07,
+                              -0.075600000000000001,
+                              9.0299750712251001E-07,-0.063,
+                              9.0948646723646997E-07,-0.0504,
+                              9.1597542735043003E-07,-0.0378,
+                              9.0500302706552995E-07,-0.0252,
+                              8.8214084757835001E-07,-0.0126,
+                              8.7779825498574995E-07,0.0,
+                              8.8993732193732E-07,0.0126,
+                              8.7777207977207998E-07,0.0252,
+                              8.8208974358973997E-07,0.0378,
+                              9.0492325498575998E-07,0.0504,
+                              9.1586574074073996E-07,0.063,
+                              9.0935434472933995E-07,
+                              0.075600000000000001,
+                              9.0284294871795E-07,
+                              0.088200000000000001,
+                              8.6864066951567002E-07,0.1008,
+                              8.5779665242165003E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLY_1_15=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              8.5773557692308004E-07,
+                              -0.088200000000000001,
+                              8.6180893874644003E-07,
+                              -0.075600000000000001,
+                              8.7862838319088002E-07,-0.063,
+                              8.9924074074074004E-07,-0.0504,
+                              9.0872489316239005E-07,-0.0378,
+                              9.0174545940170996E-07,-0.0252,
+                              8.9476602564102997E-07,-0.0126,
+                              8.9122364672365005E-07,0.0,
+                              8.9120993589743996E-07,0.0126,
+                              8.9119622507122997E-07,0.0252,
+                              8.9471118233617996E-07,0.0378,
+                              9.0166132478632003E-07,0.0504,
+                              9.0861146723646996E-07,0.063,
+                              8.9910363247862999E-07,
+                              0.075600000000000001,
+                              8.7847257834757996E-07,
+                              0.088200000000000001,
+                              8.6163693019942995E-07,0.1008,
+                              8.5754362535613004E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLY_1_16=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              8.5903935185184999E-07,
+                              -0.088200000000000001,
+                              8.5690046296295998E-07,
+                              -0.075600000000000001,
+                              8.5831018518518999E-07,-0.063,
+                              8.6167307692307999E-07,-0.0504,
+                              8.7125320512820998E-07,-0.0378,
+                              8.8563586182335997E-07,-0.0252,
+                              8.7089298433048003E-07,-0.0126,
+                              8.6842877492877004E-07,0.0,
+                              8.7942111823362E-07,0.0126,
+                              8.6840135327634996E-07,0.0252,
+                              8.7083814102563997E-07,0.0378,
+                              8.8554985754985996E-07,0.0504,
+                              8.7113977920228004E-07,0.063,
+                              8.6153846153846001E-07,
+                              0.075600000000000001,
+                              8.5815313390312996E-07,
+                              0.088200000000000001,
+                              8.5672471509971999E-07,0.1008,
+                              8.5884116809116995E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLY_1_17=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                       NOM_PARA:'Y'
+                       VALE:
+                       (-0.1008,
+                              8.6388675213674999E-07,
+                              -0.088200000000000001,
+                              8.5563782051281999E-07,
+                              -0.075600000000000001,
+                              8.5087019230768996E-07,-0.063,
+                              8.4755965099714995E-07,-0.0504,
+                              8.4761698717949003E-07,-0.0378,
+                              8.5133636039885996E-07,-0.0252,
+                              8.4844088319088001E-07,-0.0126,
+                              8.4633689458689002E-07,0.0,
+                              8.4644658119657999E-07,0.0126,
+                              8.4630947293447004E-07,0.0252,
+                              8.4838479344729004E-07,0.0378,
+                              8.512516025641E-07,0.0504,
+                              8.4750480769231E-07,0.063,
+                              8.4742378917379002E-07,
+                              0.075600000000000001,
+                              8.5071064814815003E-07,
+                              0.088200000000000001,
+                              8.5545584045584E-07,0.1008,
+                              8.6368108974359E-07),
+                       PROL_DROIT:'CONSTANT');
+
+FLUXRD1=DEFI_NAPPE(FONCTION:(FLY_1_1,FLY_1_2,FLY_1_3,FLY_1_4,FLY_1_5,
+                              FLY_1_6,FLY_1_7,FLY_1_8,FLY_1_9,
+                              FLY_1_10,FLY_1_11,FLY_1_12,
+                              FLY_1_13,FLY_1_14,FLY_1_15,
+                              FLY_1_16,FLY_1_17),
+                   PARA:
+                   (-0.1008,
+                          -0.088200000000000001,
+                          -0.075600000000000001,-0.063,-0.0504,
+                          -0.0378,-0.0252,-0.0126,0.0,0.0126,
+                          0.0252,0.0378,0.0504,0.063,
+                          0.075600000000000001,
+                          0.088200000000000001,0.1008),
+                   PROL_GAUCHE:'CONSTANT'
+                   NOM_PARA:'Z'
+                   PROL_DROIT:'CONSTANT');
+%
+% DEFINITION DES MATERIAUX ET AFFECTATIONS
+%
+%           **** DEFINITION DES MATERIAUX SANS FLUX NEUTRONIQUE ****
+%
+%
+% FAMILLE ASSEMBLAGE : NUMERO_FAM
+%
+% EMBOUT SUPERIEUR
+
+
+E_ES=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                   NOM_PARA:'TEMP'
+                   VALE:(100.0,2.0,300.0,3.0)
+                   PROL_DROIT:'CONSTANT');
+
+NU_ES=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(100.0,2.0,300.0,3.0)
+                    PROL_DROIT:'CONSTANT');
+
+AL_ES=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(100.0,2.0,300.0,3.0)
+                    PROL_DROIT:'CONSTANT');
+
+MT_ES=DEFI_MATERIAU(ELAS_FO:(NU:NU_ES
+                             ALPHA:AL_ES
+                             RHO:7800.0
+                             E:E_ES));
+% EMBOUT INFERIEUR
+
+
+E_EI=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                   NOM_PARA:'TEMP'
+                   VALE:(100.0,2.0,300.0,3.0)
+                   PROL_DROIT:'CONSTANT');
+
+NU_EI=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(100.0,2.0,300.0,3.0)
+                    PROL_DROIT:'CONSTANT');
+
+AL_EI=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(100.0,2.0,300.0,3.0)
+                    PROL_DROIT:'CONSTANT');
+
+MT_EI=DEFI_MATERIAU(ELAS_FO:(NU:NU_EI
+                             ALPHA:AL_EI
+                             RHO:12.0
+                             E:E_EI));
+
+MT_RIG=DEFI_MATERIAU(ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+% FONCTION COUPLE EN FONCTION DE DRZ POUR LA LIAISON GRILLE/CRAYON
+
+
+FOTRAC=DEFI_FONCTION(PROL_GAUCHE:'LINEAIRE'
+                     NOM_PARA:'DRZ'
+                     VALE:(1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0)
+                     PROL_DROIT:'LINEAIRE');
+
+MT_RE1=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG1
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE2=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG2
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE3=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG3
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE4=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG4
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE5=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG5
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE6=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG6
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE7=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG7
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE8=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG8
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE9=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                  RELA_MZ:FOTRAC
+                                  RIGI_N_FO:FRIG9
+                                  COULOMB:1.0)
+                     ELAS:(NU:0.0
+                           ALPHA:0.0
+                           RHO:0.0
+                           E:1.0));
+
+MT_RE10=DEFI_MATERIAU(DIS_CONTACT:(EFFO_N_INIT:-35.0
+                                   RELA_MZ:FOTRAC
+                                   RIGI_N_FO:FRIG10
+                                   COULOMB:1.0)
+                      ELAS:(NU:0.0
+                            ALPHA:0.0
+                            RHO:0.0
+                            E:1.0));
+% SYSTEME DE MAINTIEN
+
+
+E_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                   NOM_PARA:'TEMP'
+                   VALE:(0.0,1.0,5.0,2.0)
+                   PROL_DROIT:'CONSTANT');
+
+NU_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+
+AL_MA=DEFI_CONSTANTE(VALE:0.29999999999999999);
+
+SY_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+
+DS_MA=DEFI_CONSTANTE(VALE:0.29999999999999999);
+
+NP_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+
+MEY_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+MPY_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+MEZ_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+MPZ_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+CAY_MA=DEFI_CONSTANTE(VALE:0.29999999999999999);
+
+CBY_MA=DEFI_CONSTANTE(VALE:0.29999999999999999);
+
+CAZ_MA=DEFI_CONSTANTE(VALE:0.29999999999999999);
+
+CBZ_MA=DEFI_CONSTANTE(VALE:0.29999999999999999);
+
+MPX_MA=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+MT_MA=DEFI_MATERIAU(VMIS_POUTRE_FO:(MEZ:MEZ_MA
+                                    MPX:MPX_MA
+                                    MPZ:MPZ_MA
+                                    CBY:CBY_MA
+                                    NP:NP_MA
+                                    CBZ:CBZ_MA
+                                    MEY:MEY_MA
+                                    CAY:CAY_MA
+                                    CAZ:CAZ_MA
+                                    MPY:MPY_MA)
+                    ECRO_LINE_FO:(D_SIGM_EPSI:DS_MA
+                                  SY:SY_MA)
+                    ELAS_FO:(NU:NU_MA
+                             ALPHA:AL_MA
+                             RHO:7800.0
+                             E:E_MA));
+%
+%           **** DEFINITION DES MATERIAUX AVEC FLUX NEUTRONIQUE ****
+%
+%
+% GRILLE
+
+
+E_GRE=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+
+E_GRM=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+
+NU_GRE=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+NU_GRM=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+AL_GRE=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+
+AL_GRM=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                     NOM_PARA:'TEMP'
+                     VALE:(0.0,1.0,5.0,2.0)
+                     PROL_DROIT:'CONSTANT');
+% TUBE GUIDE
+
+
+E_TU=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                   NOM_PARA:'TEMP'
+                   VALE:(0.0,1.0,5.0,2.0)
+                   PROL_DROIT:'CONSTANT');
+
+NU_TU=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+
+AL_TU=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+% CRAYON
+
+
+E_CR=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                   NOM_PARA:'TEMP'
+                   VALE:(0.0,1.0,5.0,2.0)
+                   PROL_DROIT:'CONSTANT');
+
+NU_CR=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+
+AL_CR=DEFI_FONCTION(PROL_GAUCHE:'CONSTANT'
+                    NOM_PARA:'TEMP'
+                    VALE:(0.0,1.0,5.0,2.0)
+                    PROL_DROIT:'CONSTANT');
+% GRANDISSEMENT DES GRILLES
+% GRILLES EXTREMES 1 ET 10
+
+
+MT_GRE1=DEFI_MATERIAU(GRAN_IRRA:(FONC_MULT:FLUX_F1
+                                 FLUX_L:FLUXAX1
+                                 FLUX_TN:FLUXRD1
+                                 S:1.0
+                                 A:0.0)
+                      LEMAITRE:(N:0.0
+                                UN_SUR_M:0.0
+                                QSR_K:1.0
+                                UN_SUR_K:0.0)
+                      ELAS_FO:(NU:NU_GRE
+                               ALPHA:AL_GRE
+                               RHO:7800.0
+                               E:E_GRE));
+% GRILLES DE MELANGE       
+
+
+MT_GRM1=DEFI_MATERIAU(GRAN_IRRA:(FONC_MULT:FLUX_F1
+                                 FLUX_L:FLUXAX1
+                                 FLUX_TN:FLUXRD1
+                                 S:1.0
+                                 A:0.0)
+                      LEMAITRE:(N:0.0
+                                UN_SUR_M:0.0
+                                QSR_K:2.0
+                                UN_SUR_K:0.0)
+                      ELAS_FO:(NU:NU_GRM
+                               ALPHA:AL_GRM
+                               RHO:7800.0
+                               E:E_GRM));
+% DEFINITION DES MATERIAUX VISCOPLASTIQUES ( TUBES ET CRAYONS )
+
+
+MT_TU1=DEFI_MATERIAU(GRAN_IRRA:(FONC_MULT:FLUX_F1
+                                FLUX_L:FLUXAX1
+                                FLUX_TN:FLUXRD1
+                                S:1.0
+                                A:0.0)
+                     LEMAITRE:(N:0.0
+                               UN_SUR_M:0.0
+                               QSR_K:2.0
+                               UN_SUR_K:0.0)
+                     ELAS_FO:(NU:NU_TU
+                              ALPHA:AL_TU
+                              RHO:7800.0
+                              E:E_TU));
+
+MT_CR1=DEFI_MATERIAU(GRAN_IRRA:(FONC_MULT:FLUX_F1
+                                FLUX_L:FLUXAX1
+                                FLUX_TN:FLUXRD1
+                                S:1.0
+                                A:0.0)
+                     LEMAITRE:(N:0.0
+                               UN_SUR_M:0.0
+                               QSR_K:2.0
+                               UN_SUR_K:0.0)
+                     ELAS_FO:(NU:NU_CR
+                              ALPHA:AL_CR
+                              RHO:7800.0
+                              E:E_CR));
+%
+%           AFFECTATION DES MATERIAUX A CHAUD - CYCLE  
+%
+%
+
+
+A_MAT_1=AFFE_MATERIAU(AFFE:(TEMP_REF:100.0
+                            MATER:MT_MA
+                            GROUP_MA:(MAINTI_Y,MAINTI_Z))
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_GRM1
+                            GROUP_MA:GRIL_I)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_GRE1
+                            GROUP_MA:GRIL_E)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_CR1
+                            GROUP_MA:CRAY)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_TU1
+                            GROUP_MA:GUID)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_EI
+                            GROUP_MA:EBOINF)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_EI
+                            GROUP_MA:(PI_PLE,PI_TRO))
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_ES
+                            GROUP_MA:EBOSUP)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RIG
+                            GROUP_MA:RIGID)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE1
+                            GROUP_MA:ELA1)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE2
+                            GROUP_MA:ELA2)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE3
+                            GROUP_MA:ELA3)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE4
+                            GROUP_MA:ELA4)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE5
+                            GROUP_MA:ELA5)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE6
+                            GROUP_MA:ELA6)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE7
+                            GROUP_MA:ELA7)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE8
+                            GROUP_MA:ELA8)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE9
+                            GROUP_MA:ELA9)
+                      AFFE:(TEMP_REF:100.0
+                            MATER:MT_RE10
+                            GROUP_MA:ELA10)
+                      MAILLAGE:MA1);
+%
+
+
+L_INST_1=DEFI_LIST_REEL(INTERVALLE:(JUSQU_A:0.5
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:1000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:2000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:3000.0
+                                    NOMBRE:5)
+                        INTERVALLE:(JUSQU_A:4000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:5000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:6000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:7000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:8000.0
+                                    NOMBRE:1)
+                        DEBUT:0.0);
+
+L_ARCH_1=DEFI_LIST_REEL(INTERVALLE:(JUSQU_A:0.5
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:1000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:2000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:3000.0
+                                    NOMBRE:5)
+                        INTERVALLE:(JUSQU_A:4000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:5000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:6000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:7000.0
+                                    NOMBRE:1)
+                        INTERVALLE:(JUSQU_A:8000.0
+                                    NOMBRE:1)
+                        DEBUT:0.0);
+%
+% CALCUL PHASE I A V DU CYCLE 1
+%
+
+
+RESU=STAT_NON_LINE(CHAM_MATER:A_MAT_1
+                   MODELE:MO1
+                   ARCHIVAGE:(LIST_INST:L_ARCH_1)
+                   CONVERGENCE:(ITER_GLOB_MAXI:50
+                                ITER_INTE_MAXI:500
+                                RESI_GLOB_RELA:1.E-4
+                                ARRET:'OUI')
+                   COMP_INCR:(RELATION:'VMIS_POU_LINE'
+                              GROUP_MA:MAINTIEN)
+                   COMP_INCR:(RELATION:'ASSE_COMBU'
+                              GROUP_MA:(CRAYONS,TUB_GUID))
+                   COMP_INCR:(RELATION:'DIS_CONTACT'
+                              GROUP_MA:LI_GR_CR)
+                   COMP_INCR:(COQUE_NCOU:1
+                              RELATION:'ELAS'
+                              GROUP_MA:
+                              
+                                         (EMBO_INF,EMBO_SUP,
+                                         PIEDS,GRILLES,
+                                         LI_GR_GU),)
+                   INCREMENT:(NUME_INST_FIN:20
+                              LIST_INST:L_INST_1)
+                   CARA_ELEM:CARA1
+                   RECH_LINEAIRE:(ITER_LINE_MAXI:3)
+                   NEWTON:(REAC_ITER:1
+                           MATRICE:'TANGENTE')
+                   SOLVEUR:(METHODE:'MULT_FRONT'
+                            RENUM:'MD')
+                   EXCIT:(FONC_MULT:ARCH_F1
+                          CHARGE:ARCH_1)
+                   EXCIT:(FONC_MULT:ARCH_F1
+                          CHARGE:FOARCH_1)
+                   EXCIT:(FONC_MULT:HYDR_F1
+                          CHARGE:HYDR_1)
+                   EXCIT:(FONC_MULT:HYDR_F1
+                          CHARGE:FOHYDR_1)
+                   EXCIT:(FONC_MULT:CLDI_F1
+                          CHARGE:CL_DI_1)
+                   EXCIT:(CHARGE:CL_PER_1)
+                   EXCIT:(CHARGE:CL_CTC)
+                   EXCIT:(CHARGE:PESANT_1)
+                   EXCIT:(CHARGE:THERM_1)
+                   PARM_THETA:0.5);
+
+FIN();
diff --git a/Exemples/ex22/tyty.comm b/Exemples/ex22/tyty.comm
new file mode 100644 (file)
index 0000000..a58f368
--- /dev/null
@@ -0,0 +1,1309 @@
+
+
+DEBUT();
+# LECTURE DES PARAMETRES 
+#
+# LECTURE DES TEMPS 
+#CYCLE 1
+# LECTURE DU MAILLAGE ET DEFINITIONS DES PROPRIETES ELEMENTS FINIS
+
+
+PRE_GIBI();
+#
+
+
+MA1=LIRE_MAILLAGE();
+#
+
+
+MA1=DEFI_GROUP(reuse =MA1,
+               CREA_GROUP_NO=_F(GROUP_MA=('FIXATI','APPUI','LIAS_1','LIAS_2','EBGUIDE','MAINTIEN','MAIN_SUP','EMBO_SUP','TUB_GUID',
+                                           'GRILLES','EMBO_INF','PIEDS','CRAYONS',),),
+               MAILLAGE=MA1,);
+#
+# AFFECTATION DU MODELE
+#
+
+
+MO1=AFFE_MODELE(AFFE=(_F(GROUP_MA='CRAYONS',
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='POU_D_E',),
+                      _F(GROUP_MA='TUB_GUID',
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='POU_D_E',),
+                      _F(GROUP_MA=('EMBO_SUP','EMBO_INF',),
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='DKT',),
+                      _F(GROUP_MA='PIEDS',
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='POU_D_E',),
+                      _F(GROUP_MA='GRILLES',
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='POU_D_E',),
+                      _F(GROUP_MA='LI_GR_CR',
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='DIS_TR',),
+                      _F(GROUP_MA='LI_GR_GU',
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='DIS_TR',),
+                      _F(GROUP_MA='MAINTIEN',
+                         PHENOMENE='MECANIQUE',
+                         MODELISATION='POU_D_E',),),
+                MAILLAGE=MA1,);
+#
+# AFFECTATION DES CARACTERISTIQUES GEOMETRIQUES ELEMENTAIRES
+#
+
+
+CARA1=AFFE_CARA_ELEM(MODELE=MO1,
+                     COQUE=(_F(ANGL_REP=90.0,
+                               GROUP_MA='EBOINF',
+                               EPAIS=2.0,),
+                            _F(ANGL_REP=90.0,
+                               GROUP_MA='EBOSUP',
+                               EPAIS=3.0,),),
+                     DISCRET=(_F(VALE=(1.0,2.0,3.0,4.0,5.0,6.0,),
+                                 REPERE='LOCAL',
+                                 CARA='K_TR_D_L',
+                                 GROUP_MA='ELASTI',),
+                              _F(VALE=(1.0,2.0,3.0,4.0,5.0,6.0,),
+                                 REPERE='LOCAL',
+                                 CARA='K_TR_D_L',
+                                 GROUP_MA='RIGID',),),
+                     ORIENTATION=(_F(VALE=(1.0,0.0,0.0,),
+                                     CARA='VECT_Y',
+                                     GROUP_MA=('GRIL_I','GRIL_E',),),
+                                  _F(VALE=(0.0,1.0,0.0,),
+                                     CARA='VECT_Y',
+                                     GROUP_MA='MAINTI_Y',),
+                                  _F(VALE=(0.0,0.0,1.0,),
+                                     CARA='VECT_Y',
+                                     GROUP_MA='MAINTI_Z',),
+                                  _F(VALE=(0.0,1.0,0.0,),
+                                     CARA='VECT_Y',
+                                     GROUP_MA=('PI_PLE','PI_TRO',),),
+                                  _F(VALE=(1.0,0.0,0.0,),
+                                     CARA='VECT_Y',
+                                     GROUP_MA=('ELASTI','RIGID',),),),
+                     POUTRE=(_F(SECTION='CERCLE',
+                                GROUP_MA='CRAY',
+                                VALE=(3.0,3.0,),
+                                CARA=('R','EP',),),
+                             _F(SECTION='CERCLE',
+                                GROUP_MA='GUID',
+                                VALE=(3.0,3.0,),
+                                CARA=('R','EP',),),
+                             _F(SECTION='CERCLE',
+                                GROUP_MA='RETRE',
+                                VALE=(3.0,3.0,),
+                                CARA=('R','EP',),),
+                             _F(SECTION='RECTANGLE',
+                                GROUP_MA='GRIL_I',
+                                VALE=(3.0,3.0,),
+                                CARA=('HY','HZ',),),
+                             _F(SECTION='RECTANGLE',
+                                GROUP_MA='GRIL_E',
+                                VALE=(3.0,3.0,),
+                                CARA=('HY','HZ',),),
+                             _F(SECTION='RECTANGLE',
+                                GROUP_MA=('MAINTI_Y','MAINTI_Z',),
+                                VALE=(3.0,3.0,),
+                                CARA=('HY','HZ',),),
+                             _F(SECTION='GENERALE',
+                                GROUP_MA='PI_PLE',
+                                VALE=(1.0,2.0,3.0,4.0,),
+                                CARA=('A','IZ','IY','JX',),),
+                             _F(SECTION='GENERALE',
+                                GROUP_MA='PI_TRO',
+                                VALE=(1.0,2.0,3.0,4.0,),
+                                CARA=('A','IZ','IY','JX',),),),);
+#
+# DEFINITION DES CHARGES ET CONDITIONS LIMITES
+# DEFINITION DES TEMPERATURES NODALES EVOLUTIVES
+#
+
+
+F_TP1_1=DEFI_FONCTION(NOM_RESU='TEMP',
+                      PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='X',
+                      VALE=(0.0,1.0,5.0,4.0,),
+                      PROL_DROIT='CONSTANT',);
+
+F_TP2_1=DEFI_FONCTION(NOM_RESU='TEMP',
+                      PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='X',
+                      VALE=(0.0,1.0,5.0,4.0,),
+                      PROL_DROIT='CONSTANT',);
+
+F_TP3_1=DEFI_FONCTION(NOM_RESU='TEMP',
+                      PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='X',
+                      VALE=(0.0,1.0,5.0,4.0,),
+                      PROL_DROIT='CONSTANT',);
+
+CHTEM1_1=AFFE_CHAM_NO(GRANDEUR='TEMP_F',
+                      AFFE=(_F(FONCTION=F_TP1_1,
+                               GROUP_NO=('MAINTIEN','PIEDS','TUB_GUID','GRILLES','CRAYONS',),
+                               NOM_CMP='TEMP',),
+                            _F(FONCTION=(F_TP1_1,F_TP1_1,F_TP1_1,),
+                               GROUP_NO=('EMBO_SUP','EMBO_INF',),
+                               NOM_CMP=('TEMP_INF','TEMP','TEMP_SUP',),),),
+                      MAILLAGE=MA1,);
+
+CHTEM2_1=AFFE_CHAM_NO(GRANDEUR='TEMP_F',
+                      AFFE=(_F(FONCTION=F_TP2_1,
+                               GROUP_NO=('MAINTIEN','PIEDS','TUB_GUID','GRILLES','CRAYONS',),
+                               NOM_CMP='TEMP',),
+                            _F(FONCTION=(F_TP2_1,F_TP2_1,F_TP2_1,),
+                               GROUP_NO=('EMBO_SUP','EMBO_INF',),
+                               NOM_CMP=('TEMP_INF','TEMP','TEMP_SUP',),),),
+                      MAILLAGE=MA1,);
+
+CHTEM3_1=AFFE_CHAM_NO(GRANDEUR='TEMP_F',
+                      AFFE=(_F(FONCTION=F_TP3_1,
+                               GROUP_NO=('MAINTIEN','PIEDS','TUB_GUID','GRILLES',),
+                               NOM_CMP='TEMP',),
+                            _F(FONCTION=(F_TP3_1,F_TP3_1,F_TP3_1,),
+                               GROUP_NO=('EMBO_SUP','EMBO_INF',),
+                               NOM_CMP=('TEMP_INF','TEMP','TEMP_SUP',),),
+                            _F(FONCTION=F_TP3_1,
+                               GROUP_NO='CRAYONS',
+                               NOM_CMP='TEMP',),),
+                      MAILLAGE=MA1,);
+
+CHTH_1=CREA_RESU(NOM_CHAM='TEMP',
+                 CHAM_GD=(_F(INST=0.0,
+                             CHAM_NO=CHTEM1_1,),
+                          _F(INST=1000.0,
+                             CHAM_NO=CHTEM1_1,),
+                          _F(INST=2000.0,
+                             CHAM_NO=CHTEM2_1,),
+                          _F(INST=3000.0,
+                             CHAM_NO=CHTEM3_1,),
+                          _F(INST=4000.0,
+                             CHAM_NO=CHTEM3_1,),
+                          _F(INST=5000.0,
+                             CHAM_NO=CHTEM2_1,),
+                          _F(INST=6000.0,
+                             CHAM_NO=CHTEM1_1,),
+                          _F(INST=7000.0,
+                             CHAM_NO=CHTEM1_1,),),
+                 TYPE_RESU='EVOL_THER',);
+# CHARGEMENT: CHARGES THERMO-MECANIQUES
+# ----------------------------------------
+
+
+THERM_1=AFFE_CHAR_MECA(MODELE=MO1,
+                       TEMP_CALCULEE=CHTH_1,);
+# DEFINITION DES CONDITIONS LIMITES
+#            DES CONDITIONS DE CONTACT
+#
+# CHARGEMENT: PESANTEUR
+#
+
+
+PESANT_1=AFFE_CHAR_MECA(MODELE=MO1,
+                        PESANTEUR=(9.8100000000000005,-1.0,0.0,0.0,),);
+#
+# CONDITIONS AUX LIMITES
+#
+
+
+CL_PER_1=AFFE_CHAR_MECA(MODELE=MO1,
+                        DDL_IMPO=(_F(DZ=0.0,
+                                     DX=0.0,
+                                     DY=0.0,
+                                     GROUP_NO='FIXATI',
+                                     DRZ=0.0,
+                                     DRX=0.0,
+                                     DRY=0.0,),
+                                  _F(DX=0.0,
+                                     GROUP_NO='APPUI',),
+                                  _F(DZ=0.0,
+                                     DY=0.0,
+                                     GROUP_NO='EBGUIDE',
+                                     DRZ=0.0,
+                                     DRX=0.0,
+                                     DRY=0.0,),
+                                  _F(GROUP_NO=('LIAS_1','LIAS_2',),
+                                     DRX=0.0,),),
+                        LIAISON_GROUP=(_F(COEF_MULT_1=1.0,
+                                          DDL_1='DX',
+                                          COEF_MULT_2=-1.0,
+                                          COEF_IMPO=0.0,
+                                          GROUP_NO_1='LIAS_1',
+                                          GROUP_NO_2='LIAS_2',
+                                          DDL_2='DX',),
+                                       _F(COEF_MULT_1=1.0,
+                                          DDL_1='DY',
+                                          COEF_MULT_2=-1.0,
+                                          COEF_IMPO=0.0,
+                                          GROUP_NO_1='LIAS_1',
+                                          GROUP_NO_2='LIAS_2',
+                                          DDL_2='DY',),
+                                       _F(COEF_MULT_1=1.0,
+                                          DDL_1='DZ',
+                                          COEF_MULT_2=-1.0,
+                                          COEF_IMPO=0.0,
+                                          GROUP_NO_1='LIAS_1',
+                                          GROUP_NO_2='LIAS_2',
+                                          DDL_2='DZ',),
+                                       _F(COEF_MULT_1=1.0,
+                                          DDL_1='DRY',
+                                          COEF_MULT_2=-1.0,
+                                          COEF_IMPO=0.0,
+                                          GROUP_NO_1='LIAS_1',
+                                          GROUP_NO_2='LIAS_2',
+                                          DDL_2='DRY',),
+                                       _F(COEF_MULT_1=1.0,
+                                          DDL_1='DRZ',
+                                          COEF_MULT_2=-1.0,
+                                          COEF_IMPO=0.0,
+                                          GROUP_NO_1='LIAS_1',
+                                          GROUP_NO_2='LIAS_2',
+                                          DDL_2='DRZ',),),);
+#
+
+
+CL_CTC=AFFE_CHAR_MECA(INFO=1,
+                      MODELE=MO1,
+                      CONTACT=_F(GROUP_MA_1='EBOINF',
+                                 VECT_NORM_2=(-1.0,0.0,0.0,),
+                                 APPARIEMENT='NODAL',
+                                 GROUP_MA_2='MCRBAS',),);
+#                            
+# DEPLACEMENT DU SYSTEME DE MAINTIEN
+#
+
+
+CLDI_F1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='INST',
+                      VALE=
+                      (0.0,0.0,1000.0,0.10000000000000001,2000.0,0.20000000000000001,3000.0,
+                             0.20000000000000001,4000.0,0.20000000000000001,5000.0,0.20000000000000001,6000.0,
+                             0.10000000000000001,7000.0,0.10000000000000001,),
+                      PROL_DROIT='CONSTANT',);
+
+CL_DI_1=AFFE_CHAR_MECA(MODELE=MO1,
+                       DDL_IMPO=_F(DX=-1.0,
+                                   GROUP_NO='MAIN_SUP',),);
+# DEFINITION DES FORCES EXTERIEURES
+#
+# FONCTION MULTIPLICATIVE DE LA FORCE HYDRODYNAMIQUE NORMEE
+#
+
+
+HYDR_F1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='INST',
+                      VALE=
+                      (0.0,0.0,1000.0,0.10000000000000001,2000.0,0.20000000000000001,3000.0,
+                             0.20000000000000001,4000.0,0.20000000000000001,5000.0,0.20000000000000001,6000.0,
+                             0.10000000000000001,7000.0,0.10000000000000001,),
+                      PROL_DROIT='CONSTANT',);
+#
+# PROFIL DES FORCES HYDRODYNAMIQUES TUBES GUIDES A FROID
+#
+
+
+HYFRTU_1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='X',
+                       VALE=(0.0,1.0,5.0,2.0,),
+                       PROL_DROIT='CONSTANT',);
+#
+# PROFIL DES FORCES HYDRODYNAMIQUES CRAYON A FROID
+#
+
+
+HYFRCR_1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='X',
+                       VALE=(0.0,1.0,5.0,2.0,),
+                       PROL_DROIT='CONSTANT',);
+#
+# CHARGEMENT : FORCES HYDRODYNAMIQUES 
+#
+
+
+HYDR_1=AFFE_CHAR_MECA(FORCE_POUTRE=(_F(GROUP_MA='GRIL10',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL1',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL2',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL3',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL4',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL5',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL6',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL7',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL8',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL9',
+                                       FX=10.0,),),
+                      MODELE=MO1,
+                      FORCE_COQUE=(_F(FX=10.0,
+                                      GROUP_MA='EBOSUP',),
+                                   _F(FX=10.0,
+                                      GROUP_MA='EBOINF',),),);
+
+TOTO_1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='X',
+                     VALE=(0.0,10.0,5.0,10.0,),
+                     PROL_DROIT='CONSTANT',);
+#                         
+
+
+FOHYDR_1=AFFE_CHAR_MECA_F(FORCE_POUTRE=(_F(GROUP_MA='GUID',
+                                           FX=TOTO_1,),
+                                        _F(GROUP_MA='CRAY',
+                                           FX=TOTO_1,),),
+                          MODELE=MO1,);
+#
+# PROFIL DES FORCES D'ARCHIMEDE TUBE GUIDE 
+#
+
+
+ARFRTU_1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='X',
+                       VALE=(0.0,10.0,5.0,10.0,),
+                       PROL_DROIT='CONSTANT',);
+#
+# PROFIL DES FORCES D'ARCHIMEDE CRAYON 
+#
+
+
+ARFRCR_1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='X',
+                       VALE=(0.0,10.0,5.0,10.0,),
+                       PROL_DROIT='CONSTANT',);
+#
+# FONCTION MULTIPLICATIVE DE LA FORCE D'ARCHIMEDE
+#
+
+
+ARCH_F1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='INST',
+                      VALE=
+                      (0.0,0.0,1000.0,0.10000000000000001,2000.0,0.20000000000000001,3000.0,
+                             0.20000000000000001,4000.0,0.20000000000000001,5000.0,0.20000000000000001,6000.0,
+                             0.10000000000000001,7000.0,0.10000000000000001,),
+                      PROL_DROIT='CONSTANT',);
+#
+#
+# CHARGEMENT : FORCES D'ARCHIMEDE 
+# ----------------------------------------
+#
+
+
+ARCH_1=AFFE_CHAR_MECA(FORCE_POUTRE=(_F(GROUP_MA='MAINTIEN',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL10',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL1',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL2',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL3',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL4',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL5',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL6',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL7',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL8',
+                                       FX=10.0,),
+                                    _F(GROUP_MA='GRIL9',
+                                       FX=10.0,),),
+                      MODELE=MO1,
+                      FORCE_COQUE=(_F(FX=10.0,
+                                      GROUP_MA='EBOSUP',),
+                                   _F(FX=10.0,
+                                      GROUP_MA='EBOINF',),),);
+
+FOARCH_1=AFFE_CHAR_MECA_F(FORCE_POUTRE=(_F(GROUP_MA='GUID',
+                                           FX=ARCH_F1,),
+                                        _F(GROUP_MA='CRAY',
+                                           FX=ARCH_F1,),),
+                          MODELE=MO1,);
+#
+# 
+# FORCE DE SERRAGE DE LA LIAISON GRILLE - CRAYON 
+#
+#
+#
+#
+#
+# DEFINITION DE LA LISTE D'INSTANTS
+#
+
+
+L_FRIG=DEFI_LIST_REEL(INTERVALLE=_F(JUSQU_A=1000.0,
+                                    NOMBRE=100,),
+                      DEBUT=0.0,);
+#
+# INRTERPRETATION DES FONCTIONS
+#
+
+
+F1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F2=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F3=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F4=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F5=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F6=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F7=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F8=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F9=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                 NOM_PARA='INST',
+                 VALE=(0.0,0.0,43200.0,0.0,),
+                 PROL_DROIT='CONSTANT',);
+
+F10=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                  NOM_PARA='INST',
+                  VALE=(0.0,0.0,43200.0,0.0,),
+                  PROL_DROIT='CONSTANT',);
+
+FRIG1=CALC_FONC_INTERP(FONCTION=F1,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG2=CALC_FONC_INTERP(FONCTION=F2,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG3=CALC_FONC_INTERP(FONCTION=F3,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG4=CALC_FONC_INTERP(FONCTION=F4,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG5=CALC_FONC_INTERP(FONCTION=F5,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG6=CALC_FONC_INTERP(FONCTION=F6,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG7=CALC_FONC_INTERP(FONCTION=F7,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG8=CALC_FONC_INTERP(FONCTION=F8,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG9=CALC_FONC_INTERP(FONCTION=F9,
+                       PROL_DROIT='CONSTANT',
+                       INTERPOL='LIN',
+                       PROL_GAUCHE='CONSTANT',
+                       LIST_PARA=L_FRIG,);
+
+FRIG10=CALC_FONC_INTERP(FONCTION=F10,
+                        PROL_DROIT='CONSTANT',
+                        INTERPOL='LIN',
+                        PROL_GAUCHE='CONSTANT',
+                        LIST_PARA=L_FRIG,);
+#
+# DEFINITION DU FLUX NEUTRONIQUE RADIAL
+
+
+FLUX_F1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='INST',
+                      VALE=
+                      (0.0,0.0,43200.0,0.0,974520.0,453280.0,2638800.0,2077850.0,4087800.0,3512790.0,
+                             5428440.0,4856770.0,7245000.0,6676270.0,8853480.0,8279770.0,10460900.0,9872610.0,12202900.0,
+                             11586900.0,13944600.0,13295200.0,14143700.0,13490200.0,15563200.0,14875300.0,17236100.0,
+                             16506900.0,17948200.0,17199200.0,18190100.0,17433400.0,18193700.0,17435200.0,18197300.0,
+                             17435200.0,18200900.0,17435200.0,),
+                      PROL_DROIT='CONSTANT',);
+# DEFINITION DU FLUX AXIAL POUR LE CYCLE 1
+
+
+FLUXAX1=LIRE_FONCTION(PROL_GAUCHE='CONSTANT',
+                      UNITE=60,
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_1=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,3.8032834757835002e-07,-0.088200000000000001,3.8083689458688999e-07,
+                             -0.075600000000000001,3.8296082621083001e-07,-0.063,3.858400997151e-07,-0.0504,
+                             3.8946100427349999e-07,-0.0378,3.9259455128205e-07,-0.0252,3.9258457977207998e-07,-0.0126,
+                             3.9294106125356001e-07,0.0,3.9399554843304999e-07,0.0126,3.9293233618234e-07,0.0252,
+                             3.9256712962963002e-07,0.0378,3.9256712962963002e-07,0.0504,3.8942610398860001e-07,0.063,
+                             3.8579522792023001e-07,0.075600000000000001,3.8290972222222002e-07,0.088200000000000001,
+                             3.8077706552707e-07,0.1008,3.8026103988603998e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_2=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,4.3595566239316001e-07,-0.088200000000000001,4.3866542022792e-07,
+                             -0.075600000000000001,4.4331463675214e-07,-0.063,4.4911556267806002e-07,-0.0504,
+                             4.5750658831909e-07,-0.0378,4.6647222222221997e-07,-0.0252,4.6002938034188002e-07,-0.0126,
+                             4.6004309116809001e-07,0.0,4.6686235754985997e-07,0.0126,4.6003311965811999e-07,0.0252,
+                             4.6000943732193999e-07,0.0378,4.6643981481481001e-07,0.0504,4.5746420940171002e-07,0.063,
+                             4.4906445868945999e-07,0.075600000000000001,4.4325356125356e-07,0.088200000000000001,
+                             4.3859686609687001e-07,0.1008,4.3587838319088001e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_3=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,4.9431891025640996e-07,-0.088200000000000001,5.0005128205127998e-07,
+                             -0.075600000000000001,5.1337197293447004e-07,-0.063,5.2915313390313001e-07,-0.0504,
+                             5.3788069800570004e-07,-0.0378,5.3504629629630004e-07,-0.0252,5.3221189458688998e-07,-0.0126,
+                             5.3136431623932e-07,0.0,5.3135870726495999e-07,0.0126,5.3135309829059998e-07,0.0252,
+                             5.3218696581197002e-07,0.0378,5.3500827991452996e-07,0.0504,5.3782959401709e-07,0.063,
+                             5.2909205840456002e-07,0.075600000000000001,5.1330217236466999e-07,0.088200000000000001,
+                             4.9997150997151001e-07,0.1008,4.9423165954416005e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_4=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,5.5489957264956999e-07,-0.088200000000000001,5.6477884615384998e-07,
+                             -0.075600000000000001,5.9007781339030998e-07,-0.063,5.9726415598291003e-07,-0.0504,
+                             6.0445049857550001e-07,-0.0378,5.9840776353275996e-07,-0.0252,5.8440651709402002e-07,-0.0126,
+                             5.8263906695157003e-07,0.0,5.9153240740741004e-07,0.0126,5.8262660256409999e-07,0.0252,
+                             5.8438034188033999e-07,0.0378,5.9836663105413e-07,0.0504,6.0439316239316004e-07,0.063,
+                             5.9719497863248e-07,0.075600000000000001,5.8999679487179001e-07,0.088200000000000001,
+                             5.6469159544159996e-07,0.1008,5.5480110398860005e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_5=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,6.1267200854701004e-07,-0.088200000000000001,6.2962357549858005e-07,
+                             -0.075600000000000001,6.5655413105413e-07,-0.063,6.6164583333332999e-07,-0.0504,
+                             6.5190242165241998e-07,-0.0378,6.5212678062678005e-07,-0.0252,6.3746616809116999e-07,-0.0126,
+                             6.3547435897436004e-07,0.0,6.4509686609687001e-07,0.0126,6.3546064814814995e-07,0.0252,
+                             6.3743625356125e-07,0.0378,6.5207941595442004e-07,0.0504,6.5183885327634997e-07,0.063,
+                             6.6156980056979999e-07,0.075600000000000001,6.5646563390312997e-07,0.088200000000000001,
+                             6.2952386039885999e-07,0.1008,6.1256356837606998e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_6=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,6.5755128205127996e-07,-0.088200000000000001,6.8336253561253996e-07,
+                             -0.075600000000000001,6.9012072649573003e-07,-0.063,6.9687891737892e-07,-0.0504,
+                             6.9362571225071001e-07,-0.0378,6.9074768518518997e-07,-0.0252,6.8786965811965998e-07,-0.0126,
+                             6.8586413817664004e-07,0.0,6.8585603632478996e-07,0.0126,6.8584793447293003e-07,0.0252,
+                             6.8783600427350001e-07,0.0378,6.9069720441594996e-07,0.0504,6.9355840455840002e-07,0.063,
+                             6.9679789886040002e-07,0.075600000000000001,6.9002412749288002e-07,0.088200000000000001,
+                             6.8325035612536003e-07,0.1008,6.5743162393161998e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_7=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,6.9684526353276003e-07,-0.088200000000000001,7.1406606125356005e-07,
+                             -0.075600000000000001,7.3236502849003e-07,-0.063,7.2076442307691997e-07,-0.0504,
+                             7.1793500712250995e-07,-0.0378,7.2835648148147998e-07,-0.0252,7.1444747150996998e-07,-0.0126,
+                             7.1130893874644005e-07,0.0,7.2107727920227996e-07,0.0126,7.1129398148148005e-07,0.0252,
+                             7.1441257122506995e-07,0.0378,7.2830288461537998e-07,0.0504,7.1786396011395999e-07,0.063,
+                             7.2067841880341996e-07,0.075600000000000001,7.3226157407406997e-07,0.088200000000000001,
+                             7.1395138888889005e-07,0.1008,6.9671812678063005e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_8=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,7.3679362535612996e-07,-0.088200000000000001,7.5423130341880005e-07,
+                             -0.075600000000000001,7.7215633903134002e-07,-0.063,7.5865740740741005e-07,-0.0504,
+                             7.5547774216523998e-07,-0.0378,7.6662464387464e-07,-0.0252,7.5088461538461995e-07,-0.0126,
+                             7.4313924501423998e-07,0.0,7.486323005698e-07,0.0126,7.4312054843304996e-07,0.0252,
+                             7.5084722222222e-07,0.0378,7.6656730769230998e-07,0.0504,7.5540170940170999e-07,0.063,
+                             7.5856267806267997e-07,0.075600000000000001,7.7204415954415998e-07,0.088200000000000001,
+                             7.5410790598291005e-07,0.1008,7.3665776353275997e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_9=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                      NOM_PARA='Y',
+                      VALE=
+                      (-0.1008,7.7370940170939995e-07,-0.088200000000000001,8.0144764957264998e-07,
+                             -0.075600000000000001,8.0374358974358997e-07,-0.063,8.0603952991452995e-07,-0.0504,
+                             8.0238372507123005e-07,-0.0378,7.9936672008546997e-07,-0.0252,7.9634971509971995e-07,-0.0126,
+                             7.8317361111111004e-07,0.0,7.8316426282051005e-07,0.0126,7.8315491452990996e-07,0.0252,
+                             7.9631107549857995e-07,0.0378,7.9930689102564003e-07,0.0504,8.0230270655270996e-07,0.063,
+                             8.0593856837607005e-07,0.075600000000000001,8.0362580128205003e-07,0.088200000000000001,
+                             8.0131303418803e-07,0.1008,7.7356356837607e-07,),
+                      PROL_DROIT='CONSTANT',);
+
+FLY_1_10=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,7.9424198717948999e-07,-0.088200000000000001,8.1225925925926001e-07,
+                              -0.075600000000000001,8.3075516381766e-07,-0.063,8.1540651709402001e-07,-0.0504,
+                              8.1131071937321997e-07,-0.0378,8.2297489316238996e-07,-0.0252,8.0577403846154003e-07,-0.0126,
+                              7.9717236467236002e-07,0.0,8.0284615384615001e-07,0.0126,7.9715117521368004e-07,0.0252,
+                              8.0573165954416005e-07,0.0378,8.2291257122506995e-07,0.0504,8.1122845441594998e-07,0.063,
+                              8.1530306267805998e-07,0.075600000000000001,8.3063051994301999e-07,0.088200000000000001,
+                              8.1211841168090999e-07,0.1008,7.9408742877492998e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLY_1_11=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,8.1647845441594995e-07,-0.088200000000000001,8.3510648148147996e-07,
+                              -0.075600000000000001,8.5487873931623998e-07,-0.063,8.3969088319087998e-07,-0.0504,
+                              8.3502920227919995e-07,-0.0378,8.4651014957265e-07,-0.0252,8.2973931623932002e-07,-0.0126,
+                              8.2549269943020005e-07,0.0,8.3637909544160002e-07,0.0126,8.2547275641026002e-07,0.0252,
+                              8.2969319800569997e-07,0.0378,8.4644408831909002e-07,0.0504,8.3493945868945997e-07,0.063,
+                              8.3957995014244996e-07,0.075600000000000001,8.5474786324785998e-07,0.088200000000000001,
+                              8.3495690883191003e-07,0.1008,8.1631641737892005e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLY_1_12=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,8.3948272792023003e-07,-0.088200000000000001,8.7002546296295996e-07,
+                              -0.075600000000000001,8.7608564814814997e-07,-0.063,8.8214583333333004e-07,-0.0504,
+                              8.7589245014244996e-07,-0.0378,8.7128872863248004e-07,-0.0252,8.6668500712251001e-07,-0.0126,
+                              8.6321616809117001e-07,0.0,8.6320432692307996e-07,0.0126,8.6319248575499001e-07,0.0252,
+                              8.6663764245014005e-07,0.0378,8.7121705840456005e-07,0.0504,8.7579647435896998e-07,0.063,
+                              8.8202617521368001e-07,0.075600000000000001,8.7594667022791999e-07,0.088200000000000001,
+                              8.6986716524217003e-07,0.1008,8.3931196581196996e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLY_1_13=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,8.5508315527066002e-07,-0.088200000000000001,8.7546616809116998e-07,
+                              -0.075600000000000001,9.0944533475783005e-07,-0.063,9.1292663817663998e-07,-0.0504,
+                              8.9653721509972004e-07,-0.0378,8.9547275641025999e-07,-0.0252,8.7405644586895003e-07,-0.0126,
+                              8.7004789886040001e-07,0.0,8.8226549145299002e-07,0.0126,8.7002546296295996e-07,0.0252,
+                              8.7400534188033999e-07,0.0378,8.9539672364672004e-07,0.0504,8.9643376068376001e-07,0.063,
+                              9.1279825498575999e-07,0.075600000000000001,9.0929576210826002e-07,0.088200000000000001,
+                              8.7530288461538001e-07,0.1008,8.5490491452990995e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLY_1_14=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,8.5798237179486999e-07,-0.088200000000000001,8.6880893874644002e-07,
+                              -0.075600000000000001,9.0299750712251001e-07,-0.063,9.0948646723646997e-07,-0.0504,
+                              9.1597542735043003e-07,-0.0378,9.0500302706552995e-07,-0.0252,8.8214084757835001e-07,-0.0126,
+                              8.7779825498574995e-07,0.0,8.8993732193732e-07,0.0126,8.7777207977207998e-07,0.0252,
+                              8.8208974358973997e-07,0.0378,9.0492325498575998e-07,0.0504,9.1586574074073996e-07,0.063,
+                              9.0935434472933995e-07,0.075600000000000001,9.0284294871795e-07,0.088200000000000001,
+                              8.6864066951567002e-07,0.1008,8.5779665242165003e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLY_1_15=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,8.5773557692308004e-07,-0.088200000000000001,8.6180893874644003e-07,
+                              -0.075600000000000001,8.7862838319088002e-07,-0.063,8.9924074074074004e-07,-0.0504,
+                              9.0872489316239005e-07,-0.0378,9.0174545940170996e-07,-0.0252,8.9476602564102997e-07,-0.0126,
+                              8.9122364672365005e-07,0.0,8.9120993589743996e-07,0.0126,8.9119622507122997e-07,0.0252,
+                              8.9471118233617996e-07,0.0378,9.0166132478632003e-07,0.0504,9.0861146723646996e-07,0.063,
+                              8.9910363247862999e-07,0.075600000000000001,8.7847257834757996e-07,0.088200000000000001,
+                              8.6163693019942995e-07,0.1008,8.5754362535613004e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLY_1_16=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,8.5903935185184999e-07,-0.088200000000000001,8.5690046296295998e-07,
+                              -0.075600000000000001,8.5831018518518999e-07,-0.063,8.6167307692307999e-07,-0.0504,
+                              8.7125320512820998e-07,-0.0378,8.8563586182335997e-07,-0.0252,8.7089298433048003e-07,-0.0126,
+                              8.6842877492877004e-07,0.0,8.7942111823362e-07,0.0126,8.6840135327634996e-07,0.0252,
+                              8.7083814102563997e-07,0.0378,8.8554985754985996e-07,0.0504,8.7113977920228004e-07,0.063,
+                              8.6153846153846001e-07,0.075600000000000001,8.5815313390312996e-07,0.088200000000000001,
+                              8.5672471509971999e-07,0.1008,8.5884116809116995e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLY_1_17=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                       NOM_PARA='Y',
+                       VALE=
+                       (-0.1008,8.6388675213674999e-07,-0.088200000000000001,8.5563782051281999e-07,
+                              -0.075600000000000001,8.5087019230768996e-07,-0.063,8.4755965099714995e-07,-0.0504,
+                              8.4761698717949003e-07,-0.0378,8.5133636039885996e-07,-0.0252,8.4844088319088001e-07,-0.0126,
+                              8.4633689458689002e-07,0.0,8.4644658119657999e-07,0.0126,8.4630947293447004e-07,0.0252,
+                              8.4838479344729004e-07,0.0378,8.512516025641e-07,0.0504,8.4750480769231e-07,0.063,
+                              8.4742378917379002e-07,0.075600000000000001,8.5071064814815003e-07,0.088200000000000001,
+                              8.5545584045584e-07,0.1008,8.6368108974359e-07,),
+                       PROL_DROIT='CONSTANT',);
+
+FLUXRD1=DEFI_NAPPE(FONCTION=(FLY_1_1,FLY_1_2,FLY_1_3,FLY_1_4,FLY_1_5,FLY_1_6,FLY_1_7,FLY_1_8,FLY_1_9,FLY_1_10,FLY_1_11,FLY_1_12,
+                              FLY_1_13,FLY_1_14,FLY_1_15,FLY_1_16,FLY_1_17,),
+                   PARA=
+                   (-0.1008,-0.088200000000000001,-0.075600000000000001,-0.063,-0.0504,-0.0378,-0.0252,
+                          -0.0126,0.0,0.0126,0.0252,0.0378,0.0504,0.063,0.075600000000000001,0.088200000000000001,0.1008,),
+                   PROL_GAUCHE='CONSTANT',
+                   NOM_PARA='Z',
+                   PROL_DROIT='CONSTANT',);
+#
+# DEFINITION DES MATERIAUX ET AFFECTATIONS
+#
+#           **** DEFINITION DES MATERIAUX SANS FLUX NEUTRONIQUE ****
+#
+#
+# FAMILLE ASSEMBLAGE : NUMERO_FAM
+#
+# EMBOUT SUPERIEUR
+
+
+E_ES=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                   NOM_PARA='TEMP',
+                   VALE=(100.0,2.0,300.0,3.0,),
+                   PROL_DROIT='CONSTANT',);
+
+NU_ES=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(100.0,2.0,300.0,3.0,),
+                    PROL_DROIT='CONSTANT',);
+
+AL_ES=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(100.0,2.0,300.0,3.0,),
+                    PROL_DROIT='CONSTANT',);
+
+MT_ES=DEFI_MATERIAU(ELAS_FO=_F(NU=NU_ES,
+                               ALPHA=AL_ES,
+                               RHO=7800.0,
+                               E=E_ES,),);
+# EMBOUT INFERIEUR
+
+
+E_EI=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                   NOM_PARA='TEMP',
+                   VALE=(100.0,2.0,300.0,3.0,),
+                   PROL_DROIT='CONSTANT',);
+
+NU_EI=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(100.0,2.0,300.0,3.0,),
+                    PROL_DROIT='CONSTANT',);
+
+AL_EI=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(100.0,2.0,300.0,3.0,),
+                    PROL_DROIT='CONSTANT',);
+
+MT_EI=DEFI_MATERIAU(ELAS_FO=_F(NU=NU_EI,
+                               ALPHA=AL_EI,
+                               RHO=12.0,
+                               E=E_EI,),);
+
+MT_RIG=DEFI_MATERIAU(ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+# FONCTION COUPLE EN FONCTION DE DRZ POUR LA LIAISON GRILLE/CRAYON
+
+
+FOTRAC=DEFI_FONCTION(PROL_GAUCHE='LINEAIRE',
+                     NOM_PARA='DRZ',
+                     VALE=(1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,),
+                     PROL_DROIT='LINEAIRE',);
+
+MT_RE1=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG1,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE2=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG2,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE3=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG3,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE4=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG4,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE5=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG5,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE6=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG6,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE7=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG7,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE8=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG8,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE9=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                    RELA_MZ=FOTRAC,
+                                    RIGI_N_FO=FRIG9,
+                                    COULOMB=1.0,),
+                     ELAS=_F(NU=0.0,
+                             ALPHA=0.0,
+                             RHO=0.0,
+                             E=1.0,),);
+
+MT_RE10=DEFI_MATERIAU(DIS_CONTACT=_F(EFFO_N_INIT=-35.0,
+                                     RELA_MZ=FOTRAC,
+                                     RIGI_N_FO=FRIG10,
+                                     COULOMB=1.0,),
+                      ELAS=_F(NU=0.0,
+                              ALPHA=0.0,
+                              RHO=0.0,
+                              E=1.0,),);
+# SYSTEME DE MAINTIEN
+
+
+E_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                   NOM_PARA='TEMP',
+                   VALE=(0.0,1.0,5.0,2.0,),
+                   PROL_DROIT='CONSTANT',);
+
+NU_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+
+AL_MA=DEFI_CONSTANTE(VALE=0.29999999999999999,);
+
+SY_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+
+DS_MA=DEFI_CONSTANTE(VALE=0.29999999999999999,);
+
+NP_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+
+MEY_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+MPY_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+MEZ_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+MPZ_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+CAY_MA=DEFI_CONSTANTE(VALE=0.29999999999999999,);
+
+CBY_MA=DEFI_CONSTANTE(VALE=0.29999999999999999,);
+
+CAZ_MA=DEFI_CONSTANTE(VALE=0.29999999999999999,);
+
+CBZ_MA=DEFI_CONSTANTE(VALE=0.29999999999999999,);
+
+MPX_MA=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+MT_MA=DEFI_MATERIAU(VMIS_POUTRE_FO=_F(MEZ=MEZ_MA,
+                                      MPX=MPX_MA,
+                                      MPZ=MPZ_MA,
+                                      CBY=CBY_MA,
+                                      NP=NP_MA,
+                                      CBZ=CBZ_MA,
+                                      MEY=MEY_MA,
+                                      CAY=CAY_MA,
+                                      CAZ=CAZ_MA,
+                                      MPY=MPY_MA,),
+                    ECRO_LINE_FO=_F(D_SIGM_EPSI=DS_MA,
+                                    SY=SY_MA,),
+                    ELAS_FO=_F(NU=NU_MA,
+                               ALPHA=AL_MA,
+                               RHO=7800.0,
+                               E=E_MA,),);
+#
+#           **** DEFINITION DES MATERIAUX AVEC FLUX NEUTRONIQUE ****
+#
+#
+# GRILLE
+
+
+E_GRE=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+
+E_GRM=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+
+NU_GRE=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+NU_GRM=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+AL_GRE=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+
+AL_GRM=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                     NOM_PARA='TEMP',
+                     VALE=(0.0,1.0,5.0,2.0,),
+                     PROL_DROIT='CONSTANT',);
+# TUBE GUIDE
+
+
+E_TU=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                   NOM_PARA='TEMP',
+                   VALE=(0.0,1.0,5.0,2.0,),
+                   PROL_DROIT='CONSTANT',);
+
+NU_TU=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+
+AL_TU=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+# CRAYON
+
+
+E_CR=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                   NOM_PARA='TEMP',
+                   VALE=(0.0,1.0,5.0,2.0,),
+                   PROL_DROIT='CONSTANT',);
+
+NU_CR=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+
+AL_CR=DEFI_FONCTION(PROL_GAUCHE='CONSTANT',
+                    NOM_PARA='TEMP',
+                    VALE=(0.0,1.0,5.0,2.0,),
+                    PROL_DROIT='CONSTANT',);
+# GRANDISSEMENT DES GRILLES
+# GRILLES EXTREMES 1 ET 10
+
+
+MT_GRE1=DEFI_MATERIAU(GRAN_IRRA=_F(FONC_MULT=FLUX_F1,
+                                   FLUX_L=FLUXAX1,
+                                   FLUX_TN=FLUXRD1,
+                                   S=1.0,
+                                   A=0.0,),
+                      LEMAITRE=_F(N=0.0,
+                                  UN_SUR_M=0.0,
+                                  QSR_K=1.0,
+                                  UN_SUR_K=0.0,),
+                      ELAS_FO=_F(NU=NU_GRE,
+                                 ALPHA=AL_GRE,
+                                 RHO=7800.0,
+                                 E=E_GRE,),);
+# GRILLES DE MELANGE       
+
+
+MT_GRM1=DEFI_MATERIAU(GRAN_IRRA=_F(FONC_MULT=FLUX_F1,
+                                   FLUX_L=FLUXAX1,
+                                   FLUX_TN=FLUXRD1,
+                                   S=1.0,
+                                   A=0.0,),
+                      LEMAITRE=_F(N=0.0,
+                                  UN_SUR_M=0.0,
+                                  QSR_K=2.0,
+                                  UN_SUR_K=0.0,),
+                      ELAS_FO=_F(NU=NU_GRM,
+                                 ALPHA=AL_GRM,
+                                 RHO=7800.0,
+                                 E=E_GRM,),);
+# DEFINITION DES MATERIAUX VISCOPLASTIQUES ( TUBES ET CRAYONS )
+
+
+MT_TU1=DEFI_MATERIAU(GRAN_IRRA=_F(FONC_MULT=FLUX_F1,
+                                  FLUX_L=FLUXAX1,
+                                  FLUX_TN=FLUXRD1,
+                                  S=1.0,
+                                  A=0.0,),
+                     LEMAITRE=_F(N=0.0,
+                                 UN_SUR_M=0.0,
+                                 QSR_K=2.0,
+                                 UN_SUR_K=0.0,),
+                     ELAS_FO=_F(NU=NU_TU,
+                                ALPHA=AL_TU,
+                                RHO=7800.0,
+                                E=E_TU,),);
+
+MT_CR1=DEFI_MATERIAU(GRAN_IRRA=_F(FONC_MULT=FLUX_F1,
+                                  FLUX_L=FLUXAX1,
+                                  FLUX_TN=FLUXRD1,
+                                  S=1.0,
+                                  A=0.0,),
+                     LEMAITRE=_F(N=0.0,
+                                 UN_SUR_M=0.0,
+                                 QSR_K=2.0,
+                                 UN_SUR_K=0.0,),
+                     ELAS_FO=_F(NU=NU_CR,
+                                ALPHA=AL_CR,
+                                RHO=7800.0,
+                                E=E_CR,),);
+#
+#           AFFECTATION DES MATERIAUX A CHAUD - CYCLE  
+#
+#
+
+
+A_MAT_1=AFFE_MATERIAU(AFFE=(_F(TEMP_REF=100.0,
+                               MATER=MT_MA,
+                               GROUP_MA=('MAINTI_Y','MAINTI_Z',),),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_GRM1,
+                               GROUP_MA='GRIL_I',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_GRE1,
+                               GROUP_MA='GRIL_E',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_CR1,
+                               GROUP_MA='CRAY',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_TU1,
+                               GROUP_MA='GUID',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_EI,
+                               GROUP_MA='EBOINF',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_EI,
+                               GROUP_MA=('PI_PLE','PI_TRO',),),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_ES,
+                               GROUP_MA='EBOSUP',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RIG,
+                               GROUP_MA='RIGID',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE1,
+                               GROUP_MA='ELA1',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE2,
+                               GROUP_MA='ELA2',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE3,
+                               GROUP_MA='ELA3',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE4,
+                               GROUP_MA='ELA4',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE5,
+                               GROUP_MA='ELA5',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE6,
+                               GROUP_MA='ELA6',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE7,
+                               GROUP_MA='ELA7',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE8,
+                               GROUP_MA='ELA8',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE9,
+                               GROUP_MA='ELA9',),
+                            _F(TEMP_REF=100.0,
+                               MATER=MT_RE10,
+                               GROUP_MA='ELA10',),),
+                      MAILLAGE=MA1,);
+#
+
+
+L_INST_1=DEFI_LIST_REEL(INTERVALLE=(_F(JUSQU_A=0.5,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=1000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=2000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=3000.0,
+                                       NOMBRE=5,),
+                                    _F(JUSQU_A=4000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=5000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=6000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=7000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=8000.0,
+                                       NOMBRE=1,),),
+                        DEBUT=0.0,);
+
+L_ARCH_1=DEFI_LIST_REEL(INTERVALLE=(_F(JUSQU_A=0.5,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=1000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=2000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=3000.0,
+                                       NOMBRE=5,),
+                                    _F(JUSQU_A=4000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=5000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=6000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=7000.0,
+                                       NOMBRE=1,),
+                                    _F(JUSQU_A=8000.0,
+                                       NOMBRE=1,),),
+                        DEBUT=0.0,);
+#
+# CALCUL PHASE I A V DU CYCLE 1
+#
+
+
+RESU=STAT_NON_LINE(CHAM_MATER=A_MAT_1,
+                   MODELE=MO1,
+                   ARCHIVAGE=_F(LIST_INST=L_ARCH_1,),
+                   CONVERGENCE=_F(ITER_GLOB_MAXI=50,
+                                  ITER_INTE_MAXI=500,
+                                  RESI_GLOB_RELA=1.E-4,
+                                  ARRET='OUI',),
+                   COMP_INCR=(_F(RELATION='VMIS_POU_LINE',
+                                 GROUP_MA='MAINTIEN',),
+                              _F(RELATION='ASSE_COMBU',
+                                 GROUP_MA=('CRAYONS','TUB_GUID',),),
+                              _F(RELATION='DIS_CONTACT',
+                                 GROUP_MA='LI_GR_CR',),
+                              _F(COQUE_NCOU=1,
+                                 RELATION='ELAS',
+                                 GROUP_MA=('EMBO_INF','EMBO_SUP','PIEDS','GRILLES','LI_GR_GU',),),),
+                   INCREMENT=_F(NUME_INST_FIN=20,
+                                LIST_INST=L_INST_1,),
+                   CARA_ELEM=CARA1,
+                   RECH_LINEAIRE=_F(ITER_LINE_MAXI=3,),
+                   NEWTON=_F(REAC_ITER=1,
+                             MATRICE='TANGENTE',),
+                   SOLVEUR=_F(METHODE='MULT_FRONT',
+                              RENUM='MD',),
+                   EXCIT=(_F(FONC_MULT=ARCH_F1,
+                             CHARGE=ARCH_1,),
+                          _F(FONC_MULT=ARCH_F1,
+                             CHARGE=FOARCH_1,),
+                          _F(FONC_MULT=HYDR_F1,
+                             CHARGE=HYDR_1,),
+                          _F(FONC_MULT=HYDR_F1,
+                             CHARGE=FOHYDR_1,),
+                          _F(FONC_MULT=CLDI_F1,
+                             CHARGE=CL_DI_1,),
+                          _F(CHARGE=CL_PER_1,),
+                          _F(CHARGE=CL_CTC,),
+                          _F(CHARGE=PESANT_1,),
+                          _F(CHARGE=THERM_1,),),
+                   PARM_THETA=0.5,);
+
+FIN();
diff --git a/Exemples/ex23/__init__.py b/Exemples/ex23/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex23/ahlv100a.comm b/Exemples/ex23/ahlv100a.comm
new file mode 100755 (executable)
index 0000000..2cb6159
--- /dev/null
@@ -0,0 +1,354 @@
+# MODIF  DATE 11/12/2001   AUTEUR DURAND C.DURAND 
+# TITRE GUIDE D'ONDE A SORTIE ANECHOIQUE (ONDES PLANES) E.F. CLASSIQUES
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+#  MODELISATION 'ACOUSTIQUE' AVEC ELEMENTS HEXA20 ET FACE8
+#  GUIDE D'ONDE ACOUSTIQUE EN E.F. CLASSIQUES
+#
+
+DEBUT(CODE=_F( NOM = 'AHLV100A')  )
+
+F=500.
+
+MAIL=LIRE_MAILLAGE( )
+
+AIR=DEFI_MATERIAU( FLUIDE=_F( RHO = 1.3, CELE_C = ('RI',343.,0.,)))
+
+CHAMPMAT=AFFE_MATERIAU(  MAILLAGE=MAIL,
+                                 AFFE=_F( TOUT = 'OUI',  MATER = AIR) )
+
+GUIDE=AFFE_MODELE(  MAILLAGE=MAIL,     VERIF='MAILLE',
+                            AFFE=_F( TOUT = 'OUI', MODELISATION = '3D',
+                                     PHENOMENE = 'ACOUSTIQUE') )
+
+CHARACOU=AFFE_CHAR_ACOU(      MODELE=GUIDE,
+                 VITE_FACE=_F( GROUP_MA = 'ENTREE', VNOR = ('RI',0.014,0.,)))
+
+IMPEACOU=AFFE_CHAR_ACOU(      MODELE=GUIDE,
+                 IMPE_FACE=_F( GROUP_MA = 'SORTIE', IMPE = ('RI',445.9,0.,)))
+
+MACRO_MATR_ASSE(
+                      MODELE=GUIDE,         CHARGE=IMPEACOU,
+                      CHAM_MATER=CHAMPMAT,
+                      NUME_DDL=CO("NUM"),MATR_ASSE=(
+                      _F(  MATRICE = CO("MATASK"), OPTION = 'RIGI_ACOU'),
+                                _F(  MATRICE = CO("MATASM"), OPTION = 'MASS_ACOU'),
+                                _F(  MATRICE = CO("MATASI"), OPTION = 'AMOR_ACOU'))
+                   )
+
+#
+
+VECTELEM=CALC_VECT_ELEM(   OPTION='CHAR_ACOU',  CHAM_MATER=CHAMPMAT,
+                                CHARGE=CHARACOU )
+
+#
+# IMPRESSION DU VECT_ELEM COMPLEXE VECTELEM SELON LE GRAIN MAILLE
+# 
+
+IMPR_MATRICE(   MATR_ELEM=_F(  MATRICE = VECTELEM,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'MAILLE'))
+
+VECTASS=ASSE_VECTEUR(  VECT_ELEM=VECTELEM,   NUME_DDL=NUM )
+
+#
+#  ____________________CALCUL DES MODES_________________________________
+#
+
+MATASKR=COMB_MATR_ASSE(    COMB_R=_F( MATR_ASSE = MATASK,  PARTIE = 'REEL', COEF_R = 1.))
+
+MATASMR=COMB_MATR_ASSE(    COMB_R=_F( MATR_ASSE = MATASM,  PARTIE = 'REEL', COEF_R = 1.))
+
+#
+
+MODES=MODE_ITER_SIMULT(      MATR_A=MATASKR,
+                                     MATR_B=MATASMR,
+                                  CALC_FREQ=_F( OPTION = 'BANDE',
+                                             FREQ = ( 1., 1000.,))
+                               )
+
+TEST_RESU(RESU=(_F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-4,
+                    NUME_ORDRE = 1,  VALE = 171.5),
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-4,
+                    NUME_ORDRE = 2,  VALE = 343.), 
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-3,
+                    NUME_ORDRE = 3,  VALE = 514.5),
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-2,
+                    NUME_ORDRE = 4,  VALE = 686.),            
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 1.E-3,
+                    NUME_ORDRE = 5,  VALE = 857.5),     
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 6,  VALE = 857.5),      
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 7,  VALE = 874.482),      
+              _F( RESULTAT = MODES,  PARA = 'FREQ',
+                    CRITERE = 'RELATIF',  PRECISION = 5.E-3,
+                    NUME_ORDRE = 8,  VALE = 923.556))
+             )
+
+#  ----------------------CALCUL DECOMPOSE-------------------------------
+#
+
+MATRES=COMB_MATR_ASSE( COMB_C=(   _F( MATR_ASSE = MATASK,
+                                        COEF_R = 1.),
+                                       _F( MATR_ASSE = MATASM,
+                                        COEF_R = -9869604.4),
+                                       _F( MATR_ASSE = MATASI,
+                                        COEF_C = ('RI',0.,3141.5926,)))
+                            )
+
+#
+# IMPRESSION DE LA MATRICE COMPLEXE MATRES SELON LE GRAIN NOEUD
+# 
+
+IMPR_MATRICE(   MATR_ASSE=_F(  MATRICE = MATRES,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'NOEUD',
+                               OPTION = 'LIGNE'))
+
+#
+# IMPRESSION DE LA MATRICE COMPLEXE MATRES SELON LE GRAIN VALEUR
+# 
+
+IMPR_MATRICE(   MATR_ASSE=_F(  MATRICE = MATRES,
+                               FORMAT = 'RESULTAT',
+                               FICHIER = 'RESULTAT',
+                               GRAIN = 'VALEUR',
+                               OPTION = 'LIGNE'))
+
+VECRES=COMB_CHAM_NO(    COMB_C=_F( CHAM_NO = VECTASS,
+                                      COEF_C = ('RI',0.,-3141.5926,))
+                            )
+
+MATRES=FACT_LDLT( reuse=MATRES,  MATR_ASSE=MATRES )
+
+VECRES=RESO_LDLT( reuse=VECRES,  MATR_FACT=MATRES,
+                             CHAM_NO=VECRES
+                        )
+
+TEST_RESU(CHAM_NO=(
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)),
+             _F( CHAM_GD = VECRES,
+              NOEUD = 'NO763', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)))
+             )
+
+CHNODBEL=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_DBEL'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( CHAM_GD = CHNODBEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'DB',  VALE = 109.9))
+             )
+
+#
+
+PREEL=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_REEL'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE = -6.2426),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE = -6.2426),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE = 6.02368),
+             _F( CHAM_GD = PREEL,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'PRES', VALE = 6.02368))
+             )
+
+PIMAG=CALC_CHAM_ELEM(      MODELE=GUIDE,
+                              CHAM_MATER=CHAMPMAT,
+                               PRES=VECRES,
+                                  OPTION='PRES_ELNO_IMAG'
+                            )
+
+TEST_RESU(CHAM_ELEM=(
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',   NOM_CMP = 'PRES', VALE = 0.,
+            CRITERE = 'ABSOLU'),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'PRES', VALE = 0.,
+            CRITERE = 'ABSOLU'),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA57',
+            NOEUD = 'NO751', NOM_CMP = 'PRES', VALE = 1.6387, PRECISION = 3.3E-3),
+           _F( CHAM_GD = PIMAG,
+            MAILLE = 'MA57',
+            NOEUD = 'NO763', NOM_CMP = 'PRES', VALE = 1.6387, PRECISION = 3.3E-3))
+             )
+
+#-----------------------CALCUL HARMONIQUE-------------------------------
+
+
+PRESHARM=DYNA_LINE_HARM( MATR_MASS=MATASM,  MATR_RIGI=MATASK,
+                             MATR_AMOR=MATASI,
+                               FREQ=F,
+                             EXCIT=_F( VECT_ASSE = VECTASS,  COEF_MULT = -1.,
+                                    PUIS_PULS = 1,  PHAS_DEG = 90.))
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO1',  NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO780', NOM_CMP = 'PRES', VALE_C = ('RI',-6.2426,0.,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO751', NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES',  NUME_ORDRE = 1,
+              NOEUD = 'NO763',  NOM_CMP = 'PRES', VALE_C = ('RI',6.02368,1.6387,)))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='INTE_ELNO_ACTI'
+           )
+
+TEST_RESU(RESU=(
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',  NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA57',
+            NOEUD = 'NO751', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_ACTI', NUME_ORDRE = 01,
+            MAILLE = 'MA57',
+            NOEUD = 'NO763', NOM_CMP = 'INTX',  VALE = 0.04370, PRECISION = 3.E-2))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='INTE_ELNO_REAC'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'INTE_ELNO_REAC', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'INTX',  VALE = 0.0, PRECISION = 3.5E-4,
+                                                 CRITERE = 'ABSOLU'))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_DBEL'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',  NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'DB',  VALE = 109.9),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_DBEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'DB',  VALE = 109.9))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_REEL'
+           )
+
+TEST_RESU(RESU=(
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO1',   NOM_CMP = 'PRES',  VALE = -6.2426),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA1',
+              NOEUD = 'NO780', NOM_CMP = 'PRES',  VALE = -6.2426),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO751', NOM_CMP = 'PRES',  VALE = 6.02368),
+             _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_REEL', NUME_ORDRE = 01,
+              MAILLE = 'MA57',
+              NOEUD = 'NO763', NOM_CMP = 'PRES',  VALE = 6.02368))
+             )
+
+PRESHARM=CALC_ELEM( reuse=PRESHARM,     MODELE=GUIDE,   CHAM_MATER=CHAMPMAT,
+                            TOUT_ORDRE='OUI',
+                             RESULTAT=PRESHARM,
+                               OPTION='PRES_ELNO_IMAG'
+           )
+
+TEST_RESU(RESU=(
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO1',  NOM_CMP = 'PRES',  VALE = 0.,
+                                     CRITERE = 'ABSOLU'),
+           _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+            MAILLE = 'MA1',
+            NOEUD = 'NO780', NOM_CMP = 'PRES',  VALE = 0.,
+                                     CRITERE = 'ABSOLU'),
+          _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+           MAILLE = 'MA57',
+           NOEUD = 'NO751', NOM_CMP = 'PRES',  VALE = 1.6387, PRECISION = 3.3E-3,
+                                     CRITERE = 'RELATIF'),
+          _F( RESULTAT = PRESHARM,  NOM_CHAM = 'PRES_ELNO_IMAG', NUME_ORDRE = 01,
+           MAILLE = 'MA57',
+           NOEUD = 'NO763',  NOM_CMP = 'PRES',  VALE = 1.6387, PRECISION = 3.3E-3))
+             )
+
+FIN()
+#
+#
diff --git a/Exemples/ex23/main.py b/Exemples/ex23/main.py
new file mode 100644 (file)
index 0000000..a944439
--- /dev/null
@@ -0,0 +1,25 @@
+"""
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+from Cata import cata
+
+f=open('ahlv100a.comm','r')
+text=f.read()
+f.close()
+
+j=cata.JdC(procedure=text,cata=cata,nom="ahlv100a")
+j.analyse()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+# On récupère les plugins de la famille generator
+import generator
+
+g=generator.plugins['python']()
+print g.gener(j,format='beautifie')
+g.writefile('titi.comm')
+
diff --git a/Exemples/ex23/main2.py b/Exemples/ex23/main2.py
new file mode 100644 (file)
index 0000000..500e258
--- /dev/null
@@ -0,0 +1,25 @@
+"""
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+from Cata import cata
+
+f=open('titi.comm','r')
+text=f.read()
+f.close()
+
+j=cata.JdC(procedure=text,cata=cata,nom="ahlv100a")
+j.analyse()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+# On récupère les plugins de la famille generator
+import generator
+
+g=generator.plugins['python']()
+print g.gener(j,format='beautifie')
+g.writefile('toto.comm')
+
diff --git a/Exemples/ex23/titi.comm b/Exemples/ex23/titi.comm
new file mode 100644 (file)
index 0000000..7c31d05
--- /dev/null
@@ -0,0 +1,472 @@
+
+
+DEBUT(CODE=_F(NOM='AHLV100A',),);
+
+MAIL=LIRE_MAILLAGE();
+
+AIR=DEFI_MATERIAU(FLUIDE=_F(RHO=1.3,
+                            CELE_C=('RI',343.0,0.0),),);
+
+CHAMPMAT=AFFE_MATERIAU(AFFE=_F(MATER=AIR,
+                               TOUT='OUI',),
+                       MAILLAGE=MAIL,);
+
+GUIDE=AFFE_MODELE(MAILLAGE=MAIL,
+                  VERIF='MAILLE',
+                  AFFE=_F(TOUT='OUI',
+                          PHENOMENE='ACOUSTIQUE',
+                          MODELISATION='3D',),);
+
+CHARACOU=AFFE_CHAR_ACOU(MODELE=GUIDE,
+                        VITE_FACE=_F(VNOR=('RI',0.014,0.0),
+                                     GROUP_MA='ENTREE',),);
+
+IMPEACOU=AFFE_CHAR_ACOU(MODELE=GUIDE,
+                        IMPE_FACE=_F(IMPE=('RI',445.89999999999998,0.0),
+                                     GROUP_MA='SORTIE',),);
+
+MACRO_MATR_ASSE(CHAM_MATER=CHAMPMAT,
+                MATR_ASSE=(_F(MATRICE=CO('MATASK'),
+                              OPTION='RIGI_ACOU',),
+                           _F(MATRICE=CO('MATASM'),
+                              OPTION='MASS_ACOU',),
+                           _F(MATRICE=CO('MATASI'),
+                              OPTION='AMOR_ACOU',),),
+                NUME_DDL=CO('NUM'),
+                MODELE=GUIDE,
+                CHARGE=IMPEACOU,);
+
+VECTELEM=CALC_VECT_ELEM(OPTION='CHAR_ACOU',
+                        CHAM_MATER=CHAMPMAT,
+                        CHARGE=CHARACOU,);
+
+IMPR_MATRICE(MATR_ELEM=_F(GRAIN='MAILLE',
+                          MATRICE=VECTELEM,
+                          FORMAT='RESULTAT',
+                          FICHIER='RESULTAT',),);
+
+VECTASS=ASSE_VECTEUR(VECT_ELEM=VECTELEM,
+                     NUME_DDL=NUM,);
+
+MATASKR=COMB_MATR_ASSE(COMB_R=_F(PARTIE='REEL',
+                                 MATR_ASSE=MATASK,
+                                 COEF_R=1.0,),);
+
+MATASMR=COMB_MATR_ASSE(COMB_R=_F(PARTIE='REEL',
+                                 MATR_ASSE=MATASM,
+                                 COEF_R=1.0,),);
+
+MODES=MODE_ITER_SIMULT(MATR_A=MATASKR,
+                       MATR_B=MATASMR,
+                       CALC_FREQ=_F(OPTION='BANDE',
+                                    FREQ=(1.0,1000.0),),);
+
+TEST_RESU(RESU=(_F(RESULTAT=MODES,
+                   PRECISION=1.E-4,
+                   CRITERE='RELATIF',
+                   VALE=171.5,
+                   NUME_ORDRE=1,
+                   PARA='FREQ',),
+                _F(RESULTAT=MODES,
+                   PRECISION=1.E-4,
+                   CRITERE='RELATIF',
+                   VALE=343.0,
+                   NUME_ORDRE=2,
+                   PARA='FREQ',),
+                _F(RESULTAT=MODES,
+                   PRECISION=1.E-3,
+                   CRITERE='RELATIF',
+                   VALE=514.5,
+                   NUME_ORDRE=3,
+                   PARA='FREQ',),
+                _F(RESULTAT=MODES,
+                   PRECISION=1.E-2,
+                   CRITERE='RELATIF',
+                   VALE=686.0,
+                   NUME_ORDRE=4,
+                   PARA='FREQ',),
+                _F(RESULTAT=MODES,
+                   PRECISION=1.E-3,
+                   CRITERE='RELATIF',
+                   VALE=857.5,
+                   NUME_ORDRE=5,
+                   PARA='FREQ',),
+                _F(RESULTAT=MODES,
+                   PRECISION=5.0000000000000001E-3,
+                   CRITERE='RELATIF',
+                   VALE=857.5,
+                   NUME_ORDRE=6,
+                   PARA='FREQ',),
+                _F(RESULTAT=MODES,
+                   PRECISION=5.0000000000000001E-3,
+                   CRITERE='RELATIF',
+                   VALE=874.48199999999997,
+                   NUME_ORDRE=7,
+                   PARA='FREQ',),
+                _F(RESULTAT=MODES,
+                   PRECISION=5.0000000000000001E-3,
+                   CRITERE='RELATIF',
+                   VALE=923.55600000000004,
+                   NUME_ORDRE=8,
+                   PARA='FREQ',),),);
+
+MATRES=COMB_MATR_ASSE(COMB_C=(_F(MATR_ASSE=MATASK,
+                                 COEF_R=1.0,),
+                              _F(MATR_ASSE=MATASM,
+                                 COEF_R=-9.8696044000000004E6,),
+                              _F(COEF_C=('RI',0.0,3141.5925999999999),
+                                 MATR_ASSE=MATASI,),),);
+
+IMPR_MATRICE(MATR_ASSE=_F(GRAIN='NOEUD',
+                          MATRICE=MATRES,
+                          FORMAT='RESULTAT',
+                          OPTION='LIGNE',
+                          FICHIER='RESULTAT',),);
+
+IMPR_MATRICE(MATR_ASSE=_F(GRAIN='VALEUR',
+                          MATRICE=MATRES,
+                          FORMAT='RESULTAT',
+                          OPTION='LIGNE',
+                          FICHIER='RESULTAT',),);
+
+VECRES=COMB_CHAM_NO(COMB_C=_F(COEF_C=('RI',0.0,-3141.5925999999999),
+                              CHAM_NO=VECTASS,),);
+
+MATRES=FACT_LDLT(reuse =MATRES,
+                 MATR_ASSE=MATRES,);
+
+VECRES=RESO_LDLT(reuse =VECRES,
+                 MATR_FACT=MATRES,
+                 CHAM_NO=VECRES,);
+
+TEST_RESU(CHAM_NO=(_F(CHAM_GD=VECRES,
+                      NOM_CMP='PRES',
+                      VALE_C=('RI',-6.2426000000000004,0.0),
+                      NOEUD='NO1',),
+                   _F(CHAM_GD=VECRES,
+                      NOM_CMP='PRES',
+                      VALE_C=('RI',-6.2426000000000004,0.0),
+                      NOEUD='NO780',),
+                   _F(CHAM_GD=VECRES,
+                      NOM_CMP='PRES',
+                      VALE_C=('RI',6.0236799999999997,1.6387),
+                      NOEUD='NO751',),
+                   _F(CHAM_GD=VECRES,
+                      NOM_CMP='PRES',
+                      VALE_C=('RI',6.0236799999999997,1.6387),
+                      NOEUD='NO763',),),);
+
+CHNODBEL=CALC_CHAM_ELEM(MODELE=GUIDE,
+                        CHAM_MATER=CHAMPMAT,
+                        OPTION='PRES_ELNO_DBEL',
+                        PRES=VECRES,);
+
+TEST_RESU(CHAM_ELEM=(_F(CHAM_GD=CHNODBEL,
+                        MAILLE='MA1',
+                        VALE=109.90000000000001,
+                        NOM_CMP='DB',
+                        NOEUD='NO1',),
+                     _F(CHAM_GD=CHNODBEL,
+                        MAILLE='MA1',
+                        VALE=109.90000000000001,
+                        NOM_CMP='DB',
+                        NOEUD='NO780',),
+                     _F(CHAM_GD=CHNODBEL,
+                        MAILLE='MA57',
+                        VALE=109.90000000000001,
+                        NOM_CMP='DB',
+                        NOEUD='NO751',),
+                     _F(CHAM_GD=CHNODBEL,
+                        MAILLE='MA57',
+                        VALE=109.90000000000001,
+                        NOM_CMP='DB',
+                        NOEUD='NO763',),),);
+
+PREEL=CALC_CHAM_ELEM(MODELE=GUIDE,
+                     CHAM_MATER=CHAMPMAT,
+                     OPTION='PRES_ELNO_REEL',
+                     PRES=VECRES,);
+
+TEST_RESU(CHAM_ELEM=(_F(CHAM_GD=PREEL,
+                        MAILLE='MA1',
+                        VALE=-6.2426000000000004,
+                        NOM_CMP='PRES',
+                        NOEUD='NO1',),
+                     _F(CHAM_GD=PREEL,
+                        MAILLE='MA1',
+                        VALE=-6.2426000000000004,
+                        NOM_CMP='PRES',
+                        NOEUD='NO780',),
+                     _F(CHAM_GD=PREEL,
+                        MAILLE='MA57',
+                        VALE=6.0236799999999997,
+                        NOM_CMP='PRES',
+                        NOEUD='NO751',),
+                     _F(CHAM_GD=PREEL,
+                        MAILLE='MA57',
+                        VALE=6.0236799999999997,
+                        NOM_CMP='PRES',
+                        NOEUD='NO763',),),);
+
+PIMAG=CALC_CHAM_ELEM(MODELE=GUIDE,
+                     CHAM_MATER=CHAMPMAT,
+                     OPTION='PRES_ELNO_IMAG',
+                     PRES=VECRES,);
+
+TEST_RESU(CHAM_ELEM=(_F(CHAM_GD=PIMAG,
+                        MAILLE='MA1',
+                        VALE=0.0,
+                        NOM_CMP='PRES',
+                        CRITERE='ABSOLU',
+                        NOEUD='NO1',),
+                     _F(CHAM_GD=PIMAG,
+                        MAILLE='MA1',
+                        VALE=0.0,
+                        NOM_CMP='PRES',
+                        CRITERE='ABSOLU',
+                        NOEUD='NO780',),
+                     _F(CHAM_GD=PIMAG,
+                        MAILLE='MA57',
+                        VALE=1.6387,
+                        PRECISION=3.3E-3,
+                        NOM_CMP='PRES',
+                        NOEUD='NO751',),
+                     _F(CHAM_GD=PIMAG,
+                        MAILLE='MA57',
+                        VALE=1.6387,
+                        PRECISION=3.3E-3,
+                        NOM_CMP='PRES',
+                        NOEUD='NO763',),),);
+
+PRESHARM=DYNA_LINE_HARM(MATR_MASS=MATASM,
+                        MATR_AMOR=MATASI,
+                        FREQ=500.0,
+                        MATR_RIGI=MATASK,
+                        EXCIT=_F(PUIS_PULS=1,
+                                 VECT_ASSE=VECTASS,
+                                 PHAS_DEG=90.0,
+                                 COEF_MULT=-1.0,),);
+
+TEST_RESU(RESU=(_F(NOM_CHAM='PRES',
+                   RESULTAT=PRESHARM,
+                   NOEUD='NO1',
+                   VALE_C=('RI',-6.2426000000000004,0.0),
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES',
+                   RESULTAT=PRESHARM,
+                   NOEUD='NO780',
+                   VALE_C=('RI',-6.2426000000000004,0.0),
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES',
+                   RESULTAT=PRESHARM,
+                   NOEUD='NO751',
+                   VALE_C=('RI',6.0236799999999997,1.6387),
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES',
+                   RESULTAT=PRESHARM,
+                   NOEUD='NO763',
+                   VALE_C=('RI',6.0236799999999997,1.6387),
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),),);
+
+PRESHARM=CALC_ELEM(reuse =PRESHARM,
+                   RESULTAT=PRESHARM,
+                   CHAM_MATER=CHAMPMAT,
+                   MODELE=GUIDE,
+                   OPTION='INTE_ELNO_ACTI',
+                   TOUT_ORDRE='OUI',);
+
+TEST_RESU(RESU=(_F(NOM_CHAM='INTE_ELNO_ACTI',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO1',
+                   PRECISION=0.029999999999999999,
+                   VALE=0.043700000000000003,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='INTE_ELNO_ACTI',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO780',
+                   PRECISION=0.029999999999999999,
+                   VALE=0.043700000000000003,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='INTE_ELNO_ACTI',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO751',
+                   PRECISION=0.029999999999999999,
+                   VALE=0.043700000000000003,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='INTE_ELNO_ACTI',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO763',
+                   PRECISION=0.029999999999999999,
+                   VALE=0.043700000000000003,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),),);
+
+PRESHARM=CALC_ELEM(reuse =PRESHARM,
+                   RESULTAT=PRESHARM,
+                   CHAM_MATER=CHAMPMAT,
+                   MODELE=GUIDE,
+                   OPTION='INTE_ELNO_REAC',
+                   TOUT_ORDRE='OUI',);
+
+TEST_RESU(RESU=(_F(NOM_CHAM='INTE_ELNO_REAC',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO1',
+                   PRECISION=3.5E-4,
+                   CRITERE='ABSOLU',
+                   VALE=0.0,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='INTE_ELNO_REAC',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO780',
+                   PRECISION=3.5E-4,
+                   CRITERE='ABSOLU',
+                   VALE=0.0,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='INTE_ELNO_REAC',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO751',
+                   PRECISION=3.5E-4,
+                   CRITERE='ABSOLU',
+                   VALE=0.0,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='INTE_ELNO_REAC',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO763',
+                   PRECISION=3.5E-4,
+                   CRITERE='ABSOLU',
+                   VALE=0.0,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),),);
+
+PRESHARM=CALC_ELEM(reuse =PRESHARM,
+                   RESULTAT=PRESHARM,
+                   CHAM_MATER=CHAMPMAT,
+                   MODELE=GUIDE,
+                   OPTION='PRES_ELNO_DBEL',
+                   TOUT_ORDRE='OUI',);
+
+TEST_RESU(RESU=(_F(NOM_CHAM='PRES_ELNO_DBEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO1',
+                   VALE=109.90000000000001,
+                   NOM_CMP='DB',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_DBEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO780',
+                   VALE=109.90000000000001,
+                   NOM_CMP='DB',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_DBEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO751',
+                   VALE=109.90000000000001,
+                   NOM_CMP='DB',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_DBEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO763',
+                   VALE=109.90000000000001,
+                   NOM_CMP='DB',
+                   NUME_ORDRE=1,),),);
+
+PRESHARM=CALC_ELEM(reuse =PRESHARM,
+                   RESULTAT=PRESHARM,
+                   CHAM_MATER=CHAMPMAT,
+                   MODELE=GUIDE,
+                   OPTION='PRES_ELNO_REEL',
+                   TOUT_ORDRE='OUI',);
+
+TEST_RESU(RESU=(_F(NOM_CHAM='PRES_ELNO_REEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO1',
+                   VALE=-6.2426000000000004,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_REEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO780',
+                   VALE=-6.2426000000000004,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_REEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO751',
+                   VALE=6.0236799999999997,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_REEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO763',
+                   VALE=6.0236799999999997,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),),);
+
+PRESHARM=CALC_ELEM(reuse =PRESHARM,
+                   RESULTAT=PRESHARM,
+                   CHAM_MATER=CHAMPMAT,
+                   MODELE=GUIDE,
+                   OPTION='PRES_ELNO_IMAG',
+                   TOUT_ORDRE='OUI',);
+
+TEST_RESU(RESU=(_F(NOM_CHAM='PRES_ELNO_IMAG',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO1',
+                   CRITERE='ABSOLU',
+                   VALE=0.0,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_IMAG',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO780',
+                   CRITERE='ABSOLU',
+                   VALE=0.0,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_IMAG',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO751',
+                   PRECISION=3.3E-3,
+                   CRITERE='RELATIF',
+                   VALE=1.6387,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_IMAG',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO763',
+                   PRECISION=3.3E-3,
+                   VALE=1.6387,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),),);
+
+FIN();
diff --git a/Exemples/ex23/toto.comm b/Exemples/ex23/toto.comm
new file mode 100644 (file)
index 0000000..7c31d05
--- /dev/null
@@ -0,0 +1,472 @@
+
+
+DEBUT(CODE=_F(NOM='AHLV100A',),);
+
+MAIL=LIRE_MAILLAGE();
+
+AIR=DEFI_MATERIAU(FLUIDE=_F(RHO=1.3,
+                            CELE_C=('RI',343.0,0.0),),);
+
+CHAMPMAT=AFFE_MATERIAU(AFFE=_F(MATER=AIR,
+                               TOUT='OUI',),
+                       MAILLAGE=MAIL,);
+
+GUIDE=AFFE_MODELE(MAILLAGE=MAIL,
+                  VERIF='MAILLE',
+                  AFFE=_F(TOUT='OUI',
+                          PHENOMENE='ACOUSTIQUE',
+                          MODELISATION='3D',),);
+
+CHARACOU=AFFE_CHAR_ACOU(MODELE=GUIDE,
+                        VITE_FACE=_F(VNOR=('RI',0.014,0.0),
+                                     GROUP_MA='ENTREE',),);
+
+IMPEACOU=AFFE_CHAR_ACOU(MODELE=GUIDE,
+                        IMPE_FACE=_F(IMPE=('RI',445.89999999999998,0.0),
+                                     GROUP_MA='SORTIE',),);
+
+MACRO_MATR_ASSE(CHAM_MATER=CHAMPMAT,
+                MATR_ASSE=(_F(MATRICE=CO('MATASK'),
+                              OPTION='RIGI_ACOU',),
+                           _F(MATRICE=CO('MATASM'),
+                              OPTION='MASS_ACOU',),
+                           _F(MATRICE=CO('MATASI'),
+                              OPTION='AMOR_ACOU',),),
+                NUME_DDL=CO('NUM'),
+                MODELE=GUIDE,
+                CHARGE=IMPEACOU,);
+
+VECTELEM=CALC_VECT_ELEM(OPTION='CHAR_ACOU',
+                        CHAM_MATER=CHAMPMAT,
+                        CHARGE=CHARACOU,);
+
+IMPR_MATRICE(MATR_ELEM=_F(GRAIN='MAILLE',
+                          MATRICE=VECTELEM,
+                          FORMAT='RESULTAT',
+                          FICHIER='RESULTAT',),);
+
+VECTASS=ASSE_VECTEUR(VECT_ELEM=VECTELEM,
+                     NUME_DDL=NUM,);
+
+MATASKR=COMB_MATR_ASSE(COMB_R=_F(PARTIE='REEL',
+                                 MATR_ASSE=MATASK,
+                                 COEF_R=1.0,),);
+
+MATASMR=COMB_MATR_ASSE(COMB_R=_F(PARTIE='REEL',
+                                 MATR_ASSE=MATASM,
+                                 COEF_R=1.0,),);
+
+MODES=MODE_ITER_SIMULT(MATR_A=MATASKR,
+                       MATR_B=MATASMR,
+                       CALC_FREQ=_F(OPTION='BANDE',
+                                    FREQ=(1.0,1000.0),),);
+
+TEST_RESU(RESU=(_F(RESULTAT=MODES,
+                   PRECISION=1.E-4,
+                   CRITERE='RELATIF',
+                   VALE=171.5,
+                   NUME_ORDRE=1,
+                   PARA='FREQ',),
+                _F(RESULTAT=MODES,
+                   PRECISION=1.E-4,
+                   CRITERE='RELATIF',
+                   VALE=343.0,
+                   NUME_ORDRE=2,
+                   PARA='FREQ',),
+                _F(RESULTAT=MODES,
+                   PRECISION=1.E-3,
+                   CRITERE='RELATIF',
+                   VALE=514.5,
+                   NUME_ORDRE=3,
+                   PARA='FREQ',),
+                _F(RESULTAT=MODES,
+                   PRECISION=1.E-2,
+                   CRITERE='RELATIF',
+                   VALE=686.0,
+                   NUME_ORDRE=4,
+                   PARA='FREQ',),
+                _F(RESULTAT=MODES,
+                   PRECISION=1.E-3,
+                   CRITERE='RELATIF',
+                   VALE=857.5,
+                   NUME_ORDRE=5,
+                   PARA='FREQ',),
+                _F(RESULTAT=MODES,
+                   PRECISION=5.0000000000000001E-3,
+                   CRITERE='RELATIF',
+                   VALE=857.5,
+                   NUME_ORDRE=6,
+                   PARA='FREQ',),
+                _F(RESULTAT=MODES,
+                   PRECISION=5.0000000000000001E-3,
+                   CRITERE='RELATIF',
+                   VALE=874.48199999999997,
+                   NUME_ORDRE=7,
+                   PARA='FREQ',),
+                _F(RESULTAT=MODES,
+                   PRECISION=5.0000000000000001E-3,
+                   CRITERE='RELATIF',
+                   VALE=923.55600000000004,
+                   NUME_ORDRE=8,
+                   PARA='FREQ',),),);
+
+MATRES=COMB_MATR_ASSE(COMB_C=(_F(MATR_ASSE=MATASK,
+                                 COEF_R=1.0,),
+                              _F(MATR_ASSE=MATASM,
+                                 COEF_R=-9.8696044000000004E6,),
+                              _F(COEF_C=('RI',0.0,3141.5925999999999),
+                                 MATR_ASSE=MATASI,),),);
+
+IMPR_MATRICE(MATR_ASSE=_F(GRAIN='NOEUD',
+                          MATRICE=MATRES,
+                          FORMAT='RESULTAT',
+                          OPTION='LIGNE',
+                          FICHIER='RESULTAT',),);
+
+IMPR_MATRICE(MATR_ASSE=_F(GRAIN='VALEUR',
+                          MATRICE=MATRES,
+                          FORMAT='RESULTAT',
+                          OPTION='LIGNE',
+                          FICHIER='RESULTAT',),);
+
+VECRES=COMB_CHAM_NO(COMB_C=_F(COEF_C=('RI',0.0,-3141.5925999999999),
+                              CHAM_NO=VECTASS,),);
+
+MATRES=FACT_LDLT(reuse =MATRES,
+                 MATR_ASSE=MATRES,);
+
+VECRES=RESO_LDLT(reuse =VECRES,
+                 MATR_FACT=MATRES,
+                 CHAM_NO=VECRES,);
+
+TEST_RESU(CHAM_NO=(_F(CHAM_GD=VECRES,
+                      NOM_CMP='PRES',
+                      VALE_C=('RI',-6.2426000000000004,0.0),
+                      NOEUD='NO1',),
+                   _F(CHAM_GD=VECRES,
+                      NOM_CMP='PRES',
+                      VALE_C=('RI',-6.2426000000000004,0.0),
+                      NOEUD='NO780',),
+                   _F(CHAM_GD=VECRES,
+                      NOM_CMP='PRES',
+                      VALE_C=('RI',6.0236799999999997,1.6387),
+                      NOEUD='NO751',),
+                   _F(CHAM_GD=VECRES,
+                      NOM_CMP='PRES',
+                      VALE_C=('RI',6.0236799999999997,1.6387),
+                      NOEUD='NO763',),),);
+
+CHNODBEL=CALC_CHAM_ELEM(MODELE=GUIDE,
+                        CHAM_MATER=CHAMPMAT,
+                        OPTION='PRES_ELNO_DBEL',
+                        PRES=VECRES,);
+
+TEST_RESU(CHAM_ELEM=(_F(CHAM_GD=CHNODBEL,
+                        MAILLE='MA1',
+                        VALE=109.90000000000001,
+                        NOM_CMP='DB',
+                        NOEUD='NO1',),
+                     _F(CHAM_GD=CHNODBEL,
+                        MAILLE='MA1',
+                        VALE=109.90000000000001,
+                        NOM_CMP='DB',
+                        NOEUD='NO780',),
+                     _F(CHAM_GD=CHNODBEL,
+                        MAILLE='MA57',
+                        VALE=109.90000000000001,
+                        NOM_CMP='DB',
+                        NOEUD='NO751',),
+                     _F(CHAM_GD=CHNODBEL,
+                        MAILLE='MA57',
+                        VALE=109.90000000000001,
+                        NOM_CMP='DB',
+                        NOEUD='NO763',),),);
+
+PREEL=CALC_CHAM_ELEM(MODELE=GUIDE,
+                     CHAM_MATER=CHAMPMAT,
+                     OPTION='PRES_ELNO_REEL',
+                     PRES=VECRES,);
+
+TEST_RESU(CHAM_ELEM=(_F(CHAM_GD=PREEL,
+                        MAILLE='MA1',
+                        VALE=-6.2426000000000004,
+                        NOM_CMP='PRES',
+                        NOEUD='NO1',),
+                     _F(CHAM_GD=PREEL,
+                        MAILLE='MA1',
+                        VALE=-6.2426000000000004,
+                        NOM_CMP='PRES',
+                        NOEUD='NO780',),
+                     _F(CHAM_GD=PREEL,
+                        MAILLE='MA57',
+                        VALE=6.0236799999999997,
+                        NOM_CMP='PRES',
+                        NOEUD='NO751',),
+                     _F(CHAM_GD=PREEL,
+                        MAILLE='MA57',
+                        VALE=6.0236799999999997,
+                        NOM_CMP='PRES',
+                        NOEUD='NO763',),),);
+
+PIMAG=CALC_CHAM_ELEM(MODELE=GUIDE,
+                     CHAM_MATER=CHAMPMAT,
+                     OPTION='PRES_ELNO_IMAG',
+                     PRES=VECRES,);
+
+TEST_RESU(CHAM_ELEM=(_F(CHAM_GD=PIMAG,
+                        MAILLE='MA1',
+                        VALE=0.0,
+                        NOM_CMP='PRES',
+                        CRITERE='ABSOLU',
+                        NOEUD='NO1',),
+                     _F(CHAM_GD=PIMAG,
+                        MAILLE='MA1',
+                        VALE=0.0,
+                        NOM_CMP='PRES',
+                        CRITERE='ABSOLU',
+                        NOEUD='NO780',),
+                     _F(CHAM_GD=PIMAG,
+                        MAILLE='MA57',
+                        VALE=1.6387,
+                        PRECISION=3.3E-3,
+                        NOM_CMP='PRES',
+                        NOEUD='NO751',),
+                     _F(CHAM_GD=PIMAG,
+                        MAILLE='MA57',
+                        VALE=1.6387,
+                        PRECISION=3.3E-3,
+                        NOM_CMP='PRES',
+                        NOEUD='NO763',),),);
+
+PRESHARM=DYNA_LINE_HARM(MATR_MASS=MATASM,
+                        MATR_AMOR=MATASI,
+                        FREQ=500.0,
+                        MATR_RIGI=MATASK,
+                        EXCIT=_F(PUIS_PULS=1,
+                                 VECT_ASSE=VECTASS,
+                                 PHAS_DEG=90.0,
+                                 COEF_MULT=-1.0,),);
+
+TEST_RESU(RESU=(_F(NOM_CHAM='PRES',
+                   RESULTAT=PRESHARM,
+                   NOEUD='NO1',
+                   VALE_C=('RI',-6.2426000000000004,0.0),
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES',
+                   RESULTAT=PRESHARM,
+                   NOEUD='NO780',
+                   VALE_C=('RI',-6.2426000000000004,0.0),
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES',
+                   RESULTAT=PRESHARM,
+                   NOEUD='NO751',
+                   VALE_C=('RI',6.0236799999999997,1.6387),
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES',
+                   RESULTAT=PRESHARM,
+                   NOEUD='NO763',
+                   VALE_C=('RI',6.0236799999999997,1.6387),
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),),);
+
+PRESHARM=CALC_ELEM(reuse =PRESHARM,
+                   RESULTAT=PRESHARM,
+                   CHAM_MATER=CHAMPMAT,
+                   MODELE=GUIDE,
+                   OPTION='INTE_ELNO_ACTI',
+                   TOUT_ORDRE='OUI',);
+
+TEST_RESU(RESU=(_F(NOM_CHAM='INTE_ELNO_ACTI',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO1',
+                   PRECISION=0.029999999999999999,
+                   VALE=0.043700000000000003,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='INTE_ELNO_ACTI',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO780',
+                   PRECISION=0.029999999999999999,
+                   VALE=0.043700000000000003,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='INTE_ELNO_ACTI',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO751',
+                   PRECISION=0.029999999999999999,
+                   VALE=0.043700000000000003,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='INTE_ELNO_ACTI',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO763',
+                   PRECISION=0.029999999999999999,
+                   VALE=0.043700000000000003,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),),);
+
+PRESHARM=CALC_ELEM(reuse =PRESHARM,
+                   RESULTAT=PRESHARM,
+                   CHAM_MATER=CHAMPMAT,
+                   MODELE=GUIDE,
+                   OPTION='INTE_ELNO_REAC',
+                   TOUT_ORDRE='OUI',);
+
+TEST_RESU(RESU=(_F(NOM_CHAM='INTE_ELNO_REAC',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO1',
+                   PRECISION=3.5E-4,
+                   CRITERE='ABSOLU',
+                   VALE=0.0,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='INTE_ELNO_REAC',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO780',
+                   PRECISION=3.5E-4,
+                   CRITERE='ABSOLU',
+                   VALE=0.0,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='INTE_ELNO_REAC',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO751',
+                   PRECISION=3.5E-4,
+                   CRITERE='ABSOLU',
+                   VALE=0.0,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='INTE_ELNO_REAC',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO763',
+                   PRECISION=3.5E-4,
+                   CRITERE='ABSOLU',
+                   VALE=0.0,
+                   NOM_CMP='INTX',
+                   NUME_ORDRE=1,),),);
+
+PRESHARM=CALC_ELEM(reuse =PRESHARM,
+                   RESULTAT=PRESHARM,
+                   CHAM_MATER=CHAMPMAT,
+                   MODELE=GUIDE,
+                   OPTION='PRES_ELNO_DBEL',
+                   TOUT_ORDRE='OUI',);
+
+TEST_RESU(RESU=(_F(NOM_CHAM='PRES_ELNO_DBEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO1',
+                   VALE=109.90000000000001,
+                   NOM_CMP='DB',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_DBEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO780',
+                   VALE=109.90000000000001,
+                   NOM_CMP='DB',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_DBEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO751',
+                   VALE=109.90000000000001,
+                   NOM_CMP='DB',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_DBEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO763',
+                   VALE=109.90000000000001,
+                   NOM_CMP='DB',
+                   NUME_ORDRE=1,),),);
+
+PRESHARM=CALC_ELEM(reuse =PRESHARM,
+                   RESULTAT=PRESHARM,
+                   CHAM_MATER=CHAMPMAT,
+                   MODELE=GUIDE,
+                   OPTION='PRES_ELNO_REEL',
+                   TOUT_ORDRE='OUI',);
+
+TEST_RESU(RESU=(_F(NOM_CHAM='PRES_ELNO_REEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO1',
+                   VALE=-6.2426000000000004,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_REEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO780',
+                   VALE=-6.2426000000000004,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_REEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO751',
+                   VALE=6.0236799999999997,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_REEL',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO763',
+                   VALE=6.0236799999999997,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),),);
+
+PRESHARM=CALC_ELEM(reuse =PRESHARM,
+                   RESULTAT=PRESHARM,
+                   CHAM_MATER=CHAMPMAT,
+                   MODELE=GUIDE,
+                   OPTION='PRES_ELNO_IMAG',
+                   TOUT_ORDRE='OUI',);
+
+TEST_RESU(RESU=(_F(NOM_CHAM='PRES_ELNO_IMAG',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO1',
+                   CRITERE='ABSOLU',
+                   VALE=0.0,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_IMAG',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA1',
+                   NOEUD='NO780',
+                   CRITERE='ABSOLU',
+                   VALE=0.0,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_IMAG',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO751',
+                   PRECISION=3.3E-3,
+                   CRITERE='RELATIF',
+                   VALE=1.6387,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),
+                _F(NOM_CHAM='PRES_ELNO_IMAG',
+                   RESULTAT=PRESHARM,
+                   MAILLE='MA57',
+                   NOEUD='NO763',
+                   PRECISION=3.3E-3,
+                   VALE=1.6387,
+                   NOM_CMP='PRES',
+                   NUME_ORDRE=1,),),);
+
+FIN();
diff --git a/Exemples/ex24/__init__.py b/Exemples/ex24/__init__.py
new file mode 100644 (file)
index 0000000..4cef2ec
--- /dev/null
@@ -0,0 +1,3 @@
+"""
+    Cet exemple montre l'utilisation d'un catalogue avec NIVEAU
+"""
diff --git a/Exemples/ex24/essai_saturne.py b/Exemples/ex24/essai_saturne.py
new file mode 100755 (executable)
index 0000000..001712a
--- /dev/null
@@ -0,0 +1,54 @@
+
+sansnom=DEFI_SONDE(Z=45,
+                   X=None,
+                   Y=None,);
+SD_1=DEFI_SONDE(Z=None,
+                X=None,
+                Y=None,);
+sd1=DEFI_SONDE(Z=1.1,
+               X=1.2,
+               Y=1.3,);
+sd2=DEFI_SONDE(Z=2.2,
+               X=2.1,
+               Y=2.3,);
+sd3=DEFI_SONDE(Z=3.1,
+               X=3.2,
+               Y=3.3,);
+temperature=DEFI_SCALA(RESTITUE=_F(NOMVAR='temperature',),
+                       MODELE=_F(VALREF=300,
+                                 VISLS0=0.1,),
+                       NUMERIC=_F(ICONV=1,
+                                  BLENCV=0,),);
+cb=DEFI_SCALA(RESTITUE=_F(NOMVAR='bore',),
+              MODELE=_F(VALREF=1000,
+                        VISLS0=0.12,),
+              NUMERIC=_F(ICONV=1,
+                         BLENCV=0,),);
+CALCUL_SATURNE(ENVELOPPE=_F(IFOENV=2,
+                            FICEVI='enveloppe_vers_solveur          ',
+                            IMPEVI=13,
+                            IMPEVO=14,FICEVO='solveur_vers_enveloppe          ',),
+               CONSTANTES_PHYSIQUES=_F(FLUIDE=_F(VISCL0=0.12,
+                                                 P0=1000000.0,
+                                                 RO0=995.3,),
+                                       GRAVITE=_F(GX=0,GY=0,GZ=0,),),
+               HISTORIQUE_PONCTUEL=_F(),
+               EQUATIONS=_F(TURBULENCE=_F(ITURB=1,ISCALT=temperature,IGRAKE=0,),),
+               DEFINITION_EQUATION=_F(INC_PRESSION=_F(ICONV=0,),
+                                      INC_VITESSEZ=_F(ICONV=1,BLENCV=0,),
+                                      INC_VITESSEY=_F(ICONV=1,BLENCV=0,),
+                                      INC_VITESSEX=_F(ICONV=1,BLENCV=0,),
+                                      INC_K=_F(ICONV=1,BLENCV=0,),
+                                      INC_EPS=_F(ICONV=1,BLENCV=0,),),
+               VARIABLES=_F(VITESSE_Z=_F(NOMVAR='Vitesse_w1',IHISVR=(sd2,sd3),),
+                            VITESSE_X=_F(NOMVAR='Vitesse_u1',),
+                            VITESSE_Y=_F(NOMVAR='Vitesse_v1',),
+                            PRESSION=_F(NOMVAR='Pression',),
+                            MASVOL1=_F(NOMVAR='Masse_vol1',),
+                            E_TURB=_F(NOMVAR='Energie_1',IHISVR=sd1,),
+                            V_TURB=_F(NOMVAR='Visc_turb1',),
+                            D_TURB=_F(NOMVAR='Dissipation',),),
+               FICHIERS_CALCUL=_F(),
+               GESTION_CALCUL=_F(NTMABS=1000,ISUITE=0,),
+               MARCHE_TEMPS=_F(DTREF=0.01,XCFMAX=0.5,),
+               );
diff --git a/Exemples/ex24/essai_saturne2.py b/Exemples/ex24/essai_saturne2.py
new file mode 100755 (executable)
index 0000000..d78d8a4
--- /dev/null
@@ -0,0 +1,82 @@
+
+SD1=DEFI_SONDE(Z=1,
+               X=2,
+               Y=3,);
+SD2=DEFI_SONDE(Z=1,
+               X=2,
+               Y=3,);
+SD3=DEFI_SONDE(Z=3,
+               X=4,
+               Y=5,);
+SD4=DEFI_SONDE(Z=12,
+               X=11,
+               Y=10,);
+SD5=DEFI_SONDE(Z=21,
+               X=21,
+               Y=21,);
+temperature=DEFI_SCALA(RESTITUE=_F(NOMVAR='temperature',
+                                   ILISVR=1,
+                                   ICHRVR=1,
+                                   IHISVR=SD1,),
+                       MODELE=_F(SIGMAS=0.9,
+                                 SCAMAX=1000,
+                                 VALREF=300.0,
+                                 SCAMIN=270,
+                                 VISLS0=0.05,
+                                 IVISLS=1,
+                                 ),
+                       NUMERIC=_F(IMLIGR=1,
+                                  CLIMGR=1.7,
+                                  EPSRGR=0.0001,
+                                  NITMAX=1000,
+                                  IDIRCL=0,
+                                  IDIFF=1,
+                                  NSWRGR=2,
+                                  NSWRSM=10,
+                                  EPSILO=1e-05,
+                                  ISTAT=1,
+                                  ICONV=1,
+                                  BLENCV=0.5,
+                                  ISCHCV=1,),);
+cb=DEFI_SCALA(RESTITUE=_F(NOMVAR='bore',),
+              MODELE=_F(VALREF=1000.0,
+                        VISLS0=0.3,),
+              NUMERIC=_F(ICONV=1,
+                         BLENCV=0,),);
+CALCUL_SATURNE(ENVELOPPE=_F(IFOENV=2,
+                            FICEVI='Enveloppe_vers_solveur          ',
+                            IMPEVI=83,
+                            IMPEVO=84,
+                            FICEVO='Solveur_vers_enveloppe          ',),
+               OPTIONS_TURBULENCE=_F(ISCALT=temperature),
+               CONSTANTES_PHYSIQUES=_F(FLUIDE=_F(VISCL0=0.1,
+                                                 P0=10000.0,
+                                                 RO0=1000.0,),
+                                       GRAVITE=_F(GX=0,
+                                                  GY=0,
+                                                  GZ=0,),),
+               HISTORIQUE_PONCTUEL=_F(FICHIERS_HISTORIQUES=_F(EXTHIS='histo',
+                                                              EMPHIS='./',),
+                                      NTHIST=1,
+                                      NTHSAV=20,),
+               VARIABLES=_F( MASVOL1=_F(NOMVAR='Masse_vol1',
+                                       IHISVR=SD2,
+                                       ICHRVR=0,
+                                       ILISVR=1,),
+                            NTLIST=2,
+                            IWARNI=3,),
+               GESTION_CALCUL=_F(NTMABS=1000,
+                                 ISUITE=0,
+                                 NTPABS=100,
+                                 TTPABS=10.5,),
+               MARCHE_TEMPS=_F(DTREF=0.001,
+                               IDTVAR=2,),
+               FICHIERS_CALCUL=_F(FICHIER_STOP=_F(FICSTP='ficstop',
+                                                  IMPSTP=82,),
+                                  SUITE_AVAL=_F(FICAVA='sui_amo',
+                                                IMPAVA=70,
+                                                IFOAVA=1,),),
+               POST_PROC_ENSIGHT=_F(IFOENS=1,
+                                    NTCHR=3,
+                                    ITCHR=10,),);
+
diff --git a/Exemples/ex24/essai_saturne4.py b/Exemples/ex24/essai_saturne4.py
new file mode 100755 (executable)
index 0000000..5c35bf0
--- /dev/null
@@ -0,0 +1,9 @@
+
+sansnom=DEFI_SONDE(Z=None,
+                   X=None,
+                   Y=None,);
+sansnom=DEFI_DTURB(RESTITUE=_F(NOMVAR=None,),
+                   MODELE=_F(VALREF=None,
+                             VISLS0=None,),
+                   NUMERIC=_F(ICONV=1,
+                              BLENCV=0,),);
\ No newline at end of file
diff --git a/Exemples/ex24/include.py b/Exemples/ex24/include.py
new file mode 100644 (file)
index 0000000..e819bdf
--- /dev/null
@@ -0,0 +1,14 @@
+
+
+
+SD0=DEFI_SONDE(X=2,
+               Y=3,
+               Z=1,);
+#
+
+
+
+##SD6=DEFI_SONDE(X=2,
+##               Y=3,
+##               Z=1,);
+
diff --git a/Exemples/ex24/kk.py b/Exemples/ex24/kk.py
new file mode 100644 (file)
index 0000000..3e98b70
--- /dev/null
@@ -0,0 +1,103 @@
+
+
+SD1=DEFI_SONDE(X=2,
+               Y=3,
+               Z=1,);
+#
+
+#
+
+_param_1 = 1;
+
+_param_2 = 2 ;
+
+_param_4 = EVAL("""23""")
+
+
+
+##SD2=DEFI_SONDE(X=2,
+##               Y=3,
+##               Z=1,);
+
+SD3=DEFI_SONDE(X=4,
+               Y=5,
+               Z=3,);
+
+SD4=DEFI_SONDE(X=11,
+               Y=10,
+               Z=12,);
+
+SD5=DEFI_SONDE(X=21,
+               Y=21,
+               Z=21,);
+
+temperature=DEFI_SCALA(NUMERIC=_F(ICONV=1,
+                                  ISTAT=1,
+                                  IDIFF=1,
+                                  IDIRCL=0,
+                                  BLENCV=0.5,
+                                  ISCHCV=1,
+                                  NITMAX=1000,
+                                  EPSILO=1.0000000000000001E-05,
+                                  IMLIGR=1,
+                                  NSWRGR=2,
+                                  NSWRSM=10,
+                                  CLIMGR=1.7,
+                                  EPSRGR=1.E-4,),
+                       RESTITUE=_F(NOMVAR='temperature',
+                                   ICHRVR=1,
+                                   ILISVR=1,
+                                   IHISVR=SD1,),
+                       MODELE=_F(VALREF=300.0,
+                                 SCAMIN=270,
+                                 SCAMAX=1000,
+                                 SIGMAS=0.90000000000000002,
+                                 VISLS0=0.050000000000000003,
+                                 IVISLS=1,),);
+
+cb=DEFI_SCALA(NUMERIC=_F(ICONV=1,
+                         BLENCV=0,),
+              RESTITUE=_F(NOMVAR='bore',),
+              MODELE=_F(VALREF=1000.0,
+                        VISLS0=0.29999999999999999,),);
+
+CALCUL_SATURNE(ENVELOPPE=_F(IFOENV=2,
+                            IMPEVI=83,
+                            FICEVI='Enveloppe_vers_solveur          ',
+                            IMPEVO=84,
+                            FICEVO='Solveur_vers_enveloppe          ',),
+               FICHIERS_CALCUL=_F(FICHIER_STOP=_F(IMPSTP=82,
+                                                  FICSTP='ficstop',),
+                                  SUITE_AVAL=_F(IMPAVA=70,
+                                                FICAVA='sui_amo',
+                                                IFOAVA=1,),),
+               POST_PROC_ENSIGHT=_F(IFOENS=1,
+                                    NTCHR=3,
+                                    ITCHR=10,),
+               HISTORIQUE_PONCTUEL=_F(FICHIERS_HISTORIQUES=_F(EMPHIS='./',
+                                                              EXTHIS='histo',),
+                                      NTHIST=1,
+                                      NTHSAV=20,),
+               OPTIONS_TURBULENCE=_F(IGRAKE=0,
+                                     ISCALT=temperature,),
+               MARCHE_TEMPS=_F(DTREF=1.E-3,
+                               IDTVAR=2,
+                               XCFMAX=0.5,),
+               OPTIONS_EQUATIONS=_F(),
+               VARIABLES=_F(NTLIST=2,
+                            IWARNI=3,
+                            MASVOL1=_F(NOMVAR='Masse_vol1',
+                                       ICHRVR=0,
+                                       ILISVR=1,
+                                       IHISVR=SD2,),),
+               GESTION_CALCUL=_F(ISUITE=0,
+                                 NTPABS=100,
+                                 NTMABS=1000,
+                                 TTPABS=10.5,),
+               CONSTANTES_PHYSIQUES=_F(GRAVITE=_F(GX=0,
+                                                  GY=0,
+                                                  GZ=0,),
+                                       FLUIDE=_F(RO0=1000.0,
+                                                 VISCL0=0.10000000000000001,
+                                                 P0=1.E4,),),
+               );
diff --git a/Exemples/ex24/main.py b/Exemples/ex24/main.py
new file mode 100644 (file)
index 0000000..a2d1bf2
--- /dev/null
@@ -0,0 +1,33 @@
+"""
+"""
+
+import sys
+sys.path[:0]=['../..','../../Minicode']
+
+import cata_saturne
+
+import convert
+c=convert.plugins['python']()
+c.readfile('kk.py')
+text=c.convert('exec')
+print text
+
+j=cata_saturne.JdC(procedure=text,cata=cata_saturne,nom="essai_saturne")
+
+j.analyse()
+if not j.cr.estvide():
+   print j.cr
+   sys.exit()
+
+cr=j.report()
+if not cr.estvide():
+   print cr
+   sys.exit()
+
+# On récupère les plugins de la famille generator
+import generator
+
+g=generator.plugins['python']()
+print g.gener(j,format='beautifie')
+g.writefile('titi.comm')
+
diff --git a/Exemples/ex24/titi.comm b/Exemples/ex24/titi.comm
new file mode 100644 (file)
index 0000000..fc0b15d
--- /dev/null
@@ -0,0 +1,102 @@
+
+
+SD1=DEFI_SONDE(Z=1,
+               X=2,
+               Y=3,);
+#
+#
+#
+
+_param_1 = 1;
+
+_param_2 = 2;
+
+_param_4 = EVAL("""23""");
+
+
+SD2=DEFI_SONDE(Z=1,
+               X=2,
+               Y=3,);
+
+SD3=DEFI_SONDE(Z=3,
+               X=4,
+               Y=5,);
+
+SD4=DEFI_SONDE(Z=12,
+               X=11,
+               Y=10,);
+
+SD5=DEFI_SONDE(Z=21,
+               X=21,
+               Y=21,);
+
+temperature=DEFI_SCALA(RESTITUE=_F(NOMVAR='temperature',
+                                   ILISVR=1,
+                                   ICHRVR=1,
+                                   IHISVR=SD1,),
+                       MODELE=_F(SIGMAS=0.90000000000000002,
+                                 SCAMAX=1000,
+                                 VALREF=300.0,
+                                 SCAMIN=270,
+                                 VISLS0=0.050000000000000003,
+                                 IVISLS=1,),
+                       NUMERIC=_F(IMLIGR=1,
+                                  CLIMGR=1.7,
+                                  EPSRGR=1.E-4,
+                                  NITMAX=1000,
+                                  IDIRCL=0,
+                                  IDIFF=1,
+                                  NSWRGR=2,
+                                  NSWRSM=10,
+                                  EPSILO=1.0000000000000001E-05,
+                                  ISTAT=1,
+                                  ICONV=1,
+                                  BLENCV=0.5,
+                                  ISCHCV=1,),);
+
+cb=DEFI_SCALA(RESTITUE=_F(NOMVAR='bore',),
+              MODELE=_F(VALREF=1000.0,
+                        VISLS0=0.29999999999999999,),
+              NUMERIC=_F(ICONV=1,
+                         BLENCV=0,),);
+
+CALCUL_SATURNE(ENVELOPPE=_F(IFOENV=2,
+                            FICEVI='Enveloppe_vers_solveur          ',
+                            IMPEVI=83,
+                            IMPEVO=84,
+                            FICEVO='Solveur_vers_enveloppe          ',),
+               CONSTANTES_PHYSIQUES=_F(FLUIDE=_F(VISCL0=0.10000000000000001,
+                                                 P0=1.E4,
+                                                 RO0=1000.0,),
+                                       GRAVITE=_F(GX=0,
+                                                  GY=0,
+                                                  GZ=0,),),
+               HISTORIQUE_PONCTUEL=_F(FICHIERS_HISTORIQUES=_F(EXTHIS='histo',
+                                                              EMPHIS='./',),
+                                      NTHSAV=20,
+                                      NTHIST=1,),
+               OPTIONS_TURBULENCE=_F(ISCALT=temperature,
+                                     IGRAKE=0,),
+               VARIABLES=_F(IWARNI=3,
+                            NTLIST=2,
+                            MASVOL1=_F(NOMVAR='Masse_vol1',
+                                       ILISVR=1,
+                                       ICHRVR=0,
+                                       IHISVR=SD2,),),
+               MARCHE_TEMPS=_F(IDTVAR=2,
+                               DTREF=1.E-3,
+                               XCFMAX=0.5,),
+               FICHIERS_CALCUL=_F(SUITE_AVAL=_F(FICAVA='sui_amo',
+                                                IMPAVA=70,
+                                                IFOAVA=1,),
+                                  FICHIER_STOP=_F(FICSTP='ficstop',
+                                                  IMPSTP=82,),),
+               GESTION_CALCUL=_F(NTMABS=1000,
+                                 TTPABS=10.5,
+                                 ISUITE=0,
+                                 NTPABS=100,),
+               OPTIONS_EQUATIONS=_F(),
+               POST_PROC_ENSIGHT=_F(IFOENS=1,
+                                    NTCHR=3,
+                                    ITCHR=10,),
+               );
\ No newline at end of file
diff --git a/Exemples/ex3/__init__.py b/Exemples/ex3/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex3/main.py b/Exemples/ex3/main.py
new file mode 100644 (file)
index 0000000..38f4add
--- /dev/null
@@ -0,0 +1,31 @@
+"""
+    Cet exemple montre :
+     - la création d'une définition de mot-clé facteur
+     - sa vérification (report)
+     - la création d'un mot-clé facteur à partir d'un fichier .ini
+     - sa vérification (report)
+
+"""
+import sys
+sys.path[:0]=['../..']
+
+from Accas import SIMP,FACT
+from parse import MyConfParser
+
+p=MyConfParser()
+p.read('toto.ini')
+
+
+cata= FACT(sect1=FACT(a=SIMP(typ='I'),b=SIMP(typ='I')),
+           sect2=FACT(c=SIMP(typ='I'),d=SIMP(typ='I')),
+          )
+
+cr=cata.report()
+if cr.estvide():
+   print "Verification sans erreur"
+else:
+   print cr
+
+o=cata(p.getdict(),'mcf1',None)
+print o
+print o.report()
diff --git a/Exemples/ex3/parse.py b/Exemples/ex3/parse.py
new file mode 100644 (file)
index 0000000..da8ac46
--- /dev/null
@@ -0,0 +1,24 @@
+
+from ConfigParser import ConfigParser
+
+class MyConfParser(ConfigParser):
+   def getdicttext(self):
+      s='{'
+      for section in self.sections():
+         s=s+ "'" + section + "' : {"
+         options=self.options(section)
+         for option in options:
+            value=self.get(section,option)
+            s=s+"'%s' : %s," % (option, value)
+         s=s+"}, "
+      s=s+"}"
+      return s
+
+   def getdict(self):
+      return eval(self.getdicttext())
+         
+if __name__ == '__main__':
+   p=MyConfParser()
+   p.read("toto.ini")
+   print p.getdicttext()
+   print p.getdict()
diff --git a/Exemples/ex3/toto.ini b/Exemples/ex3/toto.ini
new file mode 100644 (file)
index 0000000..fb8754f
--- /dev/null
@@ -0,0 +1,6 @@
+[sect1]
+a=1.
+b=2
+[sect2]
+c=3
+d=6
diff --git a/Exemples/ex4/__init__.py b/Exemples/ex4/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex4/main.py b/Exemples/ex4/main.py
new file mode 100644 (file)
index 0000000..1343cd4
--- /dev/null
@@ -0,0 +1,43 @@
+import sys
+sys.path[:0]=['../..','../../..']
+
+from Accas import SIMP,FACT
+
+cata= FACT(sect1=FACT(a=SIMP(typ='I'),b=SIMP(typ='I')),
+           sect2=FACT(c=SIMP(typ='I'),d=SIMP(typ='I')),
+          )
+
+cr=cata.report()
+if cr.estvide():
+   print "Verification sans erreur"
+else:
+   print cr
+
+# On récupère les plugins de la famille convert
+import convert
+
+p=convert.plugins['ini']()
+p.readfile('toto.ini')
+s=p.convert('eval')
+if not p.cr.estvide():
+   print p.cr
+   sys.exit(0)
+
+o=cata(eval(s),'mcf1',None)
+print o
+print o.report()
+
+o=cata(p.convert('dict'),'mcf2',None)
+print o
+print o.report()
+
+p=convert.plugins['pyth']()
+p.readfile('toto.pyth')
+d=p.convert('dict')
+if not p.cr.estvide():
+   print p.cr
+   sys.exit(0)
+
+o=cata(d,'mcf3',None)
+print o
+print o.report()
diff --git a/Exemples/ex4/toto.ini b/Exemples/ex4/toto.ini
new file mode 100644 (file)
index 0000000..8d7514b
--- /dev/null
@@ -0,0 +1,6 @@
+[sect1]
+a=1
+b=25
+[sect2]
+c=3
+d=6
diff --git a/Exemples/ex4/toto.pyth b/Exemples/ex4/toto.pyth
new file mode 100644 (file)
index 0000000..835afba
--- /dev/null
@@ -0,0 +1,2 @@
+var1=1
+var2=3
diff --git a/Exemples/ex5/__init__.py b/Exemples/ex5/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex5/main.py b/Exemples/ex5/main.py
new file mode 100644 (file)
index 0000000..f99acfb
--- /dev/null
@@ -0,0 +1,54 @@
+import sys
+sys.path[:0]=['../..','../../..']
+
+from Accas import SIMP,FACT
+
+cata= FACT(sect1=FACT(a=SIMP(typ='I'),b=SIMP(typ='I')),
+           sect2=FACT(c=SIMP(typ='I'),d=SIMP(typ='I')),
+          )
+
+cr=cata.report()
+if cr.estvide():
+   print "Verification sans erreur"
+else:
+   print cr
+
+# On récupère les plugins de la famille convert
+import convert
+
+p=convert.plugins['ini']()
+p.readfile('toto.ini')
+s=p.convert('eval')
+if not p.cr.estvide():
+   print p.cr
+   sys.exit(0)
+
+o=cata(eval(s),'mcf1',None)
+print o
+print o.report()
+
+o=cata(p.convert('dict'),'mcf2',None)
+print o
+print o.report()
+
+# On récupère les plugins de la famille generator
+import generator
+
+g=generator.plugins['ini']()
+g.gener(o)
+g.writefile('titi.ini')
+
+g=generator.plugins['pyth']()
+g.gener(o)
+g.writefile('titi.pyth')
+
+p=convert.plugins['pyth']()
+p.readfile('toto.pyth')
+d=p.convert('dict')
+if not p.cr.estvide():
+   print p.cr
+   sys.exit(0)
+
+o=cata(d,'mcf3',None)
+print o
+print o.report()
diff --git a/Exemples/ex5/titi.ini b/Exemples/ex5/titi.ini
new file mode 100644 (file)
index 0000000..5facfb1
--- /dev/null
@@ -0,0 +1,7 @@
+[sect1]
+b = 25
+a = 1
+
+[sect2]
+c = 3
+d = 6
diff --git a/Exemples/ex5/titi.pyth b/Exemples/ex5/titi.pyth
new file mode 100644 (file)
index 0000000..96b0703
--- /dev/null
@@ -0,0 +1,6 @@
+sect1 = {'b' : 25,
+'a' : 1,
+}
+sect2 = {'c' : 3,
+'d' : 6,
+}
diff --git a/Exemples/ex5/toto.ini b/Exemples/ex5/toto.ini
new file mode 100644 (file)
index 0000000..8d7514b
--- /dev/null
@@ -0,0 +1,6 @@
+[sect1]
+a=1
+b=25
+[sect2]
+c=3
+d=6
diff --git a/Exemples/ex5/toto.pyth b/Exemples/ex5/toto.pyth
new file mode 100644 (file)
index 0000000..835afba
--- /dev/null
@@ -0,0 +1,2 @@
+var1=1
+var2=3
diff --git a/Exemples/ex6/__init__.py b/Exemples/ex6/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex6/main.py b/Exemples/ex6/main.py
new file mode 100644 (file)
index 0000000..9a7693b
--- /dev/null
@@ -0,0 +1,35 @@
+"""
+   Cet exemple construit un objet regle (cata) 
+   de type AU_MOINS_UN
+
+   Ensuite on vérifie le fonctionnement de la règle sur un dictionnaire non conforme
+   à la règle et un dictionnaire conforme à la règle.
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+from Accas import AU_MOINS_UN
+
+# Construction objet de définition
+
+cata=           AU_MOINS_UN('sect3')
+
+
+# Vérification dictionnaire d
+
+d={'sect1':{'a':1},'sect2':{'c':3}}
+
+text,valid= cata.verif(d)
+
+if valid:
+   print "Le dictionnaire %s est conforme à la règle" % d
+else:
+   print "Le dictionnaire %s n'est pas conforme à la règle" % d
+
+d={'sect3':{'a':1},'sect2':{'c':3}}
+text,valid= cata.verif(d)
+if valid:
+   print "Le dictionnaire %s est conforme à la règle" % d
+else:
+   print "Le dictionnaire %s n'est pas conforme à la règle" % d
diff --git a/Exemples/ex7/__init__.py b/Exemples/ex7/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex7/main.py b/Exemples/ex7/main.py
new file mode 100644 (file)
index 0000000..adc2f37
--- /dev/null
@@ -0,0 +1,60 @@
+"""
+   Cet exemple construit un objet de définition (cata) de type FACT
+   qui est composé de 3 objets de définition de type FACT et
+   d'une règle AU_MOINS_UN.
+
+   Dans un premier temps on vérifie la conformite de l'objet 
+   de définition ::
+
+      cr=cata.report()
+      if cr.estvide(): ...
+
+   Dans un deuxième temps, on construit deux objets de type 
+   MCFACT dont la définition est cata et on vérifie la conformité
+   de ces objets.
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+from Accas import SIMP,FACT
+from Accas import AU_MOINS_UN
+
+# Construction objet de définition
+
+cata= FACT(sect1=FACT(a=SIMP(typ='I'),b=SIMP(typ='I')),
+           sect2=FACT(c=SIMP(typ='I'),d=SIMP(typ='I')),
+           sect3=FACT(c=SIMP(typ='I'),d=SIMP(typ='I')),
+           regles=AU_MOINS_UN('sect3')
+          )
+
+# Vérification objet de définition
+
+cr=cata.report()
+if cr.estvide():
+   print "L'objet de définition est valide "
+else:
+   print cr
+
+# Création de l'objet MCFACT de nom mcf1
+
+d={'sect1':{'a':1},'sect2':{'c':3}}
+o=cata(d,'mcf1',None)
+
+# Vérification objet MCFACT
+
+cr= o.report()
+if cr.estvide():
+   print "L'objet MCFACT basé sur le dictionnaire %s est valide " % d
+else:
+   print "L'objet MCFACT basé sur le dictionnaire %s n'est pas valide " % d
+   print cr
+
+d={'sect1':{'a':1},'sect3':{'c':3}}
+o=cata(d,'mcf1',None)
+cr= o.report()
+if cr.estvide():
+   print "L'objet MCFACT basé sur le dictionnaire %s est valide " % d
+else:
+   print "L'objet MCFACT basé sur le dictionnaire %s n'est pas valide " % d
+   print cr
diff --git a/Exemples/ex8/__init__.py b/Exemples/ex8/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex8/main.py b/Exemples/ex8/main.py
new file mode 100644 (file)
index 0000000..de60b13
--- /dev/null
@@ -0,0 +1,50 @@
+"""
+   Cet exemple construit un objet de définition (cata) de type BLOC
+   contenant deux objets SIMP
+
+   Dans un premier temps on vérifie la conformite de l'objet 
+   de définition ::
+
+      cr=cata.report()
+      if cr.estvide(): ...
+
+   Dans un deuxième temps, on construit des objets de type 
+   MCBLOC dont la définition est cata et on vérifie la conformité
+   de ces objets.
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+from Accas import SIMP,FACT,BLOC
+
+# Construction objet de définition
+
+cata= BLOC(condition="a==1",
+           c=SIMP(typ='I'),
+           d=SIMP(typ='I'),
+          )
+
+# Vérification objet de définition
+cr=cata.report()
+if cr.estvide():
+   print "L'objet de définition est valide "
+else:
+   print cr
+
+
+for d in ({'a':1},
+          {'a':1,'c':3},
+          {'a':2,'c':3},
+         ):
+   # Création de l'objet MCBLOC de nom mcf1
+   o=cata(d,'mcf1',None)
+   print "Mots-clés restants : ",o.reste_val
+   # Vérification objet MCBLOC
+   cr= o.report()
+   if cr.estvide():
+      print "L'objet MCBLOC basé sur le dictionnaire %s est valide " % d
+   else:
+      print "L'objet MCBLOC basé sur le dictionnaire %s n'est pas valide " % d
+      print cr
+
diff --git a/Exemples/ex9/__init__.py b/Exemples/ex9/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/ex9/main.py b/Exemples/ex9/main.py
new file mode 100644 (file)
index 0000000..682cb50
--- /dev/null
@@ -0,0 +1,52 @@
+"""
+   Cet exemple construit un objet de définition (cata) de type FACT
+   qui est composé d'un objet SIMP et d'un bloc conditionnel
+   contenant deux objets SIMP
+
+   Dans un premier temps on vérifie la conformite de l'objet 
+   de définition ::
+
+      cr=cata.report()
+      if cr.estvide(): ...
+
+   Dans un deuxième temps, on construit plusieurs objets de type 
+   MCFACT dont la définition est cata et on vérifie la conformité
+   de ces objets.
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+from Accas import SIMP,FACT,BLOC
+
+# Construction objet de définition
+
+cata= FACT(a    =SIMP(typ='I'),
+           bloc1=BLOC(condition="a==1",
+                       c=SIMP(typ='I'),
+                       d=SIMP(typ='I')
+                     ),
+          )
+
+# Vérification objet de définition
+cr=cata.report()
+if cr.estvide():
+   print "L'objet de définition est valide "
+else:
+   print cr
+
+
+for d in ({'a':1},
+          {'a':1,'c':3},
+          {'a':2,'c':3},
+         ):
+   # Création de l'objet MCFACT de nom mcf1
+   o=cata(d,'mcf1',None)
+   # Vérification objet MCFACT
+   cr= o.report()
+   if cr.estvide():
+      print "L'objet MCFACT basé sur le dictionnaire %s est valide " % d
+   else:
+      print "L'objet MCFACT basé sur le dictionnaire %s n'est pas valide " % d
+      print cr
+
diff --git a/Exemples/profile/__init__.py b/Exemples/profile/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Exemples/profile/main.py b/Exemples/profile/main.py
new file mode 100644 (file)
index 0000000..7481401
--- /dev/null
@@ -0,0 +1,105 @@
+"""
+   Cet exemple met en oeuvre le profiling de Python sur un cas
+   avec plusieurs éléments de définition,
+   une opération de vérification du dictionnaire d
+   et l'appel à la méthode supprime de l'objet o 
+"""
+
+import sys
+sys.path[:0]=['../..']
+
+def main():
+   from Accas import SIMP,FACT,BLOC
+   from Accas import AU_MOINS_UN
+
+   # Construction objet de définition
+
+   cata= FACT(mcf1=FACT(a=SIMP(typ='I'),b=SIMP(typ='I')),
+              mcf2=FACT(c=SIMP(typ='I'),d=SIMP(typ='I')),
+              a    =SIMP(typ='I'),
+              bloc1=BLOC(condition="a==1",
+                          c=SIMP(typ='I'),
+                          d=SIMP(typ='I')
+                        ),
+              sect3=FACT(c=SIMP(typ='I'),d=SIMP(typ='I')),
+              regles=AU_MOINS_UN('sect3'),
+             )
+
+   # Vérification objet de définition
+   cr=cata.report()
+   if cr.estvide():
+      print "L'objet de définition est valide "
+   else:
+      print cr
+
+
+   d= {'mcf1':{'a':1,'b':2},
+       'mcf2':({'c':3},{'c':5}),
+       'sect3':{'c':3,'d':5},
+       'a':1,
+       'c':2,
+      }
+
+   # Création de l'objet MCFACT de nom mcf1
+   o=cata(d,'mcf1',None)
+   # Vérification objet MCFACT
+   cr= o.report()
+   if cr.estvide():
+      print "L'objet MCFACT basé sur le dictionnaire %s est valide " % d
+   else:
+      print "L'objet MCFACT basé sur le dictionnaire %s n'est pas valide " % d
+      print cr
+
+   o.supprime()
+
+import profile
+#profile.run("main()")
+prof=profile.Profile()
+try:
+   prof.run("main()")
+except SystemExit:
+   pass
+
+import pstats
+# Impression de différentes statistiques
+p=pstats.Stats(prof)
+
+print "*********************************************"
+print "*  Trié par temps interne (20 plus grands)  *"
+print "*********************************************"
+p.sort_stats('time').print_stats(20)
+
+print "***********************************************"
+print "*  Liste des appellés triée par temps interne *"
+print "***********************************************"
+p.print_callees()
+
+print "************************************************************"
+print "*  Liste des appellants de is_reel triée par temps interne *"
+print "************************************************************"
+p.print_callers('is_reel')
+
+print "*********************************************"
+print "*  Trié par temps cumulé (20 plus grands)   *"
+print "*********************************************"
+p.sort_stats('cumulative').print_stats(20)
+
+print "*********************************************"
+print "*  Trié par noms de fonction                *"
+print "*********************************************"
+p.sort_stats('name').print_stats()
+
+print "*********************************************"
+print "*  Statistique standard                     *"
+print "*********************************************"
+prof.print_stats()
+
+print "*************************************************"
+print "*  Trié par fichier seulement methodes __init__ *"
+print "*************************************************"
+p.sort_stats('file').print_stats('__init__')
+
+
+
+
+
diff --git a/Exemples/profile/resul b/Exemples/profile/resul
new file mode 100644 (file)
index 0000000..bedc5c3
--- /dev/null
@@ -0,0 +1,1162 @@
+L'objet de définition est valide 
+L'objet MCFACT basé sur le dictionnaire {'sect3': {'c': 3, 'd': 5}, 'a': 1, 'mcf1': {'b': 2, 'a': 1}, 'c': 2, 'mcf2': ({'c': 3}, {'c': 5})} est valide 
+*********************************************
+*  Trié par temps interne (20 plus grands)  *
+*********************************************
+         750 function calls (669 primitive calls) in 0.170 CPU seconds
+
+   Ordered by: internal time
+   List reduced from 288 to 20 due to restriction <20>
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+        1    0.010    0.010    0.010    0.010 ../../../Noyau/N_MCLIST.py:15(init)
+      6/1    0.010    0.002    0.010    0.010 ../../../Validation/V_MCCOMPO.py:32(report)
+        1    0.010    0.010    0.170    0.170 profile:0(main())
+        1    0.010    0.010    0.010    0.010 ../../Accas/A_MACRO_ETAPE.py:1(?)
+        1    0.010    0.010    0.010    0.010 /home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:11(?)
+        1    0.010    0.010    0.010    0.010 ../../Accas/A_A_CLASSER.py:1(?)
+        3    0.010    0.003    0.010    0.003 ../../../Noyau/N_MCBLOC.py:18(__init__)
+        1    0.010    0.010    0.010    0.010 ../../../Noyau/N_MCFACT.py:5(?)
+       16    0.010    0.001    0.010    0.001 ../../../Noyau/N_OBJECT.py:27(supprime)
+        1    0.010    0.010    0.010    0.010 ../../Noyau/N_JDC_CATA.py:4(?)
+        1    0.010    0.010    0.010    0.010 /home01/chris/pkg/python2.1/lib/python2.1/types.py:4(?)
+        1    0.010    0.010    0.010    0.010 ../../Build/B_ETAPE.py:2(?)
+        1    0.010    0.010    0.010    0.010 ../../Accas/A_JDC.py:1(?)
+        1    0.010    0.010    0.010    0.010 ../../../Noyau/N_OPER.py:12(OPER)
+        1    0.010    0.010    0.010    0.010 ../../Accas/A_MCSIMP.py:1(?)
+     29/2    0.010    0.000    0.010    0.005 ../../Noyau/N_CR.py:48(estvide)
+     11/7    0.010    0.001    0.010    0.001 ../../../Noyau/N_MCCOMPO.py:93(cree_dict_valeurs)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_constants.py:23(error)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_PROC.py:4(?)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_ENTITE.py:3(?)
+
+
+***********************************************
+*  Liste des appellés triée par temps interne *
+***********************************************
+   Ordered by: internal time
+
+Function                                                                     called...
+../../../Noyau/N_MCLIST.py:15(init)                                           --
+../../../Validation/V_MCCOMPO.py:32(report)                                   ../../../Validation/V_MCCOMPO.py:32(report)(3)    0.010
+                                                                              ../../../Validation/V_MCFACT.py:24(isvalid)(5)    0.000
+                                                                              ../../../Validation/V_MCLIST.py:51(report)(1)    0.000
+                                                                              ../../Noyau/N_CR.py:10(__init__)(6)    0.000
+                                                                              ../../Noyau/N_CR.py:44(add)(12)    0.000
+                                                                              ../../Validation/V_MCBLOC.py:24(isvalid)(1)    0.000
+                                                                              ../../Validation/V_MCSIMP.py:385(report)(8)    0.000
+profile:0(main())                                                             <string>:1(?)(1)    0.160
+../../Accas/A_MACRO_ETAPE.py:1(?)                                             ../../../Validation/V_MACRO_ETAPE.py:8(?)(1)    0.000
+                                                                              ../../Accas/A_MACRO_ETAPE.py:6(MACRO_ETAPE)(1)    0.000
+                                                                              ../../Build/B_MACRO_ETAPE.py:2(?)(1)    0.000
+                                                                              ../../Execution/E_MACRO_ETAPE.py:1(?)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:11(?)                /home01/chris/pkg/python2.1/lib/python2.1/sre_constants.py:14(?)(1)    0.000
+../../Accas/A_A_CLASSER.py:1(?)                                               ../../Accas/A_A_CLASSER.py:4(A_CLASSER)(1)    0.000
+                                                                              ../../Validation/V_A_CLASSER.py:2(?)(1)    0.000
+../../../Noyau/N_MCBLOC.py:18(__init__)                                       ../../../Noyau/N_MCCOMPO.py:16(build_mc)(3)    0.030
+../../../Noyau/N_MCFACT.py:5(?)                                               ../../../Noyau/N_MCCOMPO.py:4(?)(1)    0.000
+                                                                              ../../../Noyau/N_MCFACT.py:9(MCFACT)(1)    0.000
+../../../Noyau/N_OBJECT.py:27(supprime)                                       --
+../../Noyau/N_JDC_CATA.py:4(?)                                                ../../../Noyau/N_JDC.py:3(?)(1)    0.000
+                                                                              ../../Noyau/N_JDC_CATA.py:11(JDC_CATA)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/traceback.py:1(?)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/types.py:4(?)                       /home01/chris/pkg/python2.1/lib/python2.1/types.py:35(_C)(1)    0.000
+../../Build/B_ETAPE.py:2(?)                                                   ../../../Noyau/N_BLOC.py:4(?)(1)    0.000
+                                                                              ../../../Noyau/N_MCBLOC.py:5(?)(1)    0.000
+                                                                              ../../Build/B_ETAPE.py:18(ETAPE)(1)    0.000
+                                                                              ../../Noyau/N_EVAL.py:2(?)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/repr.py:1(?)(1)    0.000
+../../Accas/A_JDC.py:1(?)                                                     ../../Accas/A_JDC.py:6(JDC)(1)    0.000
+                                                                              ../../Build/B_JDC.py:2(?)(1)    0.000
+                                                                              ../../Build/__init__.py:0(?)(1)    0.000
+                                                                              ../../Execution/E_JDC.py:2(?)(1)    0.000
+                                                                              ../../Execution/__init__.py:0(?)(1)    0.000
+                                                                              ../../Validation/V_JDC.py:8(?)(1)    0.000
+                                                                              ../../Validation/__init__.py:6(?)(1)    0.000
+../../../Noyau/N_OPER.py:12(OPER)                                             --
+../../Accas/A_MCSIMP.py:1(?)                                                  ../../Accas/A_MCSIMP.py:4(MCSIMP)(1)    0.000
+                                                                              ../../Validation/V_MCSIMP.py:8(?)(1)    0.000
+../../Noyau/N_CR.py:48(estvide)                                               ../../Noyau/N_CR.py:48(estvide)(27)    0.010
+../../../Noyau/N_MCCOMPO.py:93(cree_dict_valeurs)                             ../../../Noyau/N_BLOC.py:63(__call__)(2)    0.010
+                                                                              ../../../Noyau/N_BLOC.py:90(verif_presence)(2)    0.000
+                                                                              ../../../Noyau/N_MCBLOC.py:51(get_valeur)(1)    0.000
+                                                                              ../../../Noyau/N_MCCOMPO.py:93(cree_dict_valeurs)(2)    0.010
+                                                                              ../../../Noyau/N_MCCOMPO.py:165(recherche_mc_globaux)(11)    0.000
+                                                                              ../../../Noyau/N_MCCOMPO.py:195(supprime)(2)    0.010
+                                                                              ../../../Noyau/N_MCFACT.py:47(get_valeur)(4)    0.000
+                                                                              ../../../Noyau/N_MCLIST.py:29(get_valeur)(2)    0.000
+                                                                              ../../../Noyau/N_MCSIMP.py:55(get_valeur)(9)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_constants.py:23(error)          --
+../../../Noyau/N_PROC.py:4(?)                                                 ../../../Noyau/N_PROC.py:11(PROC)(1)    0.000
+                                                                              ../../../Noyau/N_PROC_ETAPE.py:4(?)(1)    0.000
+../../Build/B_ENTITE.py:3(?)                                                  ../../Build/B_ENTITE.py:9(ENTITE)(1)    0.000
+                                                                              ../../Build/utils.py:2(?)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/repr.py:5(Repr)                     --
+/home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:343(_code)           /home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:19(_compile)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:234(_compile_info)(1)    0.000
+../../Validation/V_MCBLOC.py:8(?)                                             ../../Validation/V_MCBLOC.py:15(MCBLOC)(1)    0.000
+../../Validation/V_AU_MOINS_UN.py:2(?)                                        ../../Validation/V_AU_MOINS_UN.py:2(AU_MOINS_UN)(1)    0.000
+../../../Noyau/N_MCSIMP.py:9(MCSIMP)                                          --
+/home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:73(__init__)           --
+../../../Noyau/N_MCBLOC.py:5(?)                                               ../../../Noyau/N_MCBLOC.py:11(MCBLOC)(1)    0.000
+../../Accas/A_PROC_ETAPE.py:1(?)                                              ../../Accas/A_PROC_ETAPE.py:6(PROC_ETAPE)(1)    0.000
+                                                                              ../../Build/B_PROC_ETAPE.py:2(?)(1)    0.000
+                                                                              ../../Execution/E_PROC_ETAPE.py:1(?)(1)    0.000
+                                                                              ../../Validation/V_PROC_ETAPE.py:8(?)(1)    0.000
+../../Accas/A_SIMP.py:4(SIMP)                                                 --
+../../../Noyau/N_MCCOMPO.py:4(?)                                              ../../../Noyau/N_MCCOMPO.py:10(MCCOMPO)(1)    0.000
+../../../Noyau/N_ENTITE.py:27(affecter_parente)                               --
+../../../Noyau/N_MCFACT.py:13(__init__)                                       ../../../Noyau/N_MCCOMPO.py:16(build_mc)(5)    0.030
+                                                                              ../../../Noyau/N_MCFACT.py:37(GETVAL)(5)    0.000
+../../../Validation/V_ETAPE.py:18(ETAPE)                                      --
+../../Accas/A_PRESENT_PRESENT.py:4(PRESENT_PRESENT)                           --
+../../../Noyau/N_BLOC.py:29(__init__)                                         ../../../Noyau/N_ENTITE.py:27(affecter_parente)(1)    0.000
+../../Noyau/N_Exception.py:3(?)                                               ../../Noyau/N_Exception.py:8(AsException)(1)    0.000
+../../Noyau/N_CR.py:44(add)                                                   --
+../../Noyau/N_GEOM.py:3(?)                                                    ../../Noyau/N_GEOM.py:6(GEOM)(1)    0.000
+                                                                              ../../Noyau/N_GEOM.py:45(geom)(1)    0.000
+../../Noyau/N_FORM_ETAPE.py:3(FORM_ETAPE)                                     --
+../../Build/B_PROC_ETAPE.py:8(PROC_ETAPE)                                     --
+../../Validation/V_PROC_ETAPE.py:17(PROC_ETAPE)                               --
+../../Accas/A_SIMP.py:1(?)                                                    ../../Accas/A_MCSIMP.py:1(?)(1)    0.010
+                                                                              ../../Accas/A_SIMP.py:4(SIMP)(1)    0.000
+../../../Noyau/N_ENTITE.py:3(?)                                               ../../../Noyau/N_ENTITE.py:7(ENTITE)(1)    0.000
+                                                                              ../../Noyau/N_CR.py:2(?)(1)    0.000
+../../Accas/A_PRESENT_ABSENT.py:1(?)                                          ../../Accas/A_PRESENT_ABSENT.py:4(PRESENT_ABSENT)(1)    0.000
+                                                                              ../../Validation/V_PRESENT_ABSENT.py:2(?)(1)    0.000
+../../Accas/A_FACT.py:6(FACT)                                                 --
+../../../Noyau/N_MCCOMPO.py:10(MCCOMPO)                                       --
+../../../Noyau/N_FACT.py:69(__call__)                                         ../../../Noyau/N_MCLIST.py:15(init)(1)    0.010
+                                                                              ../../Accas/A_MCFACT.py:5(__init__)(5)    0.030
+                                                                              ../../Accas/A_MCLIST.py:5(__init__)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/UserList.py:73(append)(2)    0.000
+../../../Noyau/N_PROC.py:11(PROC)                                             --
+../../../Validation/V_MCCOMPO.py:73(dict_mc_presents)                         /home01/chris/pkg/python2.1/lib/python2.1/UserList.py:17(__eq__)(1)    0.000
+../../../Noyau/N_FACT.py:3(?)                                                 ../../../Noyau/N_FACT.py:11(FACT)(1)    0.000
+                                                                              ../../../Noyau/N_MCFACT.py:5(?)(1)    0.010
+                                                                              ../../../Noyau/N_MCLIST.py:5(?)(1)    0.000
+../../../Noyau/N_MCLIST.py:9(MCList)                                          --
+../../../Noyau/N_MCCOMPO.py:195(supprime)                                     ../../../Noyau/N_MCCOMPO.py:195(supprime)(3)    0.010
+                                                                              ../../../Noyau/N_MCLIST.py:44(supprime)(1)    0.010
+                                                                              ../../../Noyau/N_OBJECT.py:27(supprime)(16)    0.010
+../../Build/B_ETAPE.py:18(ETAPE)                                              --
+../../../Noyau/N_MACRO.py:4(?)                                                ../../../Noyau/N_MACRO.py:12(MACRO)(1)    0.000
+                                                                              ../../../Noyau/N_MACRO_ETAPE.py:4(?)(1)    0.000
+../../../Noyau/N_MCLIST.py:44(supprime)                                       ../../../Noyau/N_MCCOMPO.py:195(supprime)(2)    0.010
+../../Validation/V_MCSIMP.py:107(verif_type)                                  ../../Validation/V_MCSIMP.py:314(compare_type)(16)    0.000
+../../../Validation/V_MACRO_ETAPE.py:19(MACRO_ETAPE)                          --
+../../../Noyau/N_JDC.py:15(JDC)                                               ../../Noyau/utils.py:3(?)(1)    0.000
+../../Validation/V_EXCLUS.py:2(EXCLUS)                                        --
+../../Accas/A_OPER.py:1(?)                                                    ../../../Noyau/N_OPER.py:4(?)(1)    0.020
+                                                                              ../../Accas/A_ETAPE.py:1(?)(1)    0.010
+                                                                              ../../Accas/A_OPER.py:5(OPER)(1)    0.000
+                                                                              ../../Build/B_ENTITE.py:3(?)(1)    0.000
+../../../Noyau/N_BLOC.py:63(__call__)                                         ../../Accas/A_MCBLOC.py:6(__init__)(3)    0.010
+/home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:181(__next)            --
+../../Build/B_CODE.py:4(?)                                                    ../../Build/B_CODE.py:7(CODE)(1)    0.000
+                                                                              ../../Build/codex.py:3(?)(1)    0.000
+../../../Noyau/N_MCLIST.py:5(?)                                               ../../../Noyau/N_MCLIST.py:9(MCList)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/UserList.py:1(?)(1)    0.000
+../../../Validation/V_MCLIST.py:17(MCList)                                    --
+/home01/chris/pkg/python2.1/lib/python2.1/string.py:20(?)                     --
+../../../Noyau/N_MCFACT.py:47(get_valeur)                                     --
+../../Accas/A_JDC_CATA.py:1(?)                                                ../../Accas/A_JDC.py:1(?)(1)    0.010
+                                                                              ../../Accas/A_JDC_CATA.py:4(JDC_CATA)(1)    0.000
+                                                                              ../../Noyau/N_JDC_CATA.py:4(?)(1)    0.010
+                                                                              ../../Noyau/__init__.py:10(?)(1)    0.020
+../../Validation/V_PROC_ETAPE.py:8(?)                                         ../../Validation/V_PROC_ETAPE.py:17(PROC_ETAPE)(1)    0.000
+../../Noyau/N_FONCTION.py:1(?)                                                ../../Noyau/N_FONCTION.py:3(FONCTION)(1)    0.000
+                                                                              ../../Noyau/N_FONCTION.py:5(fonction)(1)    0.000
+../../Validation/V_MCSIMP.py:38(__init__)                                     --
+../../Validation/V_PRESENT_ABSENT.py:2(?)                                     ../../Validation/V_PRESENT_ABSENT.py:2(PRESENT_ABSENT)(1)    0.000
+../../Noyau/N_SIMP.py:104(__call__)                                           ../../Accas/A_MCSIMP.py:5(__init__)(8)    0.000
+../../Validation/V_JDC.py:8(?)                                                ../../../Validation/V_MCCOMPO.py:4(?)(1)    0.000
+                                                                              ../../Validation/V_JDC.py:17(JDC)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:14(?)                  /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:71(Pattern)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:90(SubPattern)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:176(Tokenizer)(1)    0.000
+../../Validation/V_MCBLOC.py:24(isvalid)                                      ../../../Validation/V_MCCOMPO.py:49(verif_regles)(2)    0.000
+                                                                              ../../Validation/V_MCSIMP.py:41(isvalid)(2)    0.000
+../../Build/B_MACRO_ETAPE.py:48(MACRO_ETAPE)                                  --
+/home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:19(_compile)         --
+../../../Noyau/N_MACRO.py:12(MACRO)                                           --
+../../Accas/A_FORM.py:1(?)                                                    ../../Accas/A_FORM.py:5(FORM)(1)    0.000
+                                                                              ../../Accas/A_FORM_ETAPE.py:1(?)(1)    0.000
+                                                                              ../../Noyau/N_FORM.py:1(?)(1)    0.000
+../../Accas/A_ENSEMBLE.py:1(?)                                                ../../Accas/A_ENSEMBLE.py:4(ENSEMBLE)(1)    0.000
+                                                                              ../../Validation/V_ENSEMBLE.py:2(?)(1)    0.000
+../../Execution/E_ETAPE.py:2(?)                                               ../../Execution/E_ETAPE.py:11(ETAPE)(1)    0.000
+                                                                              ../../Execution/genpy.py:12(?)(1)    0.000
+../../../Noyau/N_BLOC.py:70(verif_cata)                                       ../../../Noyau/N_ENTITE.py:68(verif_cata_regles)(1)    0.000
+../../../Noyau/N_ENTITE.py:15(__init__)                                       --
+../../Accas/A_FORM_ETAPE.py:6(FORM_ETAPE)                                     --
+../../../Validation/V_MCLIST.py:51(report)                                    ../../../Validation/V_MCCOMPO.py:32(report)(2)    0.010
+                                                                              ../../../Validation/V_MCLIST.py:29(isvalid)(1)    0.000
+                                                                              ../../Noyau/N_CR.py:10(__init__)(1)    0.000
+                                                                              ../../Noyau/N_CR.py:44(add)(2)    0.000
+../../../Noyau/N_BLOC.py:90(verif_presence)                                   <string>:0(?)(3)    0.000
+../../Noyau/N_SIMP.py:10(SIMP)                                                --
+../../Validation/V_JDC.py:17(JDC)                                             --
+main.py:11(main)                                                              ../../../Noyau/N_BLOC.py:29(__init__)(1)    0.000
+                                                                              ../../../Noyau/N_ENTITE.py:49(report)(1)    0.000
+                                                                              ../../../Noyau/N_FACT.py:29(__init__)(4)    0.000
+                                                                              ../../../Noyau/N_FACT.py:69(__call__)(1)    0.030
+                                                                              ../../../Noyau/N_MCCOMPO.py:195(supprime)(1)    0.010
+                                                                              ../../../Validation/V_MCCOMPO.py:32(report)(1)    0.010
+                                                                              ../../Accas/__init__.py:11(?)(1)    0.100
+                                                                              ../../Noyau/N_CR.py:48(estvide)(2)    0.010
+                                                                              ../../Noyau/N_REGLE.py:23(__init__)(1)    0.000
+                                                                              ../../Noyau/N_SIMP.py:26(__init__)(9)    0.000
+../../../Noyau/N_MCSIMP.py:45(GETVAL)                                         --
+/home01/chris/pkg/python2.1/lib/python2.1/UserList.py:1(?)                    /home01/chris/pkg/python2.1/lib/python2.1/UserList.py:3(UserList)(1)    0.000
+../../Accas/A_MCSIMP.py:4(MCSIMP)                                             --
+../../Validation/V_MCSIMP.py:155(verif_into)                                  ../../Validation/V_MCSIMP.py:357(isinintervalle)(16)    0.000
+../../Build/B_CODE.py:7(CODE)                                                 --
+../../../Noyau/N_MCFACT.py:37(GETVAL)                                         --
+../../Validation/V_MCSIMP.py:82(verif_card)                                   --
+../../Noyau/N_CO.py:1(?)                                                      ../../Noyau/N_CO.py:3(CO)(1)    0.000
+../../Accas/A_ETAPE.py:6(ETAPE)                                               --
+../../Validation/V_A_CLASSER.py:4(A_CLASSER)                                  --
+../../Noyau/N_CR.py:6(CR)                                                     --
+../../Validation/V_EXCLUS.py:2(?)                                             ../../Validation/V_EXCLUS.py:2(EXCLUS)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_constants.py:141(makedict)      --
+../../Build/B_OBJECT.py:12(OBJECT)                                            --
+/home01/chris/pkg/python2.1/lib/python2.1/UserList.py:21(__cast)              --
+/home01/chris/pkg/python2.1/lib/python2.1/UserList.py:3(UserList)             --
+../../Accas/A_PROC.py:5(PROC)                                                 --
+../../Build/B_JDC.py:2(?)                                                     ../../Build/B_CODE.py:4(?)(1)    0.000
+                                                                              ../../Build/B_JDC.py:9(JDC)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/repr.py:1(?)                        /home01/chris/pkg/python2.1/lib/python2.1/repr.py:5(Repr)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/repr.py:6(__init__)(1)    0.000
+../../../Noyau/N_ENTITE.py:49(report)                                         ../../../Noyau/N_BLOC.py:70(verif_cata)(1)    0.000
+                                                                              ../../../Noyau/N_ENTITE.py:49(report)(13)    0.000
+                                                                              ../../../Noyau/N_FACT.py:109(verif_cata)(4)    0.000
+                                                                              ../../Noyau/N_CR.py:10(__init__)(14)    0.000
+                                                                              ../../Noyau/N_CR.py:44(add)(13)    0.000
+                                                                              ../../Noyau/N_SIMP.py:78(verif_cata)(9)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:307(_parse_sub)        /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:194(match)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:362(_parse)(1)    0.000
+../../Noyau/N__F.py:3(_F)                                                     --
+/home01/chris/pkg/python2.1/lib/python2.1/sre.py:125(_compile)                /home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:358(compile)(1)    0.000
+../../Validation/V_MCSIMP.py:77(isoblig)                                      --
+../../Accas/A_MCSIMP.py:5(__init__)                                           ../../../Noyau/N_MCSIMP.py:13(__init__)(8)    0.000
+                                                                              ../../Validation/V_MCSIMP.py:38(__init__)(8)    0.000
+../../Accas/A_MCBLOC.py:1(?)                                                  ../../Accas/A_MCBLOC.py:5(MCBLOC)(1)    0.000
+                                                                              ../../Build/B_OBJECT.py:2(?)(1)    0.000
+                                                                              ../../Validation/V_MCBLOC.py:8(?)(1)    0.000
+../../Validation/V_AU_MOINS_UN.py:11(verif)                                   ../../Noyau/N_REGLE.py:42(liste_to_dico)(1)    0.000
+../../Noyau/N_Exception.py:8(AsException)                                     --
+../../../Noyau/N_OBJECT.py:4(?)                                               ../../../Noyau/N_OBJECT.py:6(OBJECT)(1)    0.000
+../../Execution/E_JDC.py:2(?)                                                 ../../Execution/E_JDC.py:7(JDC)(1)    0.000
+../../../Noyau/N_PROC_ETAPE.py:15(PROC_ETAPE)                                 --
+../../../Validation/V_MCCOMPO.py:4(?)                                         ../../../Validation/V_MCCOMPO.py:13(MCCOMPO)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre.py:17(?)                        /home01/chris/pkg/python2.1/lib/python2.1/copy_reg.py:5(?)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/copy_reg.py:14(pickle)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/sre.py:125(_compile)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/sre.py:228(Scanner)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:11(?)(1)    0.010
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:14(?)(1)    0.000
+../../Execution/E_ETAPE.py:11(ETAPE)                                          --
+../../Noyau/N_FONCTION.py:3(FONCTION)                                         --
+../../Accas/A_MACRO_ETAPE.py:6(MACRO_ETAPE)                                   --
+../../Execution/genpy.py:12(?)                                                ../../Execution/genpy.py:19(genpy)(1)    0.000
+                                                                              ../../Execution/utils.py:2(?)(1)    0.000
+../../Noyau/N_EVAL.py:4(EVAL)                                                 --
+../../../Noyau/N_MCBLOC.py:11(MCBLOC)                                         --
+../../Validation/V_A_CLASSER.py:2(?)                                          ../../Validation/V_A_CLASSER.py:4(A_CLASSER)(1)    0.000
+../../Execution/genpy.py:19(genpy)                                            --
+../../Build/utils.py:2(?)                                                     --
+../../Accas/A_JDC_CATA.py:4(JDC_CATA)                                         --
+../../Validation/__init__.py:6(?)                                             --
+../../Build/B_EVAL.py:2(?)                                                    ../../Build/B_EVAL.py:7(EVAL)(1)    0.000
+../../Build/codex.py:3(?)                                                     --
+../../Noyau/N_REGLE.py:22(REGLE)                                              --
+../../../Noyau/nommage.py:14(?)                                               /home01/chris/pkg/python2.1/lib/python2.1/re.py:23(?)(1)    0.010
+../../Accas/A_BLOC.py:1(?)                                                    ../../Accas/A_BLOC.py:5(BLOC)(1)    0.000
+                                                                              ../../Accas/A_MCBLOC.py:1(?)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:194(match)             --
+/home01/chris/pkg/python2.1/lib/python2.1/traceback.py:1(?)                   /home01/chris/pkg/python2.1/lib/python2.1/linecache.py:6(?)(1)    0.000
+../../../Noyau/N_FACT.py:11(FACT)                                             --
+../../../Validation/V_UN_PARMI.py:2(UN_PARMI)                                 --
+../../Validation/V_AU_MOINS_UN.py:2(AU_MOINS_UN)                              --
+../../Noyau/N_SIMP.py:3(?)                                                    ../../../Noyau/N_ENTITE.py:3(?)(1)    0.000
+                                                                              ../../../Noyau/N_MCSIMP.py:5(?)(1)    0.000
+                                                                              ../../Noyau/N_SIMP.py:10(SIMP)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/types.py:4(?)(1)    0.010
+../../../Validation/V_MCCOMPO.py:49(verif_regles)                             ../../../Validation/V_MCCOMPO.py:73(dict_mc_presents)(11)    0.000
+                                                                              ../../Validation/V_AU_MOINS_UN.py:11(verif)(1)    0.000
+../../Accas/A_AU_MOINS_UN.py:1(?)                                             ../../Accas/A_AU_MOINS_UN.py:4(AU_MOINS_UN)(1)    0.000
+                                                                              ../../Noyau/N_REGLE.py:18(?)(1)    0.000
+                                                                              ../../Validation/V_AU_MOINS_UN.py:2(?)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:176(Tokenizer)         --
+../../../Validation/V_MCFACT.py:24(isvalid)                                   ../../../Validation/V_MCCOMPO.py:49(verif_regles)(9)    0.000
+                                                                              ../../../Validation/V_MCFACT.py:24(isvalid)(2)    0.000
+                                                                              ../../../Validation/V_MCLIST.py:29(isvalid)(1)    0.000
+                                                                              ../../Validation/V_MCBLOC.py:24(isvalid)(1)    0.000
+                                                                              ../../Validation/V_MCSIMP.py:41(isvalid)(13)    0.000
+../../../Noyau/N_MACRO_ETAPE.py:4(?)                                          ../../../Noyau/N_MACRO_ETAPE.py:17(MACRO_ETAPE)(1)    0.000
+../../Accas/A_MCFACT.py:4(MCFACT)                                             --
+../../Validation/V_MCSIMP.py:8(?)                                             ../../Validation/V_MCSIMP.py:17(MCSIMP)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/linecache.py:6(?)                   --
+../../Noyau/N_FORM_ETAPE.py:1(?)                                              ../../Noyau/N_FORM_ETAPE.py:3(FORM_ETAPE)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre.py:228(Scanner)                 --
+../../Accas/A_MACRO.py:1(?)                                                   ../../../Noyau/N_MACRO.py:4(?)(1)    0.000
+                                                                              ../../Accas/A_MACRO.py:5(MACRO)(1)    0.000
+                                                                              ../../Accas/A_MACRO_ETAPE.py:1(?)(1)    0.010
+../../Accas/A_MCLIST.py:4(MCList)                                             --
+/home01/chris/pkg/python2.1/lib/python2.1/copy_reg.py:5(?)                    /home01/chris/pkg/python2.1/lib/python2.1/copy_reg.py:14(pickle)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:607(parse)             /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:73(__init__)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:177(__init__)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:200(get)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:307(_parse_sub)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:358(compile)         /home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:343(_code)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:607(parse)(1)    0.000
+../../Accas/A_OPER.py:5(OPER)                                                 --
+../../../Noyau/N_BLOC.py:13(BLOC)                                             --
+../../Noyau/N_FONCTION.py:5(fonction)                                         --
+../../Accas/A_AU_MOINS_UN.py:4(AU_MOINS_UN)                                   --
+../../Execution/E_MACRO_ETAPE.py:1(?)                                         ../../Execution/E_MACRO_ETAPE.py:2(MACRO_ETAPE)(1)    0.000
+../../../Validation/V_MCCOMPO.py:13(MCCOMPO)                                  --
+../../../Validation/V_MACRO_ETAPE.py:8(?)                                     ../../../Validation/V_MACRO_ETAPE.py:19(MACRO_ETAPE)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:90(SubPattern)         --
+../../../Noyau/N_ENTITE.py:68(verif_cata_regles)                              --
+../../../Noyau/N_FACT.py:109(verif_cata)                                      ../../../Noyau/N_ENTITE.py:68(verif_cata_regles)(4)    0.000
+../../../Validation/V_MCLIST.py:29(isvalid)                                   ../../../Validation/V_MCFACT.py:24(isvalid)(4)    0.000
+../../Validation/V_PRESENT_PRESENT.py:2(PRESENT_PRESENT)                      --
+../../Build/B_PROC_ETAPE.py:2(?)                                              ../../Build/B_PROC_ETAPE.py:8(PROC_ETAPE)(1)    0.000
+../../Noyau/__init__.py:10(?)                                                 ../../../Noyau/N_FACT.py:3(?)(1)    0.010
+                                                                              ../../Noyau/N_SIMP.py:3(?)(1)    0.010
+                                                                              ../../Noyau/context.py:1(?)(1)    0.000
+../../Accas/A_PRESENT_PRESENT.py:1(?)                                         ../../Accas/A_PRESENT_PRESENT.py:4(PRESENT_PRESENT)(1)    0.000
+                                                                              ../../Validation/V_PRESENT_PRESENT.py:2(?)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/re.py:23(?)                         /home01/chris/pkg/python2.1/lib/python2.1/sre.py:17(?)(1)    0.010
+../../Accas/A_FACT.py:1(?)                                                    ../../Accas/A_FACT.py:6(FACT)(1)    0.000
+                                                                              ../../Accas/A_MCFACT.py:1(?)(1)    0.000
+                                                                              ../../Accas/A_MCLIST.py:1(?)(1)    0.000
+../../Accas/A_EXCLUS.py:1(?)                                                  ../../Accas/A_EXCLUS.py:4(EXCLUS)(1)    0.000
+                                                                              ../../Validation/V_EXCLUS.py:2(?)(1)    0.000
+../../Validation/V_MCBLOC.py:15(MCBLOC)                                       --
+/home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:92(__init__)           --
+../../Build/B_EVAL.py:7(EVAL)                                                 --
+../../../Noyau/N_MACRO_ETAPE.py:17(MACRO_ETAPE)                               --
+../../Execution/__init__.py:0(?)                                              --
+../../Validation/V_MCSIMP.py:385(report)                                      ../../Noyau/N_CR.py:10(__init__)(8)    0.000
+                                                                              ../../Validation/V_MCSIMP.py:41(isvalid)(8)    0.000
+../../Accas/A_EXCLUS.py:4(EXCLUS)                                             --
+../../Build/B_MACRO_ETAPE.py:2(?)                                             ../../Build/B_MACRO_ETAPE.py:48(MACRO_ETAPE)(1)    0.000
+                                                                              ../../Noyau/N__F.py:1(?)(1)    0.000
+../../Validation/V_MCSIMP.py:41(isvalid)                                      ../../Validation/V_MCSIMP.py:77(isoblig)(16)    0.000
+                                                                              ../../Validation/V_MCSIMP.py:82(verif_card)(16)    0.000
+                                                                              ../../Validation/V_MCSIMP.py:107(verif_type)(16)    0.000
+                                                                              ../../Validation/V_MCSIMP.py:155(verif_into)(16)    0.000
+../../../Validation/V_MCFACT.py:15(MCFACT)                                    --
+/home01/chris/pkg/python2.1/lib/python2.1/UserList.py:4(__init__)             --
+../../Accas/A_MCFACT.py:5(__init__)                                           ../../../Noyau/N_MCFACT.py:13(__init__)(5)    0.030
+                                                                              ../../../Validation/V_MCCOMPO.py:21(__init__)(5)    0.000
+../../Noyau/N_GEOM.py:6(GEOM)                                                 --
+../../../Noyau/N_OPER.py:4(?)                                                 ../../../Noyau/N_ETAPE.py:4(?)(1)    0.000
+                                                                              ../../../Noyau/N_OPER.py:12(OPER)(1)    0.010
+                                                                              ../../../Noyau/nommage.py:14(?)(1)    0.010
+../../../Noyau/N_FACT.py:29(__init__)                                         ../../../Noyau/N_ENTITE.py:27(affecter_parente)(4)    0.000
+../../Noyau/N_JDC_CATA.py:11(JDC_CATA)                                        --
+../../../Noyau/N_OBJECT.py:17(get_etape)                                      ../../../Noyau/N_OBJECT.py:17(get_etape)(5)    0.000
+../../Accas/A_MCLIST.py:5(__init__)                                           /home01/chris/pkg/python2.1/lib/python2.1/UserList.py:4(__init__)(1)    0.000
+../../Noyau/context.py:1(?)                                                   --
+../../../Noyau/N_JDC.py:3(?)                                                  ../../../Noyau/N_JDC.py:15(JDC)(1)    0.000
+                                                                              ../../Noyau/N_ASSD.py:3(?)(1)    0.000
+                                                                              ../../Noyau/N_Exception.py:3(?)(1)    0.000
+../../Validation/V_ENSEMBLE.py:2(?)                                           ../../Validation/V_ENSEMBLE.py:2(ENSEMBLE)(1)    0.000
+../../Noyau/N_ASSD.py:3(?)                                                    ../../Noyau/N_ASSD.py:6(ASSD)(1)    0.000
+                                                                              ../../Noyau/N_ASSD.py:74(assd)(1)    0.000
+../../Execution/E_MACRO_ETAPE.py:2(MACRO_ETAPE)                               --
+../../Noyau/N__F.py:1(?)                                                      ../../Noyau/N__F.py:3(_F)(1)    0.000
+../../Accas/__init__.py:11(?)                                                 ../../Accas/A_AU_MOINS_UN.py:1(?)(1)    0.000
+                                                                              ../../Accas/A_A_CLASSER.py:1(?)(1)    0.010
+                                                                              ../../Accas/A_BLOC.py:1(?)(1)    0.000
+                                                                              ../../Accas/A_ENSEMBLE.py:1(?)(1)    0.000
+                                                                              ../../Accas/A_EVAL.py:1(?)(1)    0.000
+                                                                              ../../Accas/A_EXCLUS.py:1(?)(1)    0.000
+                                                                              ../../Accas/A_FACT.py:1(?)(1)    0.000
+                                                                              ../../Accas/A_FORM.py:1(?)(1)    0.000
+                                                                              ../../Accas/A_JDC_CATA.py:1(?)(1)    0.040
+                                                                              ../../Accas/A_MACRO.py:1(?)(1)    0.010
+                                                                              ../../Accas/A_OPER.py:1(?)(1)    0.030
+                                                                              ../../Accas/A_PRESENT_ABSENT.py:1(?)(1)    0.000
+                                                                              ../../Accas/A_PRESENT_PRESENT.py:1(?)(1)    0.000
+                                                                              ../../Accas/A_PROC.py:1(?)(1)    0.000
+                                                                              ../../Accas/A_SIMP.py:1(?)(1)    0.010
+                                                                              ../../Accas/A_UN_PARMI.py:1(?)(1)    0.000
+                                                                              ../../Noyau/N_CO.py:1(?)(1)    0.000
+                                                                              ../../Noyau/N_FONCTION.py:1(?)(1)    0.000
+                                                                              ../../Noyau/N_GEOM.py:3(?)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_constants.py:14(?)              /home01/chris/pkg/python2.1/lib/python2.1/sre_constants.py:23(error)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/sre_constants.py:141(makedict)(3)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:177(__init__)          /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:181(__next)(1)    0.000
+../../Execution/utils.py:2(?)                                                 --
+../../Accas/A_UN_PARMI.py:1(?)                                                ../../../Validation/V_UN_PARMI.py:2(?)(1)    0.000
+                                                                              ../../Accas/A_UN_PARMI.py:4(UN_PARMI)(1)    0.000
+../../Accas/A_JDC.py:6(JDC)                                                   --
+../../Noyau/N_GEOM.py:45(geom)                                                --
+../../Accas/A_A_CLASSER.py:4(A_CLASSER)                                       --
+../../Noyau/N_SIMP.py:78(verif_cata)                                          --
+/home01/chris/pkg/python2.1/lib/python2.1/UserList.py:73(append)              --
+../../Accas/A_FORM.py:5(FORM)                                                 --
+../../Execution/E_PROC_ETAPE.py:1(?)                                          ../../Execution/E_PROC_ETAPE.py:2(PROC_ETAPE)(1)    0.000
+../../Accas/A_MACRO.py:5(MACRO)                                               --
+../../Validation/V_MCSIMP.py:257(is_entier)                                   --
+../../../Noyau/N_OBJECT.py:6(OBJECT)                                          --
+../../../Noyau/N_BLOC.py:4(?)                                                 ../../../Noyau/N_BLOC.py:13(BLOC)(1)    0.000
+../../Noyau/N_EVAL.py:2(?)                                                    ../../Noyau/N_EVAL.py:4(EVAL)(1)    0.000
+../../Noyau/N_FORM.py:4(FORM)                                                 --
+../../Validation/V_MCSIMP.py:357(isinintervalle)                              --
+../../../Noyau/N_ENTITE.py:7(ENTITE)                                          --
+../../Accas/A_EVAL.py:1(?)                                                    ../../Accas/A_EVAL.py:4(EVAL)(1)    0.000
+                                                                              ../../Build/B_EVAL.py:2(?)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/types.py:35(_C)                     --
+../../Accas/A_PROC.py:1(?)                                                    ../../../Noyau/N_PROC.py:4(?)(1)    0.000
+                                                                              ../../Accas/A_PROC.py:5(PROC)(1)    0.000
+                                                                              ../../Accas/A_PROC_ETAPE.py:1(?)(1)    0.000
+../../Validation/V_PRESENT_PRESENT.py:2(?)                                    ../../Validation/V_PRESENT_PRESENT.py:2(PRESENT_PRESENT)(1)    0.000
+../../Validation/V_MCSIMP.py:314(compare_type)                                ../../Validation/V_MCSIMP.py:257(is_entier)(16)    0.000
+../../Noyau/utils.py:3(?)                                                     --
+../../Validation/V_MCSIMP.py:17(MCSIMP)                                       --
+<string>:0(?)                                                                 --
+../../../Noyau/N_MCSIMP.py:13(__init__)                                       ../../../Noyau/N_MCSIMP.py:45(GETVAL)(8)    0.000
+../../../Validation/V_ETAPE.py:8(?)                                           ../../../Validation/V_ETAPE.py:18(ETAPE)(1)    0.000
+../../Accas/A_ENSEMBLE.py:4(ENSEMBLE)                                         --
+../../Build/B_JDC.py:9(JDC)                                                   --
+../../../Noyau/N_PROC_ETAPE.py:4(?)                                           ../../../Noyau/N_PROC_ETAPE.py:15(PROC_ETAPE)(1)    0.000
+../../../Validation/V_MCCOMPO.py:21(__init__)                                 --
+../../Accas/A_BLOC.py:5(BLOC)                                                 --
+../../Accas/A_MCLIST.py:1(?)                                                  ../../../Validation/V_MCLIST.py:8(?)(1)    0.000
+                                                                              ../../Accas/A_MCLIST.py:4(MCList)(1)    0.000
+../../Noyau/N_ASSD.py:6(ASSD)                                                 --
+../../Noyau/N_REGLE.py:42(liste_to_dico)                                      --
+../../../Noyau/N_MCCOMPO.py:165(recherche_mc_globaux)                         ../../../Noyau/N_OBJECT.py:17(get_etape)(11)    0.000
+../../Noyau/N_CR.py:10(__init__)                                              --
+/home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:200(get)               /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:181(__next)(2)    0.000
+../../../Noyau/N_ETAPE.py:4(?)                                                ../../../Noyau/N_ETAPE.py:17(ETAPE)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:141(getwidth)          --
+/home01/chris/pkg/python2.1/lib/python2.1/copy_reg.py:25(constructor)         --
+../../../Noyau/N_MCLIST.py:29(get_valeur)                                     --
+../../Accas/A_EVAL.py:4(EVAL)                                                 --
+../../../Noyau/N_MCBLOC.py:51(get_valeur)                                     ../../../Noyau/N_MCSIMP.py:55(get_valeur)(1)    0.000
+../../../Noyau/N_MCCOMPO.py:16(build_mc)                                      ../../../Noyau/N_BLOC.py:63(__call__)(1)    0.010
+                                                                              ../../../Noyau/N_BLOC.py:90(verif_presence)(1)    0.000
+                                                                              ../../../Noyau/N_FACT.py:69(__call__)(3)    0.030
+                                                                              ../../../Noyau/N_MCCOMPO.py:81(ordonne_liste)(8)    0.000
+                                                                              ../../../Noyau/N_MCCOMPO.py:93(cree_dict_valeurs)(9)    0.010
+                                                                              ../../Noyau/N_SIMP.py:104(__call__)(8)    0.000
+../../../Noyau/N_ETAPE.py:17(ETAPE)                                           --
+../../Accas/A_UN_PARMI.py:4(UN_PARMI)                                         --
+../../Noyau/N_FORM.py:1(?)                                                    ../../Noyau/N_FORM.py:4(FORM)(1)    0.000
+                                                                              ../../Noyau/N_FORM_ETAPE.py:1(?)(1)    0.000
+../../Noyau/N_SIMP.py:26(__init__)                                            ../../../Noyau/N_ENTITE.py:15(__init__)(9)    0.000
+../../../Validation/V_MCLIST.py:8(?)                                          ../../../Validation/V_MCLIST.py:17(MCList)(1)    0.000
+../../Accas/A_FORM_ETAPE.py:1(?)                                              ../../Accas/A_FORM_ETAPE.py:6(FORM_ETAPE)(1)    0.000
+../../Noyau/N_REGLE.py:18(?)                                                  ../../Noyau/N_REGLE.py:22(REGLE)(1)    0.000
+../../Accas/A_ETAPE.py:1(?)                                                   ../../../Validation/V_ETAPE.py:8(?)(1)    0.000
+                                                                              ../../Accas/A_ETAPE.py:6(ETAPE)(1)    0.000
+                                                                              ../../Build/B_ETAPE.py:2(?)(1)    0.010
+                                                                              ../../Execution/E_ETAPE.py:2(?)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/repr.py:6(__init__)                 --
+<string>:1(?)                                                                 main.py:11(main)(1)    0.160
+../../Build/B_OBJECT.py:2(?)                                                  ../../Build/B_OBJECT.py:12(OBJECT)(1)    0.000
+../../../Noyau/N_MCSIMP.py:5(?)                                               ../../../Noyau/N_MCSIMP.py:9(MCSIMP)(1)    0.000
+                                                                              ../../../Noyau/N_OBJECT.py:4(?)(1)    0.000
+../../../Validation/V_MCFACT.py:8(?)                                          ../../../Validation/V_MCFACT.py:15(MCFACT)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:71(Pattern)            --
+../../Accas/A_MCFACT.py:1(?)                                                  ../../../Validation/V_MCFACT.py:8(?)(1)    0.000
+                                                                              ../../Accas/A_MCFACT.py:4(MCFACT)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:234(_compile_info)   /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:141(getwidth)(1)    0.000
+/home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:362(_parse)            /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:92(__init__)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:200(get)(1)    0.000
+../../Noyau/N_REGLE.py:23(__init__)                                           --
+../../../Validation/V_UN_PARMI.py:2(?)                                        ../../../Validation/V_UN_PARMI.py:2(UN_PARMI)(1)    0.000
+../../Accas/A_MCBLOC.py:5(MCBLOC)                                             --
+../../Noyau/N_CR.py:2(?)                                                      ../../Noyau/N_CR.py:6(CR)(1)    0.000
+                                                                              /home01/chris/pkg/python2.1/lib/python2.1/string.py:20(?)(1)    0.000
+../../Accas/A_MCBLOC.py:6(__init__)                                           ../../../Noyau/N_MCBLOC.py:18(__init__)(3)    0.010
+                                                                              ../../../Validation/V_MCCOMPO.py:21(__init__)(3)    0.000
+../../Accas/A_PROC_ETAPE.py:6(PROC_ETAPE)                                     --
+../../Execution/E_JDC.py:7(JDC)                                               --
+../../Execution/E_PROC_ETAPE.py:2(PROC_ETAPE)                                 --
+../../Noyau/N_ASSD.py:74(assd)                                                --
+../../Validation/V_PRESENT_ABSENT.py:2(PRESENT_ABSENT)                        --
+../../Accas/A_PRESENT_ABSENT.py:4(PRESENT_ABSENT)                             --
+../../../Noyau/N_MCCOMPO.py:81(ordonne_liste)                                 --
+../../Validation/V_ENSEMBLE.py:2(ENSEMBLE)                                    --
+/home01/chris/pkg/python2.1/lib/python2.1/copy_reg.py:14(pickle)              /home01/chris/pkg/python2.1/lib/python2.1/copy_reg.py:25(constructor)(2)    0.000
+profile:0(profiler)                                                           profile:0(main())(1)    0.170
+/home01/chris/pkg/python2.1/lib/python2.1/UserList.py:17(__eq__)              /home01/chris/pkg/python2.1/lib/python2.1/UserList.py:21(__cast)(1)    0.000
+../../../Noyau/N_MCSIMP.py:55(get_valeur)                                     --
+../../../Noyau/N_MCFACT.py:9(MCFACT)                                          --
+../../Build/__init__.py:0(?)                                                  --
+../../Build/B_ENTITE.py:9(ENTITE)                                             --
+../../Noyau/N_CO.py:3(CO)                                                     --
+
+
+************************************************************
+*  Liste des appellants de is_reel triée par temps interne *
+************************************************************
+*********************************************
+*  Trié par temps cumulé (20 plus grands)   *
+*********************************************
+         750 function calls (669 primitive calls) in 0.170 CPU seconds
+
+   Ordered by: cumulative time
+   List reduced from 288 to 20 due to restriction <20>
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+        1    0.010    0.010    0.170    0.170 profile:0(main())
+        1    0.000    0.000    0.160    0.160 <string>:1(?)
+        1    0.000    0.000    0.160    0.160 main.py:11(main)
+        1    0.000    0.000    0.100    0.100 ../../Accas/__init__.py:11(?)
+        1    0.000    0.000    0.040    0.040 ../../Accas/A_JDC_CATA.py:1(?)
+      5/1    0.000    0.000    0.030    0.030 ../../../Noyau/N_MCFACT.py:13(__init__)
+      8/1    0.000    0.000    0.030    0.030 ../../../Noyau/N_MCCOMPO.py:16(build_mc)
+      5/1    0.000    0.000    0.030    0.030 ../../Accas/A_MCFACT.py:5(__init__)
+      4/1    0.000    0.000    0.030    0.030 ../../../Noyau/N_FACT.py:69(__call__)
+        1    0.000    0.000    0.030    0.030 ../../Accas/A_OPER.py:1(?)
+        1    0.000    0.000    0.020    0.020 ../../../Noyau/N_OPER.py:4(?)
+        1    0.000    0.000    0.020    0.020 ../../Noyau/__init__.py:10(?)
+        3    0.000    0.000    0.010    0.003 ../../Accas/A_MCBLOC.py:6(__init__)
+        1    0.010    0.010    0.010    0.010 ../../../Noyau/N_MCLIST.py:15(init)
+       16    0.010    0.001    0.010    0.001 ../../../Noyau/N_OBJECT.py:27(supprime)
+      6/1    0.010    0.002    0.010    0.010 ../../../Validation/V_MCCOMPO.py:32(report)
+        1    0.010    0.010    0.010    0.010 ../../Accas/A_MACRO_ETAPE.py:1(?)
+        1    0.010    0.010    0.010    0.010 /home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:11(?)
+        1    0.000    0.000    0.010    0.010 ../../../Noyau/N_MCLIST.py:44(supprime)
+        1    0.000    0.000    0.010    0.010 /home01/chris/pkg/python2.1/lib/python2.1/re.py:23(?)
+
+
+*********************************************
+*  Trié par noms de fonction                *
+*********************************************
+         750 function calls (669 primitive calls) in 0.170 CPU seconds
+
+   Ordered by: function name
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_PROC.py:4(?)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_ENTITE.py:3(?)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_MCBLOC.py:8(?)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_AU_MOINS_UN.py:2(?)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCBLOC.py:5(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_PROC_ETAPE.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCCOMPO.py:4(?)
+        1    0.010    0.010    0.010    0.010 ../../Noyau/N_JDC_CATA.py:4(?)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_Exception.py:3(?)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_GEOM.py:3(?)
+        1    0.000    0.000    0.010    0.010 ../../Accas/A_SIMP.py:1(?)
+        1    0.010    0.010    0.010    0.010 /home01/chris/pkg/python2.1/lib/python2.1/types.py:4(?)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_ENTITE.py:3(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_PRESENT_ABSENT.py:1(?)
+        1    0.000    0.000    0.010    0.010 ../../Accas/A_ETAPE.py:1(?)
+        1    0.000    0.000    0.160    0.160 <string>:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_PRESENT_PRESENT.py:1(?)
+        1    0.010    0.010    0.010    0.010 ../../Accas/A_A_CLASSER.py:1(?)
+        1    0.000    0.000    0.010    0.010 ../../Noyau/N_SIMP.py:3(?)
+        1    0.000    0.000    0.020    0.020 ../../Noyau/__init__.py:10(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_AU_MOINS_UN.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_PROC_ETAPE.py:2(?)
+        1    0.000    0.000    0.000    0.000 ../../../Validation/V_MACRO_ETAPE.py:8(?)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_MACRO_ETAPE.py:4(?)
+        1    0.000    0.000    0.000    0.000 ../../Execution/E_MACRO_ETAPE.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_MCSIMP.py:8(?)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/linecache.py:6(?)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_FORM_ETAPE.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_OBJECT.py:2(?)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCSIMP.py:5(?)
+        1    0.000    0.000    0.000    0.000 ../../../Validation/V_MCFACT.py:8(?)
+        1    0.010    0.010    0.010    0.010 ../../Accas/A_MCSIMP.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_MCFACT.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../../Validation/V_UN_PARMI.py:2(?)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_CR.py:2(?)
+        1    0.000    0.000    0.000    0.000 ../../Build/__init__.py:0(?)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N__F.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_ASSD.py:3(?)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_MACRO_ETAPE.py:2(?)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_A_CLASSER.py:2(?)
+        1    0.000    0.000    0.000    0.000 ../../Execution/E_JDC.py:2(?)
+        1    0.000    0.000    0.010    0.010 /home01/chris/pkg/python2.1/lib/python2.1/sre.py:17(?)
+        1    0.000    0.000    0.000    0.000 ../../Execution/genpy.py:12(?)
+        1    0.000    0.000    0.040    0.040 ../../Accas/A_JDC_CATA.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_FORM.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_OBJECT.py:4(?)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_ETAPE.py:4(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_MCLIST.py:1(?)
+        1    0.000    0.000    0.010    0.010 ../../../Noyau/N_FACT.py:3(?)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_PROC_ETAPE.py:4(?)
+        1    0.000    0.000    0.000    0.000 ../../../Validation/V_MCLIST.py:8(?)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_MACRO.py:4(?)
+        1    0.010    0.010    0.010    0.010 ../../Build/B_ETAPE.py:2(?)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/traceback.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_EVAL.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_FORM_ETAPE.py:1(?)
+        1    0.000    0.000    0.030    0.030 ../../Accas/A_OPER.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../../Validation/V_MCCOMPO.py:4(?)
+        1    0.000    0.000    0.000    0.000 ../../../Validation/V_ETAPE.py:8(?)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_CODE.py:4(?)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCLIST.py:5(?)
+        3    0.000    0.000    0.000    0.000 <string>:0(?)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/string.py:20(?)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/utils.py:3(?)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_PRESENT_PRESENT.py:2(?)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_PROC_ETAPE.py:8(?)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_FONCTION.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_PROC.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_PRESENT_ABSENT.py:2(?)
+        1    0.010    0.010    0.010    0.010 ../../Accas/A_JDC.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_JDC.py:8(?)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:14(?)
+        1    0.000    0.000    0.000    0.000 ../../Execution/__init__.py:0(?)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_REGLE.py:18(?)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/copy_reg.py:5(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_FORM.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_ENSEMBLE.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Execution/E_ETAPE.py:2(?)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_EVAL.py:2(?)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_BLOC.py:4(?)
+        1    0.000    0.000    0.010    0.010 ../../Accas/A_MACRO.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Execution/E_PROC_ETAPE.py:1(?)
+        1    0.000    0.000    0.010    0.010 /home01/chris/pkg/python2.1/lib/python2.1/re.py:23(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_FACT.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_BLOC.py:1(?)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/UserList.py:1(?)
+        1    0.000    0.000    0.010    0.010 ../../../Noyau/nommage.py:14(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_UN_PARMI.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_EXCLUS.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Execution/utils.py:2(?)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_CO.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Build/codex.py:3(?)
+        1    0.010    0.010    0.010    0.010 ../../../Noyau/N_MCFACT.py:5(?)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_EXCLUS.py:2(?)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_constants.py:14(?)
+        1    0.000    0.000    0.100    0.100 ../../Accas/__init__.py:11(?)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_EVAL.py:2(?)
+        1    0.010    0.010    0.010    0.010 ../../Accas/A_MACRO_ETAPE.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_ENSEMBLE.py:2(?)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_JDC.py:2(?)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/repr.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_JDC.py:3(?)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/context.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Validation/__init__.py:6(?)
+        1    0.000    0.000    0.020    0.020 ../../../Noyau/N_OPER.py:4(?)
+        1    0.000    0.000    0.000    0.000 ../../Build/utils.py:2(?)
+        1    0.010    0.010    0.010    0.010 /home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:11(?)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_MCBLOC.py:1(?)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_ASSD.py:6(ASSD)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_AU_MOINS_UN.py:2(AU_MOINS_UN)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_AU_MOINS_UN.py:4(AU_MOINS_UN)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_A_CLASSER.py:4(A_CLASSER)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_A_CLASSER.py:4(A_CLASSER)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_Exception.py:8(AsException)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_BLOC.py:5(BLOC)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_BLOC.py:13(BLOC)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_CO.py:3(CO)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_CODE.py:7(CODE)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_CR.py:6(CR)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_ENSEMBLE.py:2(ENSEMBLE)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_ENSEMBLE.py:4(ENSEMBLE)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_ENTITE.py:9(ENTITE)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_ENTITE.py:7(ENTITE)
+        1    0.000    0.000    0.000    0.000 ../../../Validation/V_ETAPE.py:18(ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_ETAPE.py:6(ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_ETAPE.py:17(ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_ETAPE.py:18(ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../Execution/E_ETAPE.py:11(ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_EVAL.py:4(EVAL)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_EVAL.py:7(EVAL)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_EVAL.py:4(EVAL)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_EXCLUS.py:4(EXCLUS)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_EXCLUS.py:2(EXCLUS)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_FACT.py:6(FACT)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_FACT.py:11(FACT)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_FONCTION.py:3(FONCTION)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_FORM.py:5(FORM)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_FORM.py:4(FORM)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_FORM_ETAPE.py:3(FORM_ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_FORM_ETAPE.py:6(FORM_ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_GEOM.py:6(GEOM)
+        5    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCFACT.py:37(GETVAL)
+        8    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCSIMP.py:45(GETVAL)
+        1    0.000    0.000    0.000    0.000 ../../Execution/E_JDC.py:7(JDC)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_JDC.py:6(JDC)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_JDC.py:17(JDC)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_JDC.py:15(JDC)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_JDC.py:9(JDC)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_JDC_CATA.py:4(JDC_CATA)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_JDC_CATA.py:11(JDC_CATA)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_MACRO.py:5(MACRO)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_MACRO.py:12(MACRO)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_MACRO_ETAPE.py:17(MACRO_ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../Execution/E_MACRO_ETAPE.py:2(MACRO_ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_MACRO_ETAPE.py:48(MACRO_ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../../Validation/V_MACRO_ETAPE.py:19(MACRO_ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_MACRO_ETAPE.py:6(MACRO_ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_MCBLOC.py:5(MCBLOC)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_MCBLOC.py:15(MCBLOC)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCBLOC.py:11(MCBLOC)
+        1    0.000    0.000    0.000    0.000 ../../../Validation/V_MCCOMPO.py:13(MCCOMPO)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCCOMPO.py:10(MCCOMPO)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCFACT.py:9(MCFACT)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_MCFACT.py:4(MCFACT)
+        1    0.000    0.000    0.000    0.000 ../../../Validation/V_MCFACT.py:15(MCFACT)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_MCLIST.py:4(MCList)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCLIST.py:9(MCList)
+        1    0.000    0.000    0.000    0.000 ../../../Validation/V_MCLIST.py:17(MCList)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCSIMP.py:9(MCSIMP)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_MCSIMP.py:4(MCSIMP)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_MCSIMP.py:17(MCSIMP)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_OBJECT.py:12(OBJECT)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_OBJECT.py:6(OBJECT)
+        1    0.010    0.010    0.010    0.010 ../../../Noyau/N_OPER.py:12(OPER)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_OPER.py:5(OPER)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_PRESENT_ABSENT.py:2(PRESENT_ABSENT)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_PRESENT_ABSENT.py:4(PRESENT_ABSENT)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_PRESENT_PRESENT.py:4(PRESENT_PRESENT)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_PRESENT_PRESENT.py:2(PRESENT_PRESENT)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_PROC.py:11(PROC)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_PROC.py:5(PROC)
+        1    0.000    0.000    0.000    0.000 ../../Build/B_PROC_ETAPE.py:8(PROC_ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_PROC_ETAPE.py:17(PROC_ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_PROC_ETAPE.py:6(PROC_ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../Execution/E_PROC_ETAPE.py:2(PROC_ETAPE)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_PROC_ETAPE.py:15(PROC_ETAPE)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:71(Pattern)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_REGLE.py:22(REGLE)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/repr.py:5(Repr)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_SIMP.py:4(SIMP)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_SIMP.py:10(SIMP)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre.py:228(Scanner)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:90(SubPattern)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:176(Tokenizer)
+        1    0.000    0.000    0.000    0.000 ../../../Validation/V_UN_PARMI.py:2(UN_PARMI)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_UN_PARMI.py:4(UN_PARMI)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/UserList.py:3(UserList)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/types.py:35(_C)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N__F.py:3(_F)
+      4/1    0.000    0.000    0.030    0.030 ../../../Noyau/N_FACT.py:69(__call__)
+        3    0.000    0.000    0.010    0.003 ../../../Noyau/N_BLOC.py:63(__call__)
+        8    0.000    0.000    0.000    0.000 ../../Noyau/N_SIMP.py:104(__call__)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/UserList.py:21(__cast)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/UserList.py:17(__eq__)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:73(__init__)
+      5/1    0.000    0.000    0.030    0.030 ../../../Noyau/N_MCFACT.py:13(__init__)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_BLOC.py:29(__init__)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/repr.py:6(__init__)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_REGLE.py:23(__init__)
+        3    0.000    0.000    0.010    0.003 ../../Accas/A_MCBLOC.py:6(__init__)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_MCLIST.py:5(__init__)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:92(__init__)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:177(__init__)
+        9    0.000    0.000    0.000    0.000 ../../../Noyau/N_ENTITE.py:15(__init__)
+        3    0.010    0.003    0.010    0.003 ../../../Noyau/N_MCBLOC.py:18(__init__)
+        8    0.000    0.000    0.000    0.000 ../../Accas/A_MCSIMP.py:5(__init__)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/UserList.py:4(__init__)
+        9    0.000    0.000    0.000    0.000 ../../Noyau/N_SIMP.py:26(__init__)
+      5/1    0.000    0.000    0.030    0.030 ../../Accas/A_MCFACT.py:5(__init__)
+        8    0.000    0.000    0.000    0.000 ../../Validation/V_MCSIMP.py:38(__init__)
+       29    0.000    0.000    0.000    0.000 ../../Noyau/N_CR.py:10(__init__)
+        4    0.000    0.000    0.000    0.000 ../../../Noyau/N_FACT.py:29(__init__)
+        8    0.000    0.000    0.000    0.000 ../../../Validation/V_MCCOMPO.py:21(__init__)
+        8    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCSIMP.py:13(__init__)
+        3    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:181(__next)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:343(_code)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:19(_compile)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre.py:125(_compile)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:234(_compile_info)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:362(_parse)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:307(_parse_sub)
+       27    0.000    0.000    0.000    0.000 ../../Noyau/N_CR.py:44(add)
+        5    0.000    0.000    0.000    0.000 ../../../Noyau/N_ENTITE.py:27(affecter_parente)
+        2    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/UserList.py:73(append)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_ASSD.py:74(assd)
+      8/1    0.000    0.000    0.030    0.030 ../../../Noyau/N_MCCOMPO.py:16(build_mc)
+       16    0.000    0.000    0.000    0.000 ../../Validation/V_MCSIMP.py:314(compare_type)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_compile.py:358(compile)
+        2    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/copy_reg.py:25(constructor)
+     11/7    0.010    0.001    0.010    0.001 ../../../Noyau/N_MCCOMPO.py:93(cree_dict_valeurs)
+       11    0.000    0.000    0.000    0.000 ../../../Validation/V_MCCOMPO.py:73(dict_mc_presents)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_constants.py:23(error)
+     29/2    0.010    0.000    0.010    0.005 ../../Noyau/N_CR.py:48(estvide)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_FONCTION.py:5(fonction)
+        1    0.000    0.000    0.000    0.000 ../../Execution/genpy.py:19(genpy)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_GEOM.py:45(geom)
+        2    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:200(get)
+    16/11    0.000    0.000    0.000    0.000 ../../../Noyau/N_OBJECT.py:17(get_etape)
+       10    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCSIMP.py:55(get_valeur)
+        4    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCFACT.py:47(get_valeur)
+        2    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCLIST.py:29(get_valeur)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCBLOC.py:51(get_valeur)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:141(getwidth)
+        1    0.010    0.010    0.010    0.010 ../../../Noyau/N_MCLIST.py:15(init)
+       16    0.000    0.000    0.000    0.000 ../../Validation/V_MCSIMP.py:257(is_entier)
+       16    0.000    0.000    0.000    0.000 ../../Validation/V_MCSIMP.py:357(isinintervalle)
+       16    0.000    0.000    0.000    0.000 ../../Validation/V_MCSIMP.py:77(isoblig)
+        2    0.000    0.000    0.000    0.000 ../../Validation/V_MCBLOC.py:24(isvalid)
+       23    0.000    0.000    0.000    0.000 ../../Validation/V_MCSIMP.py:41(isvalid)
+     11/7    0.000    0.000    0.000    0.000 ../../../Validation/V_MCFACT.py:24(isvalid)
+        2    0.000    0.000    0.000    0.000 ../../../Validation/V_MCLIST.py:29(isvalid)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_REGLE.py:42(liste_to_dico)
+        1    0.000    0.000    0.160    0.160 main.py:11(main)
+        1    0.010    0.010    0.170    0.170 profile:0(main())
+        3    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_constants.py:141(makedict)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:194(match)
+        8    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCCOMPO.py:81(ordonne_liste)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:607(parse)
+        2    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/copy_reg.py:14(pickle)
+        0    0.000             0.000          profile:0(profiler)
+       11    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCCOMPO.py:165(recherche_mc_globaux)
+        8    0.000    0.000    0.000    0.000 ../../Validation/V_MCSIMP.py:385(report)
+      6/1    0.010    0.002    0.010    0.010 ../../../Validation/V_MCCOMPO.py:32(report)
+        1    0.000    0.000    0.000    0.000 ../../../Validation/V_MCLIST.py:51(report)
+     14/1    0.000    0.000    0.000    0.000 ../../../Noyau/N_ENTITE.py:49(report)
+       16    0.010    0.001    0.010    0.001 ../../../Noyau/N_OBJECT.py:27(supprime)
+      8/3    0.000    0.000    0.010    0.003 ../../../Noyau/N_MCCOMPO.py:195(supprime)
+        1    0.000    0.000    0.010    0.010 ../../../Noyau/N_MCLIST.py:44(supprime)
+        1    0.000    0.000    0.000    0.000 ../../Validation/V_AU_MOINS_UN.py:11(verif)
+       16    0.000    0.000    0.000    0.000 ../../Validation/V_MCSIMP.py:82(verif_card)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_BLOC.py:70(verif_cata)
+        4    0.000    0.000    0.000    0.000 ../../../Noyau/N_FACT.py:109(verif_cata)
+        9    0.000    0.000    0.000    0.000 ../../Noyau/N_SIMP.py:78(verif_cata)
+        5    0.000    0.000    0.000    0.000 ../../../Noyau/N_ENTITE.py:68(verif_cata_regles)
+       16    0.000    0.000    0.000    0.000 ../../Validation/V_MCSIMP.py:155(verif_into)
+        3    0.000    0.000    0.000    0.000 ../../../Noyau/N_BLOC.py:90(verif_presence)
+       11    0.000    0.000    0.000    0.000 ../../../Validation/V_MCCOMPO.py:49(verif_regles)
+       16    0.000    0.000    0.000    0.000 ../../Validation/V_MCSIMP.py:107(verif_type)
+
+
+*********************************************
+*  Statistique standard                     *
+*********************************************
+         750 function calls (669 primitive calls) in 0.170 CPU seconds
+
+   Ordered by: standard name
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+        3    0.000    0.000    0.000    0.000 <string>:0(?)
+        1    0.000    0.000    0.160    0.160 <string>:1(?)
+        1    0.000    0.000    0.000    0.000 A_AU_MOINS_UN.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_AU_MOINS_UN.py:4(AU_MOINS_UN)
+        1    0.010    0.010    0.010    0.010 A_A_CLASSER.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_A_CLASSER.py:4(A_CLASSER)
+        1    0.000    0.000    0.000    0.000 A_BLOC.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_BLOC.py:5(BLOC)
+        1    0.000    0.000    0.000    0.000 A_ENSEMBLE.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_ENSEMBLE.py:4(ENSEMBLE)
+        1    0.000    0.000    0.010    0.010 A_ETAPE.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_ETAPE.py:6(ETAPE)
+        1    0.000    0.000    0.000    0.000 A_EVAL.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_EVAL.py:4(EVAL)
+        1    0.000    0.000    0.000    0.000 A_EXCLUS.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_EXCLUS.py:4(EXCLUS)
+        1    0.000    0.000    0.000    0.000 A_FACT.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_FACT.py:6(FACT)
+        1    0.000    0.000    0.000    0.000 A_FORM.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_FORM.py:5(FORM)
+        1    0.000    0.000    0.000    0.000 A_FORM_ETAPE.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_FORM_ETAPE.py:6(FORM_ETAPE)
+        1    0.010    0.010    0.010    0.010 A_JDC.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_JDC.py:6(JDC)
+        1    0.000    0.000    0.040    0.040 A_JDC_CATA.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_JDC_CATA.py:4(JDC_CATA)
+        1    0.000    0.000    0.010    0.010 A_MACRO.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_MACRO.py:5(MACRO)
+        1    0.010    0.010    0.010    0.010 A_MACRO_ETAPE.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_MACRO_ETAPE.py:6(MACRO_ETAPE)
+        1    0.000    0.000    0.000    0.000 A_MCBLOC.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_MCBLOC.py:5(MCBLOC)
+        3    0.000    0.000    0.010    0.003 A_MCBLOC.py:6(__init__)
+        1    0.000    0.000    0.000    0.000 A_MCFACT.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_MCFACT.py:4(MCFACT)
+      5/1    0.000    0.000    0.030    0.030 A_MCFACT.py:5(__init__)
+        1    0.000    0.000    0.000    0.000 A_MCLIST.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_MCLIST.py:4(MCList)
+        1    0.000    0.000    0.000    0.000 A_MCLIST.py:5(__init__)
+        1    0.010    0.010    0.010    0.010 A_MCSIMP.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_MCSIMP.py:4(MCSIMP)
+        8    0.000    0.000    0.000    0.000 A_MCSIMP.py:5(__init__)
+        1    0.000    0.000    0.030    0.030 A_OPER.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_OPER.py:5(OPER)
+        1    0.000    0.000    0.000    0.000 A_PRESENT_ABSENT.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_PRESENT_ABSENT.py:4(PRESENT_ABSENT)
+        1    0.000    0.000    0.000    0.000 A_PRESENT_PRESENT.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_PRESENT_PRESENT.py:4(PRESENT_PRESENT)
+        1    0.000    0.000    0.000    0.000 A_PROC.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_PROC.py:5(PROC)
+        1    0.000    0.000    0.000    0.000 A_PROC_ETAPE.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_PROC_ETAPE.py:6(PROC_ETAPE)
+        1    0.000    0.000    0.010    0.010 A_SIMP.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_SIMP.py:4(SIMP)
+        1    0.000    0.000    0.000    0.000 A_UN_PARMI.py:1(?)
+        1    0.000    0.000    0.000    0.000 A_UN_PARMI.py:4(UN_PARMI)
+        1    0.000    0.000    0.000    0.000 B_CODE.py:4(?)
+        1    0.000    0.000    0.000    0.000 B_CODE.py:7(CODE)
+        1    0.000    0.000    0.000    0.000 B_ENTITE.py:3(?)
+        1    0.000    0.000    0.000    0.000 B_ENTITE.py:9(ENTITE)
+        1    0.000    0.000    0.000    0.000 B_ETAPE.py:18(ETAPE)
+        1    0.010    0.010    0.010    0.010 B_ETAPE.py:2(?)
+        1    0.000    0.000    0.000    0.000 B_EVAL.py:2(?)
+        1    0.000    0.000    0.000    0.000 B_EVAL.py:7(EVAL)
+        1    0.000    0.000    0.000    0.000 B_JDC.py:2(?)
+        1    0.000    0.000    0.000    0.000 B_JDC.py:9(JDC)
+        1    0.000    0.000    0.000    0.000 B_MACRO_ETAPE.py:2(?)
+        1    0.000    0.000    0.000    0.000 B_MACRO_ETAPE.py:48(MACRO_ETAPE)
+        1    0.000    0.000    0.000    0.000 B_OBJECT.py:12(OBJECT)
+        1    0.000    0.000    0.000    0.000 B_OBJECT.py:2(?)
+        1    0.000    0.000    0.000    0.000 B_PROC_ETAPE.py:2(?)
+        1    0.000    0.000    0.000    0.000 B_PROC_ETAPE.py:8(PROC_ETAPE)
+        1    0.000    0.000    0.000    0.000 E_ETAPE.py:11(ETAPE)
+        1    0.000    0.000    0.000    0.000 E_ETAPE.py:2(?)
+        1    0.000    0.000    0.000    0.000 E_JDC.py:2(?)
+        1    0.000    0.000    0.000    0.000 E_JDC.py:7(JDC)
+        1    0.000    0.000    0.000    0.000 E_MACRO_ETAPE.py:1(?)
+        1    0.000    0.000    0.000    0.000 E_MACRO_ETAPE.py:2(MACRO_ETAPE)
+        1    0.000    0.000    0.000    0.000 E_PROC_ETAPE.py:1(?)
+        1    0.000    0.000    0.000    0.000 E_PROC_ETAPE.py:2(PROC_ETAPE)
+        1    0.000    0.000    0.000    0.000 N_ASSD.py:3(?)
+        1    0.000    0.000    0.000    0.000 N_ASSD.py:6(ASSD)
+        1    0.000    0.000    0.000    0.000 N_ASSD.py:74(assd)
+        1    0.000    0.000    0.000    0.000 N_BLOC.py:13(BLOC)
+        1    0.000    0.000    0.000    0.000 N_BLOC.py:29(__init__)
+        1    0.000    0.000    0.000    0.000 N_BLOC.py:4(?)
+        3    0.000    0.000    0.010    0.003 N_BLOC.py:63(__call__)
+        1    0.000    0.000    0.000    0.000 N_BLOC.py:70(verif_cata)
+        3    0.000    0.000    0.000    0.000 N_BLOC.py:90(verif_presence)
+        1    0.000    0.000    0.000    0.000 N_CO.py:1(?)
+        1    0.000    0.000    0.000    0.000 N_CO.py:3(CO)
+       29    0.000    0.000    0.000    0.000 N_CR.py:10(__init__)
+        1    0.000    0.000    0.000    0.000 N_CR.py:2(?)
+       27    0.000    0.000    0.000    0.000 N_CR.py:44(add)
+     29/2    0.010    0.000    0.010    0.005 N_CR.py:48(estvide)
+        1    0.000    0.000    0.000    0.000 N_CR.py:6(CR)
+        9    0.000    0.000    0.000    0.000 N_ENTITE.py:15(__init__)
+        5    0.000    0.000    0.000    0.000 N_ENTITE.py:27(affecter_parente)
+        1    0.000    0.000    0.000    0.000 N_ENTITE.py:3(?)
+     14/1    0.000    0.000    0.000    0.000 N_ENTITE.py:49(report)
+        5    0.000    0.000    0.000    0.000 N_ENTITE.py:68(verif_cata_regles)
+        1    0.000    0.000    0.000    0.000 N_ENTITE.py:7(ENTITE)
+        1    0.000    0.000    0.000    0.000 N_ETAPE.py:17(ETAPE)
+        1    0.000    0.000    0.000    0.000 N_ETAPE.py:4(?)
+        1    0.000    0.000    0.000    0.000 N_EVAL.py:2(?)
+        1    0.000    0.000    0.000    0.000 N_EVAL.py:4(EVAL)
+        1    0.000    0.000    0.000    0.000 N_Exception.py:3(?)
+        1    0.000    0.000    0.000    0.000 N_Exception.py:8(AsException)
+        4    0.000    0.000    0.000    0.000 N_FACT.py:109(verif_cata)
+        1    0.000    0.000    0.000    0.000 N_FACT.py:11(FACT)
+        4    0.000    0.000    0.000    0.000 N_FACT.py:29(__init__)
+        1    0.000    0.000    0.010    0.010 N_FACT.py:3(?)
+      4/1    0.000    0.000    0.030    0.030 N_FACT.py:69(__call__)
+        1    0.000    0.000    0.000    0.000 N_FONCTION.py:1(?)
+        1    0.000    0.000    0.000    0.000 N_FONCTION.py:3(FONCTION)
+        1    0.000    0.000    0.000    0.000 N_FONCTION.py:5(fonction)
+        1    0.000    0.000    0.000    0.000 N_FORM.py:1(?)
+        1    0.000    0.000    0.000    0.000 N_FORM.py:4(FORM)
+        1    0.000    0.000    0.000    0.000 N_FORM_ETAPE.py:1(?)
+        1    0.000    0.000    0.000    0.000 N_FORM_ETAPE.py:3(FORM_ETAPE)
+        1    0.000    0.000    0.000    0.000 N_GEOM.py:3(?)
+        1    0.000    0.000    0.000    0.000 N_GEOM.py:45(geom)
+        1    0.000    0.000    0.000    0.000 N_GEOM.py:6(GEOM)
+        1    0.000    0.000    0.000    0.000 N_JDC.py:15(JDC)
+        1    0.000    0.000    0.000    0.000 N_JDC.py:3(?)
+        1    0.000    0.000    0.000    0.000 N_JDC_CATA.py:11(JDC_CATA)
+        1    0.010    0.010    0.010    0.010 N_JDC_CATA.py:4(?)
+        1    0.000    0.000    0.000    0.000 N_MACRO.py:12(MACRO)
+        1    0.000    0.000    0.000    0.000 N_MACRO.py:4(?)
+        1    0.000    0.000    0.000    0.000 N_MACRO_ETAPE.py:17(MACRO_ETAPE)
+        1    0.000    0.000    0.000    0.000 N_MACRO_ETAPE.py:4(?)
+        1    0.000    0.000    0.000    0.000 N_MCBLOC.py:11(MCBLOC)
+        3    0.010    0.003    0.010    0.003 N_MCBLOC.py:18(__init__)
+        1    0.000    0.000    0.000    0.000 N_MCBLOC.py:5(?)
+        1    0.000    0.000    0.000    0.000 N_MCBLOC.py:51(get_valeur)
+        1    0.000    0.000    0.000    0.000 N_MCCOMPO.py:10(MCCOMPO)
+      8/1    0.000    0.000    0.030    0.030 N_MCCOMPO.py:16(build_mc)
+       11    0.000    0.000    0.000    0.000 N_MCCOMPO.py:165(recherche_mc_globaux)
+      8/3    0.000    0.000    0.010    0.003 N_MCCOMPO.py:195(supprime)
+        1    0.000    0.000    0.000    0.000 N_MCCOMPO.py:4(?)
+        8    0.000    0.000    0.000    0.000 N_MCCOMPO.py:81(ordonne_liste)
+     11/7    0.010    0.001    0.010    0.001 N_MCCOMPO.py:93(cree_dict_valeurs)
+      5/1    0.000    0.000    0.030    0.030 N_MCFACT.py:13(__init__)
+        5    0.000    0.000    0.000    0.000 N_MCFACT.py:37(GETVAL)
+        4    0.000    0.000    0.000    0.000 N_MCFACT.py:47(get_valeur)
+        1    0.010    0.010    0.010    0.010 N_MCFACT.py:5(?)
+        1    0.000    0.000    0.000    0.000 N_MCFACT.py:9(MCFACT)
+        1    0.010    0.010    0.010    0.010 N_MCLIST.py:15(init)
+        2    0.000    0.000    0.000    0.000 N_MCLIST.py:29(get_valeur)
+        1    0.000    0.000    0.010    0.010 N_MCLIST.py:44(supprime)
+        1    0.000    0.000    0.000    0.000 N_MCLIST.py:5(?)
+        1    0.000    0.000    0.000    0.000 N_MCLIST.py:9(MCList)
+        8    0.000    0.000    0.000    0.000 N_MCSIMP.py:13(__init__)
+        8    0.000    0.000    0.000    0.000 N_MCSIMP.py:45(GETVAL)
+        1    0.000    0.000    0.000    0.000 N_MCSIMP.py:5(?)
+       10    0.000    0.000    0.000    0.000 N_MCSIMP.py:55(get_valeur)
+        1    0.000    0.000    0.000    0.000 N_MCSIMP.py:9(MCSIMP)
+    16/11    0.000    0.000    0.000    0.000 N_OBJECT.py:17(get_etape)
+       16    0.010    0.001    0.010    0.001 N_OBJECT.py:27(supprime)
+        1    0.000    0.000    0.000    0.000 N_OBJECT.py:4(?)
+        1    0.000    0.000    0.000    0.000 N_OBJECT.py:6(OBJECT)
+        1    0.010    0.010    0.010    0.010 N_OPER.py:12(OPER)
+        1    0.000    0.000    0.020    0.020 N_OPER.py:4(?)
+        1    0.000    0.000    0.000    0.000 N_PROC.py:11(PROC)
+        1    0.000    0.000    0.000    0.000 N_PROC.py:4(?)
+        1    0.000    0.000    0.000    0.000 N_PROC_ETAPE.py:15(PROC_ETAPE)
+        1    0.000    0.000    0.000    0.000 N_PROC_ETAPE.py:4(?)
+        1    0.000    0.000    0.000    0.000 N_REGLE.py:18(?)
+        1    0.000    0.000    0.000    0.000 N_REGLE.py:22(REGLE)
+        1    0.000    0.000    0.000    0.000 N_REGLE.py:23(__init__)
+        1    0.000    0.000    0.000    0.000 N_REGLE.py:42(liste_to_dico)
+        1    0.000    0.000    0.000    0.000 N_SIMP.py:10(SIMP)
+        8    0.000    0.000    0.000    0.000 N_SIMP.py:104(__call__)
+        9    0.000    0.000    0.000    0.000 N_SIMP.py:26(__init__)
+        1    0.000    0.000    0.010    0.010 N_SIMP.py:3(?)
+        9    0.000    0.000    0.000    0.000 N_SIMP.py:78(verif_cata)
+        1    0.000    0.000    0.000    0.000 N__F.py:1(?)
+        1    0.000    0.000    0.000    0.000 N__F.py:3(_F)
+        1    0.000    0.000    0.000    0.000 UserList.py:1(?)
+        1    0.000    0.000    0.000    0.000 UserList.py:17(__eq__)
+        1    0.000    0.000    0.000    0.000 UserList.py:21(__cast)
+        1    0.000    0.000    0.000    0.000 UserList.py:3(UserList)
+        1    0.000    0.000    0.000    0.000 UserList.py:4(__init__)
+        2    0.000    0.000    0.000    0.000 UserList.py:73(append)
+        1    0.000    0.000    0.000    0.000 V_AU_MOINS_UN.py:11(verif)
+        1    0.000    0.000    0.000    0.000 V_AU_MOINS_UN.py:2(?)
+        1    0.000    0.000    0.000    0.000 V_AU_MOINS_UN.py:2(AU_MOINS_UN)
+        1    0.000    0.000    0.000    0.000 V_A_CLASSER.py:2(?)
+        1    0.000    0.000    0.000    0.000 V_A_CLASSER.py:4(A_CLASSER)
+        1    0.000    0.000    0.000    0.000 V_ENSEMBLE.py:2(?)
+        1    0.000    0.000    0.000    0.000 V_ENSEMBLE.py:2(ENSEMBLE)
+        1    0.000    0.000    0.000    0.000 V_ETAPE.py:18(ETAPE)
+        1    0.000    0.000    0.000    0.000 V_ETAPE.py:8(?)
+        1    0.000    0.000    0.000    0.000 V_EXCLUS.py:2(?)
+        1    0.000    0.000    0.000    0.000 V_EXCLUS.py:2(EXCLUS)
+        1    0.000    0.000    0.000    0.000 V_JDC.py:17(JDC)
+        1    0.000    0.000    0.000    0.000 V_JDC.py:8(?)
+        1    0.000    0.000    0.000    0.000 V_MACRO_ETAPE.py:19(MACRO_ETAPE)
+        1    0.000    0.000    0.000    0.000 V_MACRO_ETAPE.py:8(?)
+        1    0.000    0.000    0.000    0.000 V_MCBLOC.py:15(MCBLOC)
+        2    0.000    0.000    0.000    0.000 V_MCBLOC.py:24(isvalid)
+        1    0.000    0.000    0.000    0.000 V_MCBLOC.py:8(?)
+        1    0.000    0.000    0.000    0.000 V_MCCOMPO.py:13(MCCOMPO)
+        8    0.000    0.000    0.000    0.000 V_MCCOMPO.py:21(__init__)
+      6/1    0.010    0.002    0.010    0.010 V_MCCOMPO.py:32(report)
+        1    0.000    0.000    0.000    0.000 V_MCCOMPO.py:4(?)
+       11    0.000    0.000    0.000    0.000 V_MCCOMPO.py:49(verif_regles)
+       11    0.000    0.000    0.000    0.000 V_MCCOMPO.py:73(dict_mc_presents)
+        1    0.000    0.000    0.000    0.000 V_MCFACT.py:15(MCFACT)
+     11/7    0.000    0.000    0.000    0.000 V_MCFACT.py:24(isvalid)
+        1    0.000    0.000    0.000    0.000 V_MCFACT.py:8(?)
+        1    0.000    0.000    0.000    0.000 V_MCLIST.py:17(MCList)
+        2    0.000    0.000    0.000    0.000 V_MCLIST.py:29(isvalid)
+        1    0.000    0.000    0.000    0.000 V_MCLIST.py:51(report)
+        1    0.000    0.000    0.000    0.000 V_MCLIST.py:8(?)
+       16    0.000    0.000    0.000    0.000 V_MCSIMP.py:107(verif_type)
+       16    0.000    0.000    0.000    0.000 V_MCSIMP.py:155(verif_into)
+        1    0.000    0.000    0.000    0.000 V_MCSIMP.py:17(MCSIMP)
+       16    0.000    0.000    0.000    0.000 V_MCSIMP.py:257(is_entier)
+       16    0.000    0.000    0.000    0.000 V_MCSIMP.py:314(compare_type)
+       16    0.000    0.000    0.000    0.000 V_MCSIMP.py:357(isinintervalle)
+        8    0.000    0.000    0.000    0.000 V_MCSIMP.py:38(__init__)
+        8    0.000    0.000    0.000    0.000 V_MCSIMP.py:385(report)
+       23    0.000    0.000    0.000    0.000 V_MCSIMP.py:41(isvalid)
+       16    0.000    0.000    0.000    0.000 V_MCSIMP.py:77(isoblig)
+        1    0.000    0.000    0.000    0.000 V_MCSIMP.py:8(?)
+       16    0.000    0.000    0.000    0.000 V_MCSIMP.py:82(verif_card)
+        1    0.000    0.000    0.000    0.000 V_PRESENT_ABSENT.py:2(?)
+        1    0.000    0.000    0.000    0.000 V_PRESENT_ABSENT.py:2(PRESENT_ABSENT)
+        1    0.000    0.000    0.000    0.000 V_PRESENT_PRESENT.py:2(?)
+        1    0.000    0.000    0.000    0.000 V_PRESENT_PRESENT.py:2(PRESENT_PRESENT)
+        1    0.000    0.000    0.000    0.000 V_PROC_ETAPE.py:17(PROC_ETAPE)
+        1    0.000    0.000    0.000    0.000 V_PROC_ETAPE.py:8(?)
+        1    0.000    0.000    0.000    0.000 V_UN_PARMI.py:2(?)
+        1    0.000    0.000    0.000    0.000 V_UN_PARMI.py:2(UN_PARMI)
+        2    0.000    0.000    0.000    0.000 __init__.py:0(?)
+        1    0.000    0.000    0.020    0.020 __init__.py:10(?)
+        1    0.000    0.000    0.100    0.100 __init__.py:11(?)
+        1    0.000    0.000    0.000    0.000 __init__.py:6(?)
+        1    0.000    0.000    0.000    0.000 codex.py:3(?)
+        1    0.000    0.000    0.000    0.000 context.py:1(?)
+        2    0.000    0.000    0.000    0.000 copy_reg.py:14(pickle)
+        2    0.000    0.000    0.000    0.000 copy_reg.py:25(constructor)
+        1    0.000    0.000    0.000    0.000 copy_reg.py:5(?)
+        1    0.000    0.000    0.000    0.000 genpy.py:12(?)
+        1    0.000    0.000    0.000    0.000 genpy.py:19(genpy)
+        1    0.000    0.000    0.000    0.000 linecache.py:6(?)
+        1    0.000    0.000    0.160    0.160 main.py:11(main)
+        1    0.000    0.000    0.010    0.010 nommage.py:14(?)
+        1    0.010    0.010    0.170    0.170 profile:0(main())
+        0    0.000             0.000          profile:0(profiler)
+        1    0.000    0.000    0.010    0.010 re.py:23(?)
+        1    0.000    0.000    0.000    0.000 repr.py:1(?)
+        1    0.000    0.000    0.000    0.000 repr.py:5(Repr)
+        1    0.000    0.000    0.000    0.000 repr.py:6(__init__)
+        1    0.000    0.000    0.000    0.000 sre.py:125(_compile)
+        1    0.000    0.000    0.010    0.010 sre.py:17(?)
+        1    0.000    0.000    0.000    0.000 sre.py:228(Scanner)
+        1    0.010    0.010    0.010    0.010 sre_compile.py:11(?)
+        1    0.000    0.000    0.000    0.000 sre_compile.py:19(_compile)
+        1    0.000    0.000    0.000    0.000 sre_compile.py:234(_compile_info)
+        1    0.000    0.000    0.000    0.000 sre_compile.py:343(_code)
+        1    0.000    0.000    0.000    0.000 sre_compile.py:358(compile)
+        1    0.000    0.000    0.000    0.000 sre_constants.py:14(?)
+        3    0.000    0.000    0.000    0.000 sre_constants.py:141(makedict)
+        1    0.000    0.000    0.000    0.000 sre_constants.py:23(error)
+        1    0.000    0.000    0.000    0.000 sre_parse.py:14(?)
+        1    0.000    0.000    0.000    0.000 sre_parse.py:141(getwidth)
+        1    0.000    0.000    0.000    0.000 sre_parse.py:176(Tokenizer)
+        1    0.000    0.000    0.000    0.000 sre_parse.py:177(__init__)
+        3    0.000    0.000    0.000    0.000 sre_parse.py:181(__next)
+        1    0.000    0.000    0.000    0.000 sre_parse.py:194(match)
+        2    0.000    0.000    0.000    0.000 sre_parse.py:200(get)
+        1    0.000    0.000    0.000    0.000 sre_parse.py:307(_parse_sub)
+        1    0.000    0.000    0.000    0.000 sre_parse.py:362(_parse)
+        1    0.000    0.000    0.000    0.000 sre_parse.py:607(parse)
+        1    0.000    0.000    0.000    0.000 sre_parse.py:71(Pattern)
+        1    0.000    0.000    0.000    0.000 sre_parse.py:73(__init__)
+        1    0.000    0.000    0.000    0.000 sre_parse.py:90(SubPattern)
+        1    0.000    0.000    0.000    0.000 sre_parse.py:92(__init__)
+        1    0.000    0.000    0.000    0.000 string.py:20(?)
+        1    0.000    0.000    0.000    0.000 traceback.py:1(?)
+        1    0.000    0.000    0.000    0.000 types.py:35(_C)
+        1    0.010    0.010    0.010    0.010 types.py:4(?)
+        2    0.000    0.000    0.000    0.000 utils.py:2(?)
+        1    0.000    0.000    0.000    0.000 utils.py:3(?)
+
+
+*************************************************
+*  Trié par fichier seulement methodes __init__ *
+*************************************************
+         750 function calls (669 primitive calls) in 0.170 CPU seconds
+
+   Ordered by: file name
+   List reduced from 288 to 25 due to restriction <'__init__'>
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+        1    0.000    0.000    0.000    0.000 ../../../Noyau/N_BLOC.py:29(__init__)
+        9    0.000    0.000    0.000    0.000 ../../../Noyau/N_ENTITE.py:15(__init__)
+        4    0.000    0.000    0.000    0.000 ../../../Noyau/N_FACT.py:29(__init__)
+        3    0.010    0.003    0.010    0.003 ../../../Noyau/N_MCBLOC.py:18(__init__)
+      5/1    0.000    0.000    0.030    0.030 ../../../Noyau/N_MCFACT.py:13(__init__)
+        8    0.000    0.000    0.000    0.000 ../../../Noyau/N_MCSIMP.py:13(__init__)
+        8    0.000    0.000    0.000    0.000 ../../../Validation/V_MCCOMPO.py:21(__init__)
+        3    0.000    0.000    0.010    0.003 ../../Accas/A_MCBLOC.py:6(__init__)
+      5/1    0.000    0.000    0.030    0.030 ../../Accas/A_MCFACT.py:5(__init__)
+        1    0.000    0.000    0.000    0.000 ../../Accas/A_MCLIST.py:5(__init__)
+        8    0.000    0.000    0.000    0.000 ../../Accas/A_MCSIMP.py:5(__init__)
+        1    0.000    0.000    0.100    0.100 ../../Accas/__init__.py:11(?)
+        1    0.000    0.000    0.000    0.000 ../../Build/__init__.py:0(?)
+        1    0.000    0.000    0.000    0.000 ../../Execution/__init__.py:0(?)
+       29    0.000    0.000    0.000    0.000 ../../Noyau/N_CR.py:10(__init__)
+        1    0.000    0.000    0.000    0.000 ../../Noyau/N_REGLE.py:23(__init__)
+        9    0.000    0.000    0.000    0.000 ../../Noyau/N_SIMP.py:26(__init__)
+        1    0.000    0.000    0.020    0.020 ../../Noyau/__init__.py:10(?)
+        8    0.000    0.000    0.000    0.000 ../../Validation/V_MCSIMP.py:38(__init__)
+        1    0.000    0.000    0.000    0.000 ../../Validation/__init__.py:6(?)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/UserList.py:4(__init__)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/repr.py:6(__init__)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:73(__init__)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:177(__init__)
+        1    0.000    0.000    0.000    0.000 /home01/chris/pkg/python2.1/lib/python2.1/sre_parse.py:92(__init__)
+
+
diff --git a/Extensions/__init__.py b/Extensions/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Extensions/commande_comm.py b/Extensions/commande_comm.py
new file mode 100644 (file)
index 0000000..68bd102
--- /dev/null
@@ -0,0 +1,218 @@
+#@ MODIF commande_comm Accas  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+import os,traceback,string
+
+from Noyau.N_CR import CR
+from Noyau.N_Exception import AsException
+
+class COMMANDE_COMM:
+    """
+    Cette classe sert à définir les objets de type Commande commentarisée
+    """
+    nature = "COMMANDE_COMMENTARISEE"
+    idracine='_comm'
+    
+    def __init__(self,texte='',parent=None,reg='oui'):
+        self.valeur = texte
+        if not parent :
+            self.jdc = self.parent = CONTEXT.get_current_step()
+        else:
+            self.jdc = self.parent = parent
+        if hasattr(self.parent,'etape'):
+          self.etape = self.parent.etape
+        else :
+          self.etape = None
+        self.definition=self
+        self.nom = ''
+        self.niveau = self.parent.niveau
+        #self.appel = N_utils.callee_where(niveau=2)
+        if reg=='oui' : self.register()
+            
+    def isvalid(self):
+        return 1
+
+    def report(self):
+        """
+        Génère l'objet rapport (classe CR)
+        """
+        self.cr=CR()
+        if not self.isvalid(): self.cr.warn("Objet commande commentarisé invalide")
+        return self.cr
+
+    def copy(self):
+        """
+        Retourne une copie de self cad un objet COMMANDE_COMM
+        """
+        # XXX self.texte ne semble pas exister ???
+        return COMMANDE_COMM(self.texte,parent = self.parent,reg='non')
+
+    def init_modif(self):
+        self.state = 'modified'
+        self.parent.init_modif()    
+
+    def set_valeur(self,new_valeur):
+        """
+        Remplace la valeur de self(si elle existe) par new_valeur)
+        """
+        self.valeur = new_valeur
+        self.init_modif()
+
+    def get_valeur(self) :
+        """
+        Retourne la valeur de self, cad le texte de la commande commentarisée
+        """
+        return self.valeur
+
+    def register(self):
+        """
+        Enregistre la commande commenatrisée dans la liste des étapes de son parent lorsque celui-ci
+        est un JDC
+        """
+        self.parent.register(self)
+
+    def isoblig(self):
+        """
+        Indique si self est obligatoire ou non : retourne toujours 0
+        """
+        return 0
+
+    def ident(self):
+        """
+        Retourne le nom interne associé à self
+        Ce nom n'est jamais vu par l'utilisateur dans EFICAS
+        """
+        return self.nom
+
+    def isrepetable(self):
+        """
+        Indique si self est répétable ou non : retourne toujours 1
+        """
+        return 1        
+
+    def get_attribut(self,nom_attribut) :
+        """
+        Retourne l'attribut de nom nom_attribut de self (ou hérité)
+        """
+        if hasattr(self,nom_attribut) :
+          return getattr(self,nom_attribut)
+        else :
+          return None
+
+    def get_fr(self):
+        """
+        Retourne l'attribut fr de self.definition
+        """
+        try :
+          return getattr(self.definition,'fr')
+        except:
+          return ''
+
+    def liste_mc_presents(self):
+        return []
+
+    def supprime(self):
+        """ 
+        Méthode qui supprime toutes les boucles de références afin que l'objet puisse
+        être correctement détruit par le garbage collector 
+        """
+        self.parent = None
+        self.etape = None
+        self.jdc = None
+        self.niveau = None
+        self.definition = None
+        self.valeur = None
+        self.val = None
+        self.appel = None
+
+    def supprime_sdprods(self):
+        pass
+
+    def update_context(self,d):
+        """
+        Update le dictionnaire d avec les concepts ou objets produits par self
+        --> ne fait rien pour une commande en  commentaire
+        """
+        pass
+
+    def delete_concept(self,sd):
+        pass
+
+    def get_sdprods(self,nom_sd):
+        return None
+
+    def uncomment(self):
+        """
+        Cette méthode a pour but de décommentariser l'objet courant,
+        cad de retourner un tuple contenant :
+        - l'objet CMD associé
+        - le nom de la sdprod éventuellement produite (sinon None)
+        """
+        # on récupère le contexte avant la commande commentarisée
+        context_ini = self.jdc.get_contexte_avant(self)
+        try:
+            # on essaie de créer un objet JDC...
+            CONTEXT.unset_current_step()
+            J=self.jdc.__class__(procedure=self.valeur,
+                                 definition=self.jdc.definition,
+                                 cata=self.jdc.cata,
+                                 cata_ord_dico=self.jdc.cata_ordonne_dico,
+                                 context_ini = context_ini,
+                                )
+            J.analyse()
+        except Exception,e:
+            traceback.print_exc()
+            #self.jdc.set_context()
+            raise AsException("Erreur",str(e))
+        if len(J.cr.crfatal)>0 :
+            # des erreurs fatales ont été rencontrées
+            #self.jdc.set_context()
+            print 'erreurs fatales !!!'
+            raise AsException("Erreurs fatales",string.join(J.cr.crfatal))
+        #self.jdc.set_context()
+        new_etape = J.etapes[0]
+        if new_etape.sd :
+            nom_sd = new_etape.sd.nom
+        else:
+            nom_sd = None
+        return (new_etape.copy(),nom_sd)
+
+    def active(self):
+        """
+        Rend l'etape courante active
+        """
+        self.actif = 1
+
+    def inactive(self):
+        """
+        Rend l'etape courante inactive
+        """
+        self.actif = 0
+
+    def isactif(self):
+        """
+        Booléenne qui retourne 1 si self est valide, 0 sinon
+        """
+        return self.actif
+    
+    def verif_condition_bloc(self):
+      """
+          Evalue les conditions de tous les blocs fils possibles
+          (en fonction du catalogue donc de la définition) de self et
+          retourne deux listes :
+          - la première contient les noms des blocs à rajouter
+          - la seconde contient les noms des blocs à supprimer
+      """
+      return [],[]
+
+    def verif_condition_regles(self,liste_presents):
+      """
+          Retourne la liste des mots-clés à rajouter pour satisfaire les règles
+          en fonction de la liste des mots-clés présents
+      """
+      return []
+
diff --git a/Extensions/commentaire.py b/Extensions/commentaire.py
new file mode 100644 (file)
index 0000000..733a201
--- /dev/null
@@ -0,0 +1,149 @@
+"""
+   Ce module contient la classe COMMENTAIRE qui sert dans EFICAS
+   pour gérer les commentaires dans un JDC
+"""
+
+from Noyau.N_CR import CR
+
+class COMMENTAIRE :
+  """ 
+      Cette classe permet de créer des objets de type COMMENTAIRE 
+  """
+  nature = 'COMMENTAIRE'
+  idracine = '_comm'
+
+  def __init__(self,valeur,parent=None):
+    # parent est un objet de type OBJECT (ETAPE ou MC ou JDC...)
+    self.valeur=valeur
+    if not parent :
+      self.jdc = self.parent = CONTEXT.get_current_step()
+    else:
+      self.jdc = self.parent = parent
+    # La classe COMMENTAIRE n'a pas de définition. On utilise self
+    # pour complétude
+    self.definition=self
+    self.nom=''
+    self.niveau = self.parent.niveau
+    self.actif=1
+    self.register()
+
+  def register(self):
+    """ 
+        Enregistre le commentaire dans la liste des étapes de son parent
+        lorsque celui-ci est un JDC 
+    """
+    if self.parent.nature == 'JDC':
+      # le commentaire est entre deux commandes:
+      # il faut l'enregistrer dans la liste des étapes
+      self.parent.register(self)
+
+  def isvalid(self):
+    """
+    Retourne 1 si self est valide, 0 sinon
+    Retourne toujours 1 car un commentaire est toujours valide
+    """
+    return 1
+
+  def isoblig(self):
+    """ Indique si self est obligatoire ou non : retourne toujours 0 """
+    return 0
+
+  def isrepetable(self):
+    """ Indique si self est répétable ou non : retourne toujours 1 """
+    return 1
+
+  def active(self):
+      """
+      Rend l'etape courante active
+      """
+      self.actif = 1
+
+  def inactive(self):
+      """
+      Rend l'etape courante inactive
+      NB : un commentaire est toujours actif !
+      """
+      self.actif = 1
+
+  def isactif(self):
+      """
+      Booléenne qui retourne 1 si self est valide, 0 sinon
+      """
+      return self.actif
+
+  def supprime(self):
+      """
+      Méthode qui supprime toutes les boucles de références afin que 
+      l'objet puisse être correctement détruit par le garbage collector
+      """
+      self.parent=None
+      self.jdc=None
+      self.definition = None
+      self.niveau = None
+
+  def liste_mc_presents(self):
+      return []
+
+  def get_valeur(self) :
+    """ Retourne la valeur de self, cad le contenu du commentaire """
+    try :
+      return self.valeur
+    except:
+      return None
+
+  def set_valeur(self,new_valeur):
+    """ 
+        Remplace la valeur de self(si elle existe) par new_valeur
+    """
+    self.valeur = new_valeur
+    self.init_modif()
+
+  def init_modif(self):
+    self.state = 'modified'
+    if self.parent:
+      self.parent.init_modif()
+
+  def supprime_sdprods(self):
+    pass
+
+  def update_context(self,d):
+    """
+        Update le dictionnaire d avec les concepts ou objets produits par self
+        --> ne fait rien pour un commentaire
+    """
+    pass
+
+  def report(self):
+    """ Génère l'objet rapport (classe CR) """
+    self.cr=CR()
+    if not self.isvalid(): self.cr.warn("Objet commentaire non valorisé")
+    return self.cr
+
+  def ident(self):
+    """ Retourne le nom interne associé à self
+        Ce nom n'est jamais vu par l'utilisateur dans EFICAS
+    """
+    return self.nom
+
+  def delete_concept(self,sd):
+    pass
+
+  def verif_condition_bloc(self):
+    """
+        Evalue les conditions de tous les blocs fils possibles
+        (en fonction du catalogue donc de la définition) de self et
+        retourne deux listes :
+        - la première contient les noms des blocs à rajouter
+        - la seconde contient les noms des blocs à supprimer
+    """
+    return [],[]
+
+  def verif_condition_regles(self,liste_presents):
+    """
+        Retourne la liste des mots-clés à rajouter pour satisfaire les règles
+        en fonction de la liste des mots-clés présents
+    """
+    return []
+
+
+
diff --git a/Extensions/etape_niveau.py b/Extensions/etape_niveau.py
new file mode 100644 (file)
index 0000000..31c7c20
--- /dev/null
@@ -0,0 +1,111 @@
+"""
+    Ce module contient la classe ETAPE_NIVEAU qui sert à 
+    concrétiser les niveaux au sein d'un JDC
+"""
+import traceback
+
+from Noyau import N_OBJECT
+
+class ETAPE_NIVEAU(N_OBJECT.OBJECT):
+
+  def __init__(self,niveau,parent):
+    self.parent = parent
+    self.jdc = self.parent.get_jdc_root()
+    self.niveau = self
+    self.definition = niveau
+    self.etapes=[]
+    self.etapes_niveaux = []
+    self.dict_niveaux={}
+    self.editmode = 0
+    self.build_niveaux()
+
+  def build_niveaux(self):
+    for niveau in self.definition.l_niveaux:
+      etape_niveau = ETAPE_NIVEAU(niveau,self)
+      self.etapes_niveaux.append(etape_niveau)
+      self.dict_niveaux[niveau.nom]=etape_niveau
+
+  def register(self,etape):
+    """ 
+          Enregistre la commande étape :
+          - si editmode = 0 : on est en mode relecture d'un fichier de commandes
+          auquel cas on ajoute etape à la fin de la liste self.etapes
+          - si editmode = 1 : on est en mode ajout d'étape depuis eficas auquel cas
+          cette méthode ne fait rien, c'est addentité qui enregistre etape
+          à la bonne place dans self.etapes 
+    """
+    if self.editmode : return
+    self.etapes.append(etape)
+
+  def unregister(self,etape):
+    """
+        Desenregistre l'etape du niveau
+    """
+    self.etapes.remove(etape)
+
+  def ident(self):
+    return self.definition.label
+
+  def isactif(self):
+    #print 'Niveau : ',self.definition.nom
+    #print '\tactif =',self.definition.actif
+    if self.definition.actif == 1 :
+      return 1
+    else :
+      # self.actif est une condition à évaluer dans un certain contexte ...
+      d = self.cree_dict_valeurs()
+      try:
+        t=eval(self.definition.actif,d)
+        return t
+      except:
+        traceback.print_exc()
+        return 0
+
+  def cree_dict_valeurs(self):
+    """
+    Retourne le dictionnaire des frères aînés de self composé des couples :
+    {nom_frère isvalid()}
+    """
+    d={}
+    for niveau in self.parent.etapes_niveaux:
+      if niveau is self : break
+      d[niveau.definition.nom]=niveau.isvalid()
+    return d
+
+  def isvalid(self):
+    """ Méthode booléenne qui retourne 0 si le niveau est invalide, 1 sinon """
+    if self.etapes_niveaux == []:
+      if len(self.etapes) == 0:
+        return self.definition.valide_vide
+      else:
+        for etape in self.etapes :
+          if not etape.isvalid() : return 0
+        return 1
+    else:
+      for etape_niveau in self.etapes_niveaux :
+        if not etape_niveau.isvalid() : return 0
+      return 1
+
+  def accept(self,visitor):
+    visitor.visitETAPE_NIVEAU(self)
+
+  def addentite(self,name,pos_rel):
+    self.editmode = 1
+    try :
+      pos_abs=self.jdc.get_nb_etapes_avant(self)+pos_rel
+      cmd = self.jdc.addentite(name,pos_abs)
+      self.etapes.insert(pos_rel,cmd)
+      self.editmode = 0
+      return cmd
+    except:
+      traceback.print_exc()
+      self.editmode = 0
+      return None
+
+  def suppentite(self,etape) :
+    """ Classe ETAPE_NIVEAU
+        Supprime une étape 
+    """
+    self.jdc.suppentite(etape)
+
+
diff --git a/Extensions/interpreteur_formule.py b/Extensions/interpreteur_formule.py
new file mode 100644 (file)
index 0000000..7e2dbdf
--- /dev/null
@@ -0,0 +1,561 @@
+#@ MODIF interpreteur_formule Accas  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+import string,re,sys,exceptions,types
+
+from Noyau.N_CR import CR
+
+def group(*choices): return '(' + string.join(choices, '|') + ')'
+def any(*choices): return apply(group, choices) + '*'
+def maybe(*choices): return apply(group, choices) + '?'
+
+Intnumber = r'[1-9]\d*'
+Exponent = r'[eEdD][-+]?\d+'
+Pointfloat = group(r'\d+\.\d*', r'\.\d+') + maybe(Exponent)
+Expfloat = r'[1-9]\d*' + Exponent
+Floatnumber = group(Pointfloat, Expfloat)
+
+pat_number = re.compile(r'^([+-]?)([0-9]+)(\.\d*)?(.*)')
+pat_number_complet = re.compile(r'^([+-]?)([0-9]+)(\.\d*)?([eEdD][+-]?\d+)(.*)')
+pat_constante = re.compile(r'^([+-]?)([a-zA-Z][a-zA-Z_0-9]*\s*)(.*)')
+
+def cmp_function(arg1,arg2):
+    """
+    Fonction de comparaison permettant de classer les listes de
+    fonctions unaires et binaires selon la longueur de leurs arguments
+    On classe les arguments les plus longs en premier
+    """
+    if len(arg1) > len(arg2):
+        return -1
+    elif len(arg1) == len(arg2):
+        return 0
+    else:
+        return 1
+    
+class InterpreteurException(exceptions.Exception):
+    """
+    Classe servant à définir les exceptions levées par l'interpréteur de formule
+    """
+    def __init__(self,args=None):
+        self.args = args
+
+    def __str__(self):
+        return self.args
+
+class Interpreteur_Formule:
+    """
+    Cette classe sert à construire un interpréteur de formules Aster
+    """
+    l_fonctions_binaires = ['+','-','*','/','**','=','MOD','MIN','MAX','ATAN2']
+    l_fonctions_unaires = ['+','-','INT','REAL','AIMAG','ABS','SQRT','EXP','LOG',
+                           'LOG10','SIN','COS','TAN','ASIN','ACOS','ATAN','SINH',
+                           'COSH','TANH','HEAVYSID']
+    l_constantes = ['PI','RD_RG','DG_RD']
+    def __init__(self,formule=None,constantes=[],fonctions=[],parent=None):
+        """
+        Constructeur d'interpréteurs de formule Aster
+        - formule = tuple (nom,type,arguments,corps)
+        - constantes = liste des noms de constantes externes
+        - fonctions_unaires = dictionnaire {nom_fonction externe : nb arguments de cette fonction}
+        """
+        self.new_constantes = constantes
+        self.new_fonctions_unaires = fonctions
+        self.cr = CR()
+        self.l_operateurs = []
+        self.parent = parent
+        self.l_children = []
+        if formule :
+            self.set_formule(formule)
+        if self.parent :
+            self.parent.enregistre(self)
+
+    def set_formule(self,formule):
+        """
+        Stocke formule (tuple) dans l'attribut t_formule
+        Méthode externe
+        """
+        if type(formule) != types.TupleType:
+            raise InterpreteurException,"La formule passée à l'interpréteur doit être sous forme de tuple"
+        self.t_formule = formule
+        self.init_cr()
+        self.modify_listes()
+        self.ordonne_listes()
+
+    def init_cr(self):
+        """
+        Initialise le cr,cad valorise les chaînes debut et fin
+        """
+        nom = self.t_formule[0]
+        if nom :
+            if nom[0] in ('+','-') : nom = nom[1:]
+        self.cr.debut = "Début Fonction %s" %nom
+        self.cr.fin = "Fin Fonction %s" %nom
+        
+    def str(self):
+        """
+        Retourne une liste de chaînes de caractères représentant la formule
+        """
+        l_txt = []
+        l_txt.append(self.t_formule[0])
+        for oper in self.l_operateurs:
+            # oper est ici une liste décrivant oper
+            txt = []
+            for elem in oper:
+                txt.append(str(elem))
+            l_txt.append(txt)
+        return l_txt
+
+    def report(self,decalage=1):
+        """
+        Retourne le rapport de FORMULE
+        """
+        txt = self.cr.report()
+        return txt
+    
+    def enregistre(self,fils):
+        """
+        Enregistre un opérateur fils dans la liste des children
+        """
+        self.l_children.append(fils)
+        self.cr.add(fils.cr)
+        
+    def isvalid(self):
+        """
+        Booléenne qui retourne 1 si la formule est valide, 0 sinon
+        Méthode externe
+        """
+        self.l_operateurs = []
+        self.cr.purge() # on vide le cr 
+        self.init_cr() # on initialise le cr
+        self.interprete_formule()
+        return self.cr.estvide()
+
+    def interprete_formule(self):
+        """
+        Réalise l'interprétation du corps de la formule
+        """
+        texte = self.t_formule[3]\r
+        if not texte : return
+        if type(texte) != types.ListType:
+            texte = [texte,]
+        for text_arg in texte:
+            text_arg = string.replace(text_arg,'\n','')
+            try:
+                self.l_operateurs.append(self.split_operateurs(text_arg))
+            except InterpreteurException,e:
+                self.cr.fatal(str(e))
+
+    def modify_listes(self):
+        """
+        Modifie la liste des constantes en lui ajoutant le nom des paramètres
+        de la fonction à interpréter
+        """
+        args = self.t_formule[2]
+        # l'interpréteur de formule sert aussi à évaluer les EVAL
+        # dans ce cas il n'y a pas d'arguments puisque pas de fonction ...
+        if args :
+            args = args[1:-1] # on enlève les parenthèses ouvrante et fermante
+            l_args = string.split(args,',')
+            for arg in l_args:
+                typ,nom = string.split(arg,':')
+                nom = string.strip(nom)
+                self.l_constantes.append(nom)
+        # on considère que les fonctions unaires de base sont toutes à un seul argument :
+        l_f = []
+        self.d_fonctions_unaires = {}
+        for fct in self.l_fonctions_unaires:
+            self.d_fonctions_unaires[fct]=1
+        # on ajoute les constantes externes
+        for cte in self.new_constantes:
+            self.l_constantes.append(cte)
+        # on ajoute les fonctions unaires externes au dictionnaire des fonctions unaires
+        for new_fonc in self.new_fonctions_unaires:
+            self.d_fonctions_unaires[new_fonc[0]] = self.get_nb_args(new_fonc)
+        #self.d_fonctions_unaires.update(self.new_fonctions_unaires)
+        self.l_fonctions_unaires = self.d_fonctions_unaires.keys()
+        
+    def ordonne_listes(self):
+        """
+        Ordonne les listes de fonctions unaires et binaires
+        """
+        self.l_fonctions_binaires.sort(cmp_function)
+        self.l_fonctions_unaires.sort(cmp_function)
+        self.l_constantes.sort(cmp_function)
+        
+
+    def split_operateurs(self,texte):
+        """
+        Splite le texte passé en argument en opérateurs plus élémentaires.
+        N'analyse pas l'intérieur des opérateurs (ne fait qu'une passe)
+        """
+        l_operateurs = []
+        texte = string.strip(texte)
+        # on recherche un nombre en début de texte
+        try:
+            oper,reste = self.cherche_nombre(texte)
+        except InterpreteurException,e:
+            raise InterpreteurException,str(e)
+        if not oper :
+            # on recherche une constante en début de texte
+            try:
+                oper,reste = self.cherche_constante(texte)
+            except InterpreteurException,e:
+                raise InterpreteurException,str(e)
+            if not oper :
+                # on recherche une expression entre parenthèses...
+                try:
+                    oper,reste = self.cherche_expression_entre_parentheses(texte)
+                except InterpreteurException,e:
+                    raise InterpreteurException,str(e)
+                if not oper :
+                    # on recherche le début d'un opérateur unaire en début de texte
+                    try:
+                        oper,reste = self.cherche_operateur_unaire(texte)
+                    except InterpreteurException,e:
+                        raise InterpreteurException,str(e)
+                    if not oper :
+                        type_objet,nom_objet = self.get_type(texte)
+                        if type_objet == 'constante':
+                            raise InterpreteurException, "Constante %s inconnue" %nom_objet
+                        elif type_objet == 'fonction':
+                            raise InterpreteurException, "Fonction %s inconnue dans %s" %(nom_objet,texte)
+                        else:
+                            raise InterpreteurException, "Impossible d'interpréter : %s" %texte
+        # on a trouvé un opérateur (nombre, constante ou unaire)
+        # il faut encore vérifier que l'on est en fin de texte ou qu'il est bien suivi
+        # d'un opérateur binaire
+        l_operateurs.append(oper)
+        if reste :
+            texte = string.strip(reste)
+            oper,reste = self.cherche_operateur_binaire(texte)
+            if not oper :
+                # on a un reste et pas d'opérateur binaire --> erreur
+                raise InterpreteurException,"L'opérateur %s doit être suivi d'un opérateur binaire" %l_operateurs[-1]
+            else:
+                # on a bien trouvé un opérateur binaire:
+                l_operateurs.append(oper)
+                # il faut recommencer l'analyse du reste par split_operateurs ...
+                try:
+                    l_op = self.split_operateurs(reste)
+                except InterpreteurException,e:
+                    raise InterpreteurException,str(e)
+                l_operateurs.extend(l_op)
+                return l_operateurs
+        else:
+            # on a fini d'analyser texte
+            return l_operateurs
+
+    def cherche_nombre(self,texte):
+        """
+        Cherche un nombre en début de texte
+        Retourne ce nombre et le reste ou None et le texte initial
+        Peut lever une InterpreteurException dans le cas où le nombre n'est pas valide
+        """
+        texte = string.strip(texte)
+        m = pat_number_complet.match(texte)
+        if m:
+            # on a trouvé un nombre avec exposant
+            l_groups = m.groups()
+            sgn = l_groups[0]
+            nb = l_groups[1]
+            if l_groups[2]:
+                nb = nb+l_groups[2]
+            if l_groups[3]:
+                nb = nb+l_groups[3]
+            nombre = sgn+nb
+            return nombre,l_groups[4]
+        else:
+            m = pat_number.match(texte)
+            if m :
+                # on a trouvé un nombre sans exposant
+                l_groups = m.groups()
+                sgn = l_groups[0]
+                nb = l_groups[1]
+                if l_groups[2]:
+                    nb = nb+l_groups[2]
+                nombre = sgn+nb
+                # il faut vérifier si ce nombre n'est pas suivi d'un exposant incomplet ...
+                reste = string.strip(l_groups[3])
+                if reste == '':
+                    return nombre,l_groups[3]
+                if reste[0] in ('e','E','d','D') :
+                    raise InterpreteurException,"La syntaxe de l'exposant de %s est erronée " %nb
+                else:
+                    return nombre,l_groups[3]
+            else:
+                # on n'a pas trouvé de nombre
+                return None,texte
+        
+    def cherche_constante_old(self,texte):
+        """
+        Recherche une constante en début de texte parmi la liste des constantes.
+        Retourne le texte représentant la constante et le reste du texte ou
+        Retourne None,texte si aucune constante trouvée
+        """
+        txt = None
+        texte = string.strip(texte)
+        for cte in self.l_constantes:
+            index = string.find(texte,cte)
+            #if index == 0 : print 'on a trouvé %s dans %s en %d' %(cte,texte,index)
+            if index == 0 :
+                txt = cte
+                zz,reste = string.split(texte,cte,1)
+                break
+        if txt :
+            return txt,reste
+        else:
+            # aucune constante trouvée
+            return None,texte
+
+    def cherche_constante(self,texte):
+        """
+        Recherche une constante en début de texte parmi la liste des constantes.
+        Retourne le texte représentant la constante et le reste du texte ou
+        Retourne None,texte si aucune constante trouvée
+        """
+        txt = None
+        texte = string.strip(texte)
+        m = pat_constante.match(texte)
+        if m :
+            # on a trouvé un identificateur en début de texte
+            l_groups = m.groups()
+            sgn = l_groups[0]
+            identificateur = string.strip(l_groups[1])
+            reste = l_groups[2]
+            # il faut vérifier qu'il ne s'agit pas d'un appel à une fonction
+            if reste :
+                if reste[0] == '(' :
+                    # --> appel de fonction
+                    return None,texte
+            # il faut encore vérifier qu'elle est bien dans la liste des constantes...
+            if identificateur not in self.l_constantes :
+                raise InterpreteurException,"La constante %s est inconnue dans %s" %(identificateur,texte)
+            else:
+                return sgn+identificateur,reste
+        else:
+            # aucune constante trouvée
+            return None,texte
+        
+    def cherche_args(self,texte):
+        """
+        Cherche au début de texte une liste d'arguments entre parenthèses
+        """
+        if texte[0]!='(':
+            return None,texte
+        else:
+            n=0
+            cpt=1
+            while cpt != 0:
+                n=n+1
+                if n>= len(texte):
+                    # on a atteint la fin de texte sans avoir trouvé la parenthèse fermante --> erreur
+                    raise InterpreteurException,"Manque parenthèse fermante dans %s" %texte
+                if texte[n] == '(':
+                    cpt=cpt+1
+                elif texte[n]==')':
+                    cpt=cpt-1
+            if (n+1 < len(texte)):
+                return texte[0:n+1],texte[n+1:]
+            else:
+                # on a fini d'analyser le texte : reste = None
+                return texte,None
+                    
+    def cherche_operateur_unaire_old(self,texte):
+        """
+        Cherche dans texte un operateur unaire
+        """
+        txt = None
+        texte = string.strip(texte)
+        for oper in self.l_fonctions_unaires:
+            index = string.find(texte,oper)
+            if index == 0 :
+                txt = oper
+                zz,reste = string.split(texte,oper,1)
+                break
+        if txt :
+            #print 'on a trouvé :',txt
+            operateur = txt
+            texte = reste
+            try:
+                args,reste = self.cherche_args(texte)
+            except InterpreteurException,e:
+                raise InterpreteurException,str(e)
+            if not args :
+                # opérateur unaire sans arguments
+                raise InterpreteurException,'opérateur unaire  %s sans arguments' %operateur
+            else:
+                #operateur = operateur+args
+                args = self.split_args(txt,args,self.d_fonctions_unaires[operateur])
+                formule_operateur = (txt,'',self.t_formule[2],args)
+                operateur = Interpreteur_Formule(formule = formule_operateur,
+                                                 constantes = self.new_constantes,
+                                                 fonctions_unaires = self.new_fonctions_unaires,
+                                                 parent = self)
+                operateur.interprete_formule()
+                texte = reste
+                return operateur,reste
+        else:
+            # aucun opérateur unaire trouvé
+            return None,texte
+
+    def cherche_operateur_unaire(self,texte):
+        """
+        Cherche dans texte un operateur unaire
+        """
+        txt = None
+        texte = string.strip(texte)
+        m = pat_constante.match(texte)
+        if m :
+            # on a trouvé un identificateur en début de texte
+            # il faut encore vérifier que l'on a bien à faire à un appel de fonction ...
+            l_groups = m.groups()
+            sgn = l_groups[0]
+            identificateur = string.strip(l_groups[1])
+            reste = l_groups[2]
+            try:
+                args,reste = self.cherche_args(reste)
+            except InterpreteurException,e:
+                raise InterpreteurException,str(e)
+            if not args :
+                # opérateur unaire sans arguments
+                # en principe on ne doit jamais être dans ce cas car il est déjà trappé par cherche_constante ...
+                raise InterpreteurException,'Fonction %s sans arguments !' %identificateur
+            else:
+                # il faut encore vérifier que l'on a bien à faire à une fonction connue
+                if identificateur not in self.l_fonctions_unaires:
+                    raise InterpreteurException,'Fonction %s inconnue dans %s !' %(identificateur,texte)
+                args = self.split_args(identificateur,args,self.d_fonctions_unaires[identificateur])
+                formule_operateur = (sgn+identificateur,'',self.t_formule[2],args)
+                operateur = Interpreteur_Formule(formule = formule_operateur,
+                                                 constantes = self.new_constantes,
+                                                 fonctions = self.new_fonctions_unaires,
+                                                 parent = self)
+                operateur.interprete_formule()
+                texte = reste
+                return operateur,reste
+        elif texte[0] == '-':
+           # Il faut pouvoir trapper les expressions du type exp(-(x+1)) ...
+           try :
+              args,reste = self.cherche_args(texte[1:])
+           except InterpreteurException,e:
+                raise InterpreteurException,str(e)
+           if not args :
+              # Il ne s'agit pas de '-' comme opérateur unaire --> on retourne None
+              return None,texte
+           else:
+              identificateur = '-'
+              args = self.split_args(identificateur,args,self.d_fonctions_unaires[identificateur])
+               formule_operateur = (identificateur,'',self.t_formule[2],args)
+               operateur = Interpreteur_Formule(formule = formule_operateur,
+                                                 constantes = self.new_constantes,
+                                                 fonctions = self.new_fonctions_unaires,
+                                                 parent = self)
+               operateur.interprete_formule()
+               texte = reste
+               return operateur,reste
+        else:
+            return None,texte
+            
+    def cherche_operateur_binaire(self,texte):
+        """
+        Cherche dans texte un operateur unaire
+        """
+        txt = None
+        texte = string.strip(texte)
+        for oper in self.l_fonctions_binaires:
+            index = string.find(texte,oper)
+            #if index != -1 : print 'on a trouvé %s dans %s en %d' %(oper,texte,index)
+            if index == 0 :
+                txt = oper
+                zz,reste = string.split(texte,oper,1)
+                break
+        if txt :
+            return txt,reste
+        else:
+            # aucun opérateur unaire trouvé
+            return None,texte
+
+    def cherche_expression_entre_parentheses(self,texte):
+        """
+        Cherche en début de texte une expression entre parentheses
+        """
+        args,reste = self.cherche_args(string.strip(texte))
+        if not args :
+            return None,texte
+        else:
+            # on a trouvé une expression entre parenthèses en début de texte
+            # --> on retourne un objet Interpreteur_Formule
+            formule_operateur = ('','',self.t_formule[2],args[1:-1])
+            operateur = Interpreteur_Formule(formule = formule_operateur,
+                                             constantes = self.new_constantes,
+                                             fonctions = self.new_fonctions_unaires,
+                                             parent = self)
+            operateur.interprete_formule()
+            texte = reste
+            return operateur,reste
+            
+    def split_args(self,nom_fonction,args,nb_args):
+        """
+        Tente de partager args en nb_args éléments
+        Retourne une liste de chaînes de caractères (liste de longueur nb_args)
+        """
+        args = args[1:-1] # on enlève les parenthèses ouvrante et fermante
+        if nb_args == 1 : return args
+        l_args = string.split(args,',')
+        if len(l_args) != nb_args:
+            raise InterpreteurException,"La fonction %s requiert %d arguments : %d fourni(s)" %(nom_fonction,nb_args,len(l_args))
+        else:
+            return l_args
+
+    def get_type(self,texte):
+        """
+        Retourne le type de l'objet défini dans texte, à savoir:
+        - constante
+        - fonction
+        - unknown
+        et son nom
+        """
+        texte = string.strip(texte)
+        if '(' not in texte:
+            return 'constante',texte
+        if texte[-1] != ')':
+            return 'unknown',''
+        nom_oper,args = string.split(texte,'(',1)
+        return 'fonction',nom_oper
+
+    def get_nb_args(self,formule):
+        """
+        Retourne le nombre d'arguments dans la définition de formule (sous forme de tuple)
+        """
+        args = formule[2][1:-1] # on enlève les parenthèses ouvrante et fermante
+        l_args = string.split(args,',')
+        return len(l_args)
+
+if __name__ == '__main__':
+    constantes = ['FREQ3','AMOR1']
+    fonctions_unaires=[('ACC','REEL','(REEL:x)','''bidon'''),]
+    f1 = ('f1','REEL','(REEL:x)','''SIN(x)+3*x''')
+    f2 = ('f2','REEL','(REEL:x)','''ATAN(x+3)+3*x''')
+    f3 = ('f3','REEL','(REEL:INST)','''ACC(INST,FREQ3,AMOR1)''')
+    f4 = ('f4','REEL','(REEL:INST)','''ACC(INST,FREQ2,AMOR1)''')
+    f5 = ('f5','REEL','(REEL:INST,REEL:Y)','''ACC(INST,FREQ3,AMOR1)+Y*INST''')
+    f6 = ('f6','REEL','(REEL:x)','''(x+ 3)/ 35.698''')
+    f7 = ('f7','REEL','(REEL:x)','''(x+ 3)/ 35.698E-10''')
+    f8 = ('f8','REEL','(REEL:x)','''(x+ 3)/ 35.698E''')
+    f9 = ('f9','REEL','(REEL:INSTA,REEl:INSTB)','''2.*SIN((PI/4)+((INSTA-INSTB)/2.))* COS((PI/4)-((INSTA+INSTB)/2.))''')
+    f10 = ('f10','REEL','(REEL:X)','''EXP(-(X+1))''')
+    for formule in (f1,f2,f3,f4,f5,f6,f7,f8,f9,f10):
+        i = Interpreteur_Formule(formule = formule,
+                                 constantes = constantes,
+                                 fonctions = fonctions_unaires)
+        txt = i.str()
+        print '\nformule %s = %s' %(str(formule),txt)
+        if i.isvalid() :
+            print "\n\tPas d'erreur !"
+        else:
+            print i.report()
diff --git a/Extensions/jdc.py b/Extensions/jdc.py
new file mode 100644 (file)
index 0000000..8b7cdf2
--- /dev/null
@@ -0,0 +1,18 @@
+"""
+   Ce module contient la classe mixin qui porte les méthodes
+   pour traiter les niveaux au sein d'un JDC
+"""
+import etape_niveau
+
+class JDC:
+  def __init__(self):
+    self.dict_niveaux={}
+    self.build_niveaux()
+
+  def build_niveaux(self):
+    for niveau in self.definition.l_niveaux:
+      etape_niv = etape_niveau.ETAPE_NIVEAU(niveau,self)
+      self.etapes_niveaux.append(etape_niv)
+      self.dict_niveaux[niveau.nom]=etape_niv
+      self.dict_niveaux.update(etape_niv.dict_niveaux)
+
diff --git a/Extensions/mcnuplet.py b/Extensions/mcnuplet.py
new file mode 100644 (file)
index 0000000..da997b6
--- /dev/null
@@ -0,0 +1,172 @@
+"""
+"""
+# Modules Python
+import string
+
+# Modules Eficas
+from Noyau import N_MCCOMPO
+from Validation import V_MCCOMPO
+
+class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
+   """
+   """
+   nature = "MCNUPLET"
+   txt_nat="Nuplet : "
+
+   def __init__(self,val,definition,nom,parent):
+      # val contient la valeur initial du nuplet
+      self.val = val
+      if val == None: self.val=()
+      self.definition=definition
+      self.nom=nom
+      self.parent = parent
+      # GETVAL affecte la valeur par defaut si necessaire
+      self.valeur=self.GETVAL(self.val)
+      if parent :
+         self.jdc = self.parent.jdc
+         self.niveau = self.parent.niveau
+         self.etape = self.parent.etape
+      else:
+         # Le mot cle a été créé sans parent
+         self.jdc = None
+         self.niveau = None
+         self.etape = None
+      self.state = 'undetermined'
+      self.mc_liste=self.build_mc()
+
+   def build_mc(self):
+      """ 
+          Construit la liste des sous-entites de MCNUPLET
+          à partir de la liste des arguments (valeur)
+      """
+      args = self.valeur
+      if args ==None : args =()
+      mc_liste=[]
+
+      # on crée les sous entites du NUPLET a partir des valeurs initiales
+      k=0
+      for v in self.definition.entites:
+        if k < len(args):
+          val=args[k]
+        else:
+          val=None
+        objet=v(val=val,nom=`k`,parent=self)
+        if hasattr(objet.definition,'position'):
+          if objet.definition.position == 'global' :
+            self.append_mc_global(objet)
+          #XXX et global_jdc ??
+        mc_liste.append(objet)
+        k=k+1
+      return mc_liste
+
+   def isvalid(self,cr='non'):
+      """
+          Indique si self (MCNUPLET) est un objet valide ou non : retourne 1 si oui, 0 sinon
+      """
+      if self.state == 'unchanged' :
+        return self.valid
+      else:
+        valid = 1
+        if hasattr(self,'valid'):
+          old_valid = self.valid
+        else:
+          old_valid = None
+        for child in self.mc_liste :
+          if not child.isvalid():
+            valid = 0
+            break
+        if len(self.mc_liste) != len(self.definition.entites):
+          valid=0
+          if cr == 'oui' :
+            self.cr.fatal(string.join(("Nuplet : ",self.nom," Longueur incorrecte")))
+        self.valid = valid
+        self.state = 'unchanged'
+        if old_valid:
+          if old_valid != self.valid : self.init_modif_up()
+        return self.valid
+
+   def __getitem__(self,key):
+      """
+          Retourne le key ème élément du nuplet
+      """
+      # Un nuplet est toujours une liste de mots cles simples
+      # On retourne donc la valeur
+      return self.mc_liste[key].valeur
+
+   def __str__(self):
+      """
+           Retourne une représentation du nuplet sous forme de chaine
+           de caractères
+      """
+      s='('
+      for e in self.mc_liste:
+        s=s + str(e.valeur) + ','
+      return s + ')'
+
+   def __repr__(self):
+      """
+           Retourne une représentation du nuplet sous forme de chaine
+           de caractères
+      """
+      s='('
+      for e in self.mc_liste:
+        s=s + str(e.valeur) + ','
+      return s + ')'
+
+   def get_regles(self):
+      """
+         Retourne la liste des règles attachées au nuplet
+      """
+      return []
+
+   def verif_condition_bloc(self):
+      """
+          Vérifie s'il y a des blocs sous le nuplet et retourne 
+          les blocs en question
+      """
+      # Il n y a pas de BLOCs sous un NUPLET
+      return [],[]
+
+   def isrepetable(self):
+      """ 
+          Indique si le NUPLET peut etre répété.
+          Retourne 1 si c'est le cas.
+          Retourne 0 dans le cas contraire.
+          L'information est donnée par le catalogue, cad la définition de self
+      """
+      if self.definition.min != self.definition.max :
+        return 1
+      else :
+        return 0
+
+   def makeobjet(self):
+      return self.definition(val = None, nom = self.nom,parent = self.parent)
+
+   def get_valeur(self):
+      """
+          Cette méthode doit retourner la valeur de l'objet. Elle est utilisée par 
+          cree_dict_valeurs pour construire un dictionnaire contenant les mots clés 
+          d'une étape.
+          Dans le cas d'un nuplet, on retournera comme valeur une liste des valeurs
+          des mots clé simples contenus.
+      """
+      l=[]
+      for v in self.mc_liste:
+         l.append(v.valeur)
+      return l
+
+   def get_val(self):
+      """
+          Une autre méthode qui retourne une "autre" valeur du mot clé facteur.
+          Elle est utilisée par la méthode get_mocle
+      """
+      l=[]
+      for v in self.mc_liste:
+         l.append(v.valeur)
+      return l
+
+   def isoblig(self):
+      return self.definition.statut=='o'
+
+
+
diff --git a/Extensions/niveau.py b/Extensions/niveau.py
new file mode 100644 (file)
index 0000000..b5df8fd
--- /dev/null
@@ -0,0 +1,30 @@
+"""
+    Ce module contient la classe NIVEAU qui sert à définir
+    des groupes de commandes dans le catalogue
+"""
+
+class NIVEAU:
+  def __init__(self,nom='',label='',niveaux=(),valide_vide=1,actif=1):
+    self.nom = nom
+    self.label = label
+    self.statut='o'
+    self.min = 1
+    self.max = 1
+    self.entites = []
+    self.l_noms_entites=[]
+    self.valide_vide = valide_vide
+    self.actif = actif
+    self.d_niveaux = {}
+    self.l_niveaux = niveaux
+    for niveau in niveaux:
+      self.d_niveaux[niveau.nom]=niveau
+      self.d_niveaux.update(niveau.d_niveaux)
+
+  def enregistre(self,commande):
+    self.entites.append(commande)
+    self.l_noms_entites.append(commande.nom)
+
+  def get_liste_cmd(self):
+    self.l_noms_entites.sort()
+    return self.l_noms_entites
+
diff --git a/Extensions/nuplet.py b/Extensions/nuplet.py
new file mode 100644 (file)
index 0000000..63da368
--- /dev/null
@@ -0,0 +1,99 @@
+"""
+    Ce module contient la classe de définition pour les nuplets NUPL
+"""
+# Modules Python
+import types
+
+# Modules Eficas
+from Noyau import N_ENTITE,N_MCLIST,N_CR
+import mcnuplet
+
+class NUPL(N_ENTITE.ENTITE):
+   """
+   """
+   class_instance = mcnuplet.MCNUPLET
+   list_instance = N_MCLIST.MCList
+   label='NUPLET'
+   CR=N_CR.CR
+
+   def __init__(self,fr="",ang="",docu="",statut='f',defaut=None,min=0,max=1,
+                    elements=None):
+      N_ENTITE.ENTITE.__init__(self)
+      self.fr=fr
+      self.ang=ang
+      self.docu=docu
+      self.statut=statut
+      self.defaut=defaut
+      self.min=min
+      self.max=max
+      self.entites=elements
+      self.regles=()
+      # on force le statut des sous entites a obligatoire
+      for e in elements:e.statut='o'
+      self.idracine="NUPLET"
+      self.affecter_parente()
+
+   def verif_cata(self):
+      """
+          Cette methode sert à valider les attributs de l'objet de définition
+          de la classe NUPL
+      """
+      if type(self.min) != types.IntType :
+        if self.min != '**':
+          self.cr.fatal("L'attribut 'min' doit être un entier : "+`self.min`)
+      if type(self.max) != types.IntType :
+        if self.max != '**' :
+          self.cr.fatal("L'attribut 'max' doit être un entier : "+`self.max`)
+      if self.min > self.max :
+         self.cr.fatal("Nombres d'occurrence min et max invalides : %s %s" %(`self.min`,`self.max`))
+      if type(self.fr) != types.StringType :
+        self.cr.fatal("L'attribut 'fr' doit être une chaîne de caractères : %s" +`self.fr`)
+      if self.statut not in ['o','f','c','d']:
+        self.cr.fatal("L'attribut 'statut' doit valoir 'o','f','c' ou 'd' : %s" %`self.statut`)
+      if type(self.docu) != types.StringType :
+        self.cr.fatal("L'attribut 'docu' doit être une chaîne de caractères : %s" %`self.docu`)
+      self.verif_cata_regles()
+
+   def __call__(self,val,nom,parent):
+      """
+         Construit la structure de donnees pour un NUPLET a partir de sa definition (self)
+         de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent)
+      """
+      if (type(val) == types.TupleType or type(val) == types.ListType) and type(val[0]) == types.TupleType:
+        # On est en presence d une liste de nuplets
+        l=self.list_instance()
+        l.init(nom=nom,parent=parent)
+        for v in val:
+          objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent)
+          l.append(objet)
+        return l
+      else:
+        # on est en presence d un seul nuplet
+        return self.class_instance(nom=nom,definition=self,val=val,parent=parent)
+
+   def report(self):
+      """ 
+           Méthode qui crée le rapport de vérification du catalogue du nuplet 
+      """
+      self.cr = self.CR()
+      self.verif_cata()
+      for v in self.entites :
+        cr = v.report()
+        cr.debut = "Début "+v.__class__.__name__+ ' : '
+        cr.fin = "Fin "+v.__class__.__name__+ ' : '
+        self.cr.add(cr)
+      return self.cr
+
+   def affecter_parente(self):
+      """
+          Cette methode a pour fonction de donner un nom et un pere aux
+          sous entités qui n'ont aucun moyen pour atteindre leur parent 
+          directement
+          Il s'agit principalement des mots cles
+      """
+      k=0
+      for v in self.entites:
+        v.pere = self
+        v.nom = str(k)
+        k=k+1
+
diff --git a/Extensions/parametre.py b/Extensions/parametre.py
new file mode 100644 (file)
index 0000000..94f028f
--- /dev/null
@@ -0,0 +1,256 @@
+"""
+    Ce module contient la classe PARAMETRE qui sert à définir
+    des objets paramètres qui sont compréhensibles et donc affichables
+    par EFICAS.
+    Ces objets sont créés à partir de la modification du fichier de commandes
+    de l'utilisateur par le parseur de fichiers Python
+"""
+
+# import de modules Python
+import string,types
+
+# import de modules Eficas
+from Noyau.N_CR import CR
+
+class PARAMETRE :
+  """
+     Cette classe permet de créer des objets de type PARAMETRE
+     cad des affectations directes dans le jeu de commandes (ex: a=10.)
+     qui sont interprétées par le parseur de fichiers Python.
+     Les objets ainsi créés constituent des paramètres pour le jdc
+  """
+
+  nature = 'PARAMETRE'
+  idracine = 'param'
+
+  def __init__(self,nom,valeur=None):
+    # parent ne peut être qu'un objet de type JDC
+    self.valeur = self.interprete_valeur(valeur)
+    self.val=valeur
+    self.nom = nom
+    # La classe PARAMETRE n'a pas de définition : on utilise self pour
+    # complétude
+    self.definition=self
+    self.jdc = self.parent = CONTEXT.get_current_step()
+    self.niveau=self.parent.niveau
+    self.register()
+
+  def interprete_valeur(self,val):
+    """
+    Essaie d'interpréter val (chaîne de caractères)comme :
+    - un entier
+    - un réel
+    - une chaîne de caractères
+    - une liste d'items d'un type qui précède
+    Retourne la valeur interprétée
+    """
+    if not val : return None
+    valeur = None
+    #  on vérifie si val est un entier
+    try :
+        valeur = string.atoi(val)       # on a un entier
+        return valeur
+    except :
+        pass
+    #  on vérifie si val est un réel
+    try:
+        valeur = string.atof(val)   # on a un réel
+        return valeur
+    except :
+        pass
+    # on vérifie si val est un tuple
+    try :
+        valeur = eval(val)
+    except:
+        pass
+    if valeur != None :
+        if type(valeur) == types.TupleType:
+            l_new_val = []
+            typ = None
+            for v in valeur :
+                if not typ:
+                    typ = type(v)
+                else:
+                    if type(v) != typ :
+                        # la liste est hétérogène --> on refuse d'interpréter
+                        #  self comme une liste
+                        # on retourne la string initiale
+                        print 'liste hétérogène ',val
+                        return val
+                l_new_val.append(v)
+            return tuple(l_new_val)
+        else:
+            # on a réussi à évaluer val en autre chose qu'un tuple ...
+            print "on a réussi à évaluer %s en autre chose qu'un tuple ..." %val
+            print 'on trouve : ',str(valeur),' de type : ',type(valeur)
+    # on retourne val comme une string car on n'a pas su l'interpréter
+    return val
+
+  def set_valeur(self,new_valeur):
+    """
+    Remplace la valeur de self par new_valeur interprétée
+    """
+    self.valeur = self.interprete_valeur(new_valeur)
+    self.init_modif()
+
+  def init_modif(self):
+    """
+    Méthode qui déclare l'objet courant comme modifié et propage
+    cet état modifié à ses ascendants
+    """
+    self.state = 'modified'
+    if self.parent:
+      self.parent.init_modif()
+
+  def register(self):
+    """
+    Enregistre le paramètre dans la liste des étapes de son parent (JDC)
+    """
+    self.parent.register_parametre(self)
+    self.parent.register(self)
+
+  def isvalid(self,cr='non'):
+    """
+    Retourne 1 si self est valide, 0 sinon
+    Un paramètre est considéré comme valide si :
+    - il a un nom
+    - il a une valeur
+    """
+    if self.nom == '' :
+        if cr == 'oui':
+           self.cr.fatal("Pas de nom donné au paramètre ")
+        return 0
+    else:
+        if self.valeur == None :
+            if cr == 'oui' : 
+               self.cr.fatal("Le paramètre %s ne peut valoir None" % self.nom)
+            return 0
+    return 1
+
+  def isoblig(self):
+    """
+    Indique si self est obligatoire ou non : retourne toujours 0
+    """
+    return 0
+
+  def isrepetable(self):
+    """
+    Indique si self est répétable ou non : retourne toujours 1
+    """
+    return 1
+
+  def liste_mc_presents(self):
+    return []
+
+  def supprime(self):
+    """
+    Méthode qui supprime toutes les boucles de références afin que 
+    l'objet puisse être correctement détruit par le garbage collector
+    """
+    self.parent = None
+    self.jdc = None
+    self.definition=None
+
+  def active(self):
+    """
+    Rend l'etape courante active.
+    Il faut ajouter le paramètre au contexte global du JDC
+    """
+    self.actif = 1
+    try:
+        self.jdc.append_param(self)
+    except:
+        pass
+
+  def inactive(self):
+    """
+    Rend l'etape courante inactive
+    Il faut supprimer le paramètre du contexte global du JDC
+    """
+    self.actif = 0
+    self.jdc.del_param(self)
+    self.jdc.delete_concept_after_etape(self,self)
+
+  def isactif(self):
+    """
+    Booléenne qui retourne 1 si self est actif, 0 sinon
+    """
+    return self.actif
+
+  def set_attribut(self,nom_attr,new_valeur):
+    """
+    Remplace la valeur de self.nom_attr par new_valeur)
+    """
+    if hasattr(self,nom_attr):
+      setattr(self,nom_attr,new_valeur)
+      self.init_modif()
+
+  def supprime_sdprods(self):
+    """
+    Il faut supprimer le paramètre qui a été entré dans la liste des
+    paramètres du JDC
+    """
+    self.jdc.delete_param(self)
+
+  def update_context(self,d):
+    """
+    Update le dictionnaire d avec le paramètre que produit self
+    """
+    d[self.nom]=self
+
+  def __repr__(self):
+    """
+        Donne un echo de self sous la forme nom = valeur
+    """
+    return self.nom+' = '+str(self.valeur)+'\n'
+
+  def __str__(self):
+    """
+        Retourne le nom du paramètre comme représentation de self
+    """
+    return self.nom
+
+  def get_sdprods(self,nom_sd):
+     """
+         Retourne les concepts produits par la commande
+     """
+     return None
+
+  def report(self):
+    """ Génère l'objet rapport (classe CR) """
+    self.cr=CR()
+    self.isvalid(cr='oui')
+    return self.cr
+
+  def ident(self):
+    """
+    Retourne le nom interne associé à self
+    Ce nom n'est jamais vu par l'utilisateur dans EFICAS
+    """
+    return self.nom
+
+  def delete_concept(self,sd):
+    pass
+
+  def verif_condition_bloc(self):
+    """
+        Evalue les conditions de tous les blocs fils possibles
+        (en fonction du catalogue donc de la définition) de self et
+        retourne deux listes :
+        - la première contient les noms des blocs à rajouter
+        - la seconde contient les noms des blocs à supprimer
+    """
+    return [],[]
+
+  def verif_condition_regles(self,liste_presents):
+    """
+        Retourne la liste des mots-clés à rajouter pour satisfaire les règles
+        en fonction de la liste des mots-clés présents
+    """
+    return []
+
+
+
+
+
+
diff --git a/Extensions/parametre_eval.py b/Extensions/parametre_eval.py
new file mode 100644 (file)
index 0000000..73bf9bd
--- /dev/null
@@ -0,0 +1,211 @@
+"""
+Ce module contient la classe PARAMETRE_EVAL qui sert à définir
+des objets paramètres qui sont compréhensibles et donc affichables
+par EFICAS.
+Ces objets sont créés à partir de la modification du fichier de commandes
+de l'utilisateur par le parseur de fichiers Python
+"""
+# import de modules Python
+import string,types,re
+import traceback
+
+# import modules Eficas
+import Accas
+import interpreteur_formule
+from Noyau.N_CR import CR
+import parametre
+
+pattern_eval       = re.compile(r'^(EVAL)([ \t\r\f\v]*)\(([\w\W]*)')
+
+class PARAMETRE_EVAL(parametre.PARAMETRE) :
+  """
+  Cette classe permet de créer des objets de type PARAMETRE_EVAL
+  cad des affectations directes évaluées dans le jeu de commandes
+              (ex: a=EVAL('''10.*SQRT(25)'''))
+  qui sont interprétées par le parseur de fichiers Python.
+  Les objets ainsi créés constituent des paramètres évalués pour le jdc
+  """
+  nature = 'PARAMETRE_EVAL'
+  idracine='param_eval'
+
+  def __init__(self,nom,valeur=None):
+    # parent ne peut être qu'un objet de type JDC
+    self.valeur = self.interprete_valeur(valeur)
+    self.val    = valeur
+    self.nom = nom
+    self.jdc = self.parent = CONTEXT.get_current_step()
+    self.definition=self
+    self.niveau = self.parent.niveau
+    # Ceci est-il indispensable ???
+    #self.appel = N_utils.callee_where(niveau=2)
+    self.register()
+
+  def __repr__(self):
+    """
+        Donne un echo de self sous la forme nom = valeur
+    """
+    return self.nom+' = '+ repr(self.valeur) + '\n'
+
+  def __str__(self):
+    """
+        Retourne le nom du paramètre évalué comme représentation de self
+    """
+    return self.nom
+
+  def interprete_valeur(self,val):
+    """
+    Essaie d'interpréter val (chaîne de caractères ou None) comme :
+    une instance de Accas.EVAL
+    Retourne la valeur interprétée
+    """
+    if not val : return None
+    d={}
+    d['EVAL'] = Accas.EVAL
+    try:
+        valeur = eval(val,{},d)
+        return valeur
+    except:
+        traceback.print_exc()
+        print "Le texte %s n'est pas celui d'un paramètre évalué" %val
+        return None
+
+  def set_valeur(self,new_valeur):
+    """
+    Remplace la valeur de self par new_valeur interprétée.
+    """
+    self.valeur = self.interprete_valeur(new_valeur)
+    self.val = new_valeur
+    self.init_modif()
+
+  def get_nom(self) :
+    """
+    Retourne le nom du paramètre
+    """
+    return self.nom
+
+  def get_valeur(self):
+    """
+    Retourne la valeur de self, cad le texte de l'objet class_eval.EVAL
+    """
+    if self.valeur :
+        return self.valeur.valeur
+    else:
+        return ''
+
+  def verif_eval(self,exp_eval=None,cr='non'):
+    """
+    Cette méthode a pour but de vérifier si l'expression EVAL
+    est syntaxiquement correcte.
+    Retourne :
+        - un booléen, qui vaut 1 si licite, 0 sinon
+        - un message d'erreurs ('' si illicite)
+    """
+    if not exp_eval:
+        if self.valeur :
+            exp_eval = self.valeur.valeur[3:-3] # on enlève les triples guillemets
+        else:
+            exp_eval = None
+    if exp_eval :
+        # on construit un interpréteur de formule
+        formule=(self.nom,'',None,exp_eval)
+        # on récupère la liste des constantes et des autres fonctions prédéfinies
+        # et qui peuvent être utilisées dans le corps de la formule courante
+        l_ctes,l_form = self.jdc.get_parametres_fonctions_avant_etape(self)
+        # on crée un objet vérificateur
+        verificateur = interpreteur_formule.Interpreteur_Formule(formule=formule,
+                                                                 constantes = l_ctes,
+                                                                 fonctions = l_form)
+        if cr == 'oui' :
+          if not verificateur.cr.estvide():
+            self.cr.fatal(verificateur.cr.get_mess_fatal())
+        return verificateur.isvalid(),string.join(verificateur.cr.crfatal)
+    else:
+        # pas d'expression EVAL --> self non valide
+        if cr == 'oui' : 
+           self.cr.fatal("Le paramètre EVAL %s ne peut valoir None" % self.nom)
+        return 0,"Le paramètre EVAL ne peut valoir None"
+
+  def verif_nom(self,nom=None,cr='non'):
+    """
+    Vérifie si le nom passé en argument (si aucun prend le nom courant)
+    est un nom valide pour un paramètre EVAL
+    Retourne :
+        - un booléen, qui vaut 1 si nom licite, 0 sinon
+        - un message d'erreurs ('' si illicite)
+    """
+    if not nom :
+        nom = self.nom
+    if nom == "" :
+        if cr == 'oui' : self.cr.fatal("Pas de nom donné au paramètre EVAL")
+        return 0,"Pas de nom donné au paramètre EVAL"
+    if len(nom) > 8 :
+        if cr == 'oui' : self.cr.fatal("Un nom de paramètre ne peut dépasser 8 caractères")
+        return 0,"Un nom de paramètre ne peut dépasser 8 caractères"
+    sd = self.parent.get_sd_autour_etape(nom,self)
+    if sd :
+        if cr == 'oui' : self.cr.fatal("Un concept de nom %s existe déjà !" %nom)
+        return 0,"Un concept de nom %s existe déjà !" %nom
+    return 1,''
+
+  def verif_parametre_eval(self,param=None,cr='non'):
+    """
+    Vérifie la validité du paramètre EVAL passé en argument.
+    Ce nouveau paramètre est passé sous la forme d'un tuple :
+                (nom,valeur)
+    Si aucun tuple passé, prend les valeurs courantes de l'objet
+    Retourne :
+            - un booléen, qui vaut 1 si EVAL licite, 0 sinon
+            - un message d'erreurs ('' si illicite)
+    """
+    if not param :
+        if self.valeur :
+            param = (self.nom,self.valeur.valeur)
+        else:
+            param = (self.nom,None)
+    test_nom,erreur_nom   = self.verif_nom(param[0],cr=cr)
+    test_eval,erreur_eval = self.verif_eval(param[1],cr=cr)
+    # test global = produit des tests partiels
+    test = test_nom*test_eval
+    # message d'erreurs global = concaténation des messages partiels
+    erreur = ''
+    if not test :
+        for mess in (erreur_nom,erreur_eval):
+            erreur = erreur+(len(mess) > 0)*'\n'+mess
+    return test,erreur
+
+  def update(self,param):
+    """
+    Méthode externe.
+    Met à jour les champs nom, valeur de self
+    par les nouvelles valeurs passées dans le tuple formule.
+    On stocke les valeurs SANS vérifications.
+    """
+    self.init_modif()
+    self.set_nom(param[0])
+    self.set_valeur('EVAL("""'+param[1]+'""")')
+
+  def isvalid(self,cr='non'):
+    """
+    Retourne 1 si self est valide, 0 sinon
+    Un paramètre évalué est considéré comme valide si :
+    - il a un nom
+    - il a une valeur qui est interprétable par l'interpréteur de FORMULEs
+    """
+    resu,erreur= self.verif_parametre_eval(cr=cr)
+    return resu
+
+  def report(self):
+    """
+        Génère l'objet rapport (classe CR)
+    """
+    self.cr = CR()
+    self.isvalid(cr='oui')
+    return self.cr
+
+  def set_nom(self,new_nom):
+    """
+    Remplace le nom de self par new_nom
+    """
+    self.nom = new_nom
+
+
diff --git a/Extensions/pluginloader.py b/Extensions/pluginloader.py
new file mode 100644 (file)
index 0000000..659027d
--- /dev/null
@@ -0,0 +1,49 @@
+"""
+    Ce module contient le chargeur dynamique de plugins (emprunté à HappyDoc)
+"""
+
+import glob,os,sys,traceback
+import UserDict
+
+class PluginLoader(UserDict.UserDict):
+   def __init__(self,module):
+      UserDict.UserDict.__init__(self)
+      self.plugin_dir=module.__path__[0]
+      self.plugin_set_name=module.__name__
+      _module_list = glob.glob( os.path.join( self.plugin_dir,
+                              '%s*py' % self.plugin_set_name,
+                                           )
+                              )
+      _module_list.sort()
+
+      for _module_name in _module_list:
+
+        _module_name = os.path.basename(_module_name)[:-3]
+        _import_name = '%s.%s' % ( self.plugin_set_name,
+                                   _module_name )
+
+        try:
+          _module = __import__( _import_name )
+        except:
+          sys.stderr.write('\n--- Plugin Module Error ---\n')
+          traceback.print_exc()
+          sys.stderr.write('---------------------------\n\n')
+          continue
+        try:
+          _module = getattr(_module, _module_name)
+        except AttributeError:
+          sys.stderr.write('ERROR: Could not retrieve %s\n' % _import_name)
+
+        try:
+          info = _module.entryPoint()
+        except AttributeError:
+          pass
+        else:
+          self.addEntryPoint(info)
+
+
+   def addEntryPoint(self,infoDict):
+      name=infoDict['name']
+      factory=infoDict['factory']
+      self[name]=factory
+
diff --git a/Ihm/I_A_CLASSER.py b/Ihm/I_A_CLASSER.py
new file mode 100644 (file)
index 0000000..16853f5
--- /dev/null
@@ -0,0 +1,32 @@
+"""
+"""
+
+import string
+
+import I_REGLE
+
+class A_CLASSER(I_REGLE.REGLE):
+  def gettext(self):
+    text = 'Règle ' + self.__class__.__name__+ ' :\n'
+    t="  D'abord :\n"+' '*8
+    for arg in self.args0:
+      t=t+string.strip(arg)+' ou '
+    text = text + t[0:-4] +'\n'
+    t = "  Ensuite :\n"+' '*8
+    for arg in self.args1:
+      t=t+string.strip(arg)+' ou '
+    text = text + t[0:-4] +'\n'
+    return text
+
+  def init_couples_permis(self):
+    """ 
+       Crée la liste des couples permis parmi les self.args, 
+       càd pour chaque élément de self.args0 crée tous les couples possibles 
+       avec un élément de self.args1
+    """
+    liste = []
+    for arg0 in self.args0:
+      for arg1 in self.args1:
+        liste.append((arg0,arg1))
+    self.liste_couples = liste
+
diff --git a/Ihm/I_ENTITE.py b/Ihm/I_ENTITE.py
new file mode 100644 (file)
index 0000000..3a070e1
--- /dev/null
@@ -0,0 +1,12 @@
+class ENTITE:
+  def get_docu(self):
+    if hasattr(self,'docu') :
+      if self.docu != "" : return self.docu
+      else:
+        if hasattr(self,'pere'):
+          return self.pere.get_docu()
+        else:
+          return None
+    else:
+      return None
+
diff --git a/Ihm/I_ETAPE.py b/Ihm/I_ETAPE.py
new file mode 100644 (file)
index 0000000..8937c11
--- /dev/null
@@ -0,0 +1,272 @@
+"""
+"""
+# Modules Python
+import string,types
+from copy import copy
+
+# Modules EFICAS
+import I_MCCOMPO
+
+class ETAPE(I_MCCOMPO.MCCOMPO):
+
+   def __init__(self):
+      self.niveau=self.jdc
+
+   def ident(self):
+      return self.nom
+
+   def get_fr(self):
+      """ 
+         Retourne l'attribut fr de self.definition 
+      """
+      try:
+         return self.definition.fr
+      except:
+         return ''
+
+   def get_sdname(self):
+      if CONTEXT.debug : print "SDNAME ",self.reuse,self.sd,self.sd.get_name()
+      if self.reuse != None:
+        sdname= self.reuse.get_name()
+      else:
+        sdname=self.sd.get_name()
+      if string.find(sdname,'sansnom') != -1 or string.find(sdname,'SD_') != -1:
+        # dans le cas où la SD est 'sansnom' ou 'SD_' on retourne la chaîne vide
+        return ''
+      return sdname
+
+   def is_reentrant(self):
+      """ 
+          Indique si la commande est reentrante
+      """
+      return self.definition.reentrant == 'o' 
+
+   def init_modif(self):
+      """
+         Met l'état de l'étape à : modifié
+         Propage la modification au parent
+         Si la fonction op_init existe, l'active
+      """
+      # Une action
+      # doit etre realisée apres init_modif et la validite reevaluée
+      # apres cette action. L'état modified de tous les objets doit etre
+      # preservé.
+      self.state = 'modified'
+      if self.parent:
+        self.parent.init_modif()
+
+   def fin_modif(self):
+      """
+          Méthode appelée une fois qu'une modification a été faite afin de 
+          déclencher d'éventuels traitements post-modification
+          ex : INCLUDE et POURSUITE
+      """
+      if self.isvalid() :
+         if type(self.definition.op_init) == types.FunctionType :
+            apply(self.definition.op_init,(self,self.master.g_context))   
+      self.state = 'modified'
+    
+   def nomme_sd(self,nom) :
+      """
+          Cette méthode a pour fonction de donner un nom (nom) au concept 
+          produit par l'étape (self).
+          - si le concept n'existe pas, on essaye de le créer (à condition que l'étape soit valide ET non réentrante)
+          - si il existe déjà, on le renomme et on répercute les changements dans les autres étapes    
+          Les valeurs de retour sont :
+           0 si le nommage n'a pas pu etre mené à son terme,
+           1 dans le cas contraire
+      """
+      if len(nom) > 8 and self.jdc.definition.code == 'ASTER':
+        return 0,"Nom de concept trop long (maxi 8 caractères)"
+      self.init_modif()
+      # Cas particulier des opérateurs réentrants
+      if not self.isvalid(sd='non') : return 0,"Nommage du concept refusé : l'opérateur n'est pas valide"
+      if self.definition.reentrant == 'o':
+        self.sd = self.reuse = self.jdc.get_sdprod(nom)
+        if self.sd != None :
+          return 1,"Concept existant"
+        else:
+          return 0,"Opérateur réentrant mais concept non existant"
+      if self.definition.reentrant == 'f' :
+        sd = self.jdc.get_sd_avant_etape(nom,self)
+        if sd != None :
+          self.sd = self.reuse = sd
+          return 1,"Opérateur facultativement réentrant et concept existant trouvé"
+        else :
+          # il faut éventuellement enlever le lien vers une SD existante car si on passe ici
+         # cela signifie que l'opérateur n'est pas utilisé en mode réentrant.
+         # Si on ne fait pas cela, le nom de l'opérateur réutilisé est aussi modifié
+         # et on ne peut plus modifier la SD de l'opérateur
+         if self.reuse :
+            self.sd = self.reuse = None
+      # l'opérateur n'est pas réentrant ou facultativement reentrant mais pas dans ce cas
+      if self.sd == None :
+          if self.parent.get_sd_autour_etape(nom,self):
+            # On force self.valid a 0 car l appel a isvalid precedent l a mis a 1
+            # mais ceci indique seulement une validité partielle
+            # isvalid ne devrait peut etre pas mettre l attribut valid à 1 si sd == 'non'
+            self.valid=0
+            return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
+          # Il n'existe pas de sd de nom sdnom. On peut donc créer le concept retourné.
+          # Il est créé sans nom mais enregistré dans la liste des concepts existants
+          self.get_sd_prod()
+          self.sd.nom = nom
+          return 1,"Nommage du concept effectué"
+      else :
+        old_nom=self.sd.nom
+        if string.find(old_nom,'sansnom') :
+           # Dans le cas où old_nom == sansnom, isvalid retourne 0 alors que ...
+          # par contre si le concept existe et qu'il s'appelle sansnom c'est que l'étape est valide
+          # on peut donc le nommer sans test préalable
+          self.sd.nom=nom
+           return 1,"Nommage du concept effectué"
+        if self.isvalid() :
+          # Normalement l appel de isvalid a mis a jour le concept produit (son type)
+          # Il suffit de spécifier l attribut nom de sd pour le nommer si le nom n est pas
+          # deja attribué
+          if self.parent.get_sd_autour_etape(nom,self):
+            return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
+          else:
+            self.sd.nom=nom
+            return 1,"Nommage du concept effectué"
+        else:
+          # Normalement on ne devrait pas passer ici
+          return 0,'Normalement on ne devrait pas passer ici'
+
+   def get_sdprods(self,nom_sd):
+      """ 
+         Fonction : retourne le concept produit par l etape de nom nom_sd
+                    s il existe sinon None
+      """
+      if self.sd:
+        if self.sd.nom == nom_sd:return self.sd
+
+   def active(self):
+      """
+          Rend l'etape courante active.
+          Il faut ajouter la sd si elle existe au contexte global du JDC
+          et à la liste des sd
+      """
+      self.actif = 1
+      if not self.sd : return
+      # XXX Pourquoi faut-il faire ce qui suit ??? par defaut les etapes sont actives
+      try:
+        self.jdc.append_sdprod(self.sd)
+      except:
+        pass
+
+   def inactive(self):
+      """
+          Rend l'etape courante inactive
+          Il faut supprimer la sd du contexte global du JDC
+          et de la liste des sd
+      """
+      self.actif = 0
+      if not self.sd : return
+      self.jdc.del_sdprod(self.sd)
+      self.jdc.delete_concept_after_etape(self,self.sd)
+
+   def supprime_sdprods(self):
+      """ 
+          Fonction:
+            Lors d'une destruction d'etape, detruit tous les concepts produits
+            Un opérateur n a qu un concept produit 
+            Une procedure n'en a aucun
+            Une macro en a en général plus d'un
+      """
+      # XXX pour les macros il faudrait peut etre aussi 
+      #     supprimer les concepts a droite du = ???
+      if not self.is_reentrant() :
+        # l'étape n'est pas réentrante
+        # le concept retourné par l'étape est à supprimer car il était 
+        # créé par l'étape
+        if self.sd != None :
+          self.parent.del_sdprod(self.sd)
+          self.parent.delete_concept(self.sd)
+
+   def delete_concept(self,sd):
+      """ 
+          Inputs :
+             sd=concept detruit
+          Fonction :
+             Mettre a jour les mots cles de l etape et eventuellement 
+             le concept produit si reuse
+             suite à la disparition du concept sd
+             Seuls les mots cles simples MCSIMP font un traitement autre 
+             que de transmettre aux fils
+      """
+      if self.reuse and self.reuse == sd:
+        self.sd=self.reuse=None
+        self.init_modif()
+      for child in self.mc_liste :
+        child.delete_concept(sd)
+
+   def make_register(self):
+      """
+         Initialise les attributs jdc, id, niveau et réalise les
+         enregistrements nécessaires
+         Pour EFICAS, on tient compte des niveaux
+      """
+      if self.parent :
+         self.jdc = self.parent.get_jdc_root()
+         self.id=   self.parent.register(self)
+         if self.definition.niveau :
+            # La définition est dans un niveau. En plus on
+            # l'enregistre dans le niveau
+            self.nom_niveau_definition = self.definition.niveau.nom
+            self.niveau = self.parent.dict_niveaux[self.nom_niveau_definition]
+            self.niveau.register(self)
+         else:
+            # La définition est au niveau global
+            self.nom_niveau_definition = 'JDC'
+            self.niveau=self.parent
+      else:
+         self.jdc = self.parent =None
+         self.id=None
+         self.niveau=None
+
+   def copy(self):
+      """ Méthode qui retourne une copie de self non enregistrée auprès du JDC
+          et sans sd 
+      """
+      etape = copy(self)
+      etape.sd = None
+      etape.state = 'modified'
+      etape.reuse = None
+      etape.sdnom = None
+      etape.mc_liste=[]
+      for objet in self.mc_liste:
+        new_obj = objet.copy()
+        etape.mc_liste.append(new_obj)
+      return etape
+
+   def get_noms_sd_oper_reentrant(self):
+      """ 
+          Retourne la liste des noms de concepts utilisés à l'intérieur de la commande
+          qui sont du type que peut retourner cette commande 
+      """
+      liste_sd = self.get_sd_utilisees()
+      l_noms = []
+      if type(self.definition.sd_prod) == types.FunctionType:
+        d=self.cree_dict_valeurs(self.mc_liste)
+        try:
+          classe_sd_prod = apply(self.definition.sd_prod,(),d)
+        except:
+          return []
+      else:
+        classe_sd_prod = self.definition.sd_prod
+      for sd in liste_sd :
+        if sd.__class__ is classe_sd_prod : l_noms.append(sd.nom)
+      l_noms.sort()
+      return l_noms
+
+   def get_sd_utilisees(self):
+      """ 
+          Retourne la liste des concepts qui sont utilisés à l'intérieur d'une commande
+          ( comme valorisation d'un MCS) 
+      """
+      l=[]
+      for child in self.mc_liste:
+        l.extend(child.get_sd_utilisees())
+      return l
+
diff --git a/Ihm/I_EXCLUS.py b/Ihm/I_EXCLUS.py
new file mode 100644 (file)
index 0000000..e53ead8
--- /dev/null
@@ -0,0 +1,19 @@
+"""
+"""
+
+import I_REGLE
+
+class EXCLUS(I_REGLE.REGLE):
+  def purge_liste(self,liste_a_purger,liste_mc_presents):
+     regle_active=0
+     for mc_present in liste_mc_presents:
+        if mc_present in self.mcs:
+           regle_active=1
+           break
+     if not regle_active : return liste_a_purger
+
+     for mc in self.mcs:
+        if mc in liste_a_purger:
+           liste_a_purger.remove(mc)
+     return liste_a_purger
+
diff --git a/Ihm/I_FORM_ETAPE.py b/Ihm/I_FORM_ETAPE.py
new file mode 100644 (file)
index 0000000..5110016
--- /dev/null
@@ -0,0 +1,244 @@
+"""
+"""
+import string,traceback
+
+from I_MACRO_ETAPE import MACRO_ETAPE
+from Extensions import interpreteur_formule
+from Editeur import analyse_catalogue
+
+analyse_catalogue.l_noms_commandes.append('FORM') # déclare le nom FORM à l'analyseur de catalogue
+
+
+class FORM_ETAPE(MACRO_ETAPE):
+
+    interpreteur = interpreteur_formule.Interpreteur_Formule
+
+    def McBuild(self):
+        self.mc_liste=self.build_mc()
+        # on crée la liste des types autorisés (liste des noms de mots-clés
+        # simples dans le catalogue de FORMULE)
+        self.l_types_autorises = self.definition.entites.keys()
+        # en plus de la construction traditionnelle des fils de self
+        # il faut pour les FORMULE décortiquer l'expression ...
+        self.type_retourne,self.arguments,self.corps = self.analyse_formule()
+
+    def analyse_formule(self):
+        """
+        Cette méthode décortique l'expression de la FORMULE.
+        Elle retourne 3 valeurs:
+            - le type retourné par la FORMULE
+            - les arguments de la FORMULE
+            - le corps de la FORMULE, cad son expression
+        """
+        if len(self.mc_liste) == 0:
+            # pas de fils pour self --> la FORMULE est incomplète
+            return None,None,None
+        child = self.mc_liste[0] # child est un MCSIMP
+        type_retourne = child.definition.nom
+        valeur = child.getval()
+        # c'est dans valeur que se trouvent la liste des arguments et le corps de la fonction
+        try:
+            l_args,corps = string.split(valeur,'=',1)
+        except:
+            # pas de signe = --> la formule est fausse
+            return type_retourne,None,None
+        l_args = string.strip(l_args)
+        corps = string.strip(corps)
+        return type_retourne,l_args,corps
+
+    def get_nom(self):
+        """
+        Retourne le nom de la FORMULE, cad le nom de la SD si elle existe,
+        la string vide sinon
+        """
+        if self.sd :
+            return self.sd.get_name()
+        else:
+            return ''
+
+    def verif_arguments(self,arguments = None):
+        """
+        Vérifie si les arguments passés en argument (si aucun prend les arguments courants)
+        sont des arguments valide pour une FORMULE.
+        Retourne :
+            - un booléen, qui vaut 1 si arguments licites, 0 sinon
+            - un message d'erreurs ('' si illicites)
+        """
+        if not arguments :
+            arguments = self.arguments
+        if not arguments :
+            return 0,"Une formule doit avoir au minimum un argument"
+        # il faut au préalable enlever les parenthèses ouvrantes et fermantes
+        # encadrant les arguments
+        arguments = string.strip(arguments)
+        if arguments[0] != '(':
+            return 0,"La liste des arguments d'une formule doit être entre parenthèses : parenthèse ouvrante manquante"
+        if arguments[-1] != ')':
+            return 0,"La liste des arguments d'une formule doit être entre parenthèses : parenthèse fermante manquante"
+        # on peut tester la syntaxe de chaque argument maintenant
+        erreur=''
+        test = 1
+        arguments = arguments[1:-1] # on enlève les parenthèses ouvrante et fermante
+        l_arguments = string.split(arguments,',')
+        for argument in l_arguments:
+            argument = string.strip(argument)
+            try:
+                typ,nom = string.split(argument,':')
+                # pas de vérification sur le nom de l'argument
+                # vérification du type de l'argument
+                typ = string.strip(typ)
+                if typ not in self.l_types_autorises :
+                    test = 0
+                    erreur = erreur + "Le type "+typ+" n'est pas un type permis pour "+nom+'\n'
+            except:
+                # l'argument ne respecte pas la syntaxe : typ_arg : nom_arg
+                test = 0
+                erreur = erreur+"Syntaxe argument non valide : "+argument+'\n'
+        return test,erreur
+
+    def verif_corps(self,corps=None,arguments=None):
+        """
+        Cette méthode a pour but de vérifier si le corps de la FORMULE
+        est syntaxiquement correct.
+        Retourne :
+            - un booléen, qui vaut 1 si corps de FORMULE licite, 0 sinon
+            - un message d'erreurs ('' si illicite)
+        """
+        if not corps :
+            corps = self.corps
+       if not arguments :
+           arguments = self.arguments
+        formule=(self.get_nom(),self.type_retourne,arguments,corps)
+        # on récupère la liste des constantes et des autres fonctions prédéfinies
+        # et qui peuvent être utilisées dans le corps de la formule courante
+        l_ctes,l_form = self.jdc.get_parametres_fonctions_avant_etape(self)
+        # on crée un objet vérificateur
+        try:
+            verificateur = self.interpreteur(formule=formule,
+                                             constantes = l_ctes,
+                                             fonctions = l_form)
+        except :
+            traceback.print_exc()
+            return 0,"Impossible de réaliser la vérification de la formule"
+        return verificateur.isvalid(),verificateur.report()
+
+    def verif_nom(self,nom=None):
+        """
+        Vérifie si le nom passé en argument (si aucun prend le nom courant)
+        est un nom valide pour une FORMULE.
+        Retourne :
+            - un booléen, qui vaut 1 si nom licite, 0 sinon
+            - un message d'erreurs ('' si illicite)
+        """
+        if not nom :
+            nom = self.get_nom()
+        if nom == "" :
+            return 0,"Pas de nom donné à la FORMULE"
+        if len(nom) > 8 :
+            return 0,"Un nom de FORMULE ne peut dépasser 8 caractères"
+        sd = self.parent.get_sd_autour_etape(nom,self)
+        if sd :
+            return 0,"Un concept de nom %s existe déjà !" %nom
+        return 1,''
+
+    def verif_type(self,type=None):
+        """
+        Vérifie si le type passé en argument (si aucun prend le type courant)
+        est un type valide pour une FORMULE.
+        Retourne :
+            - un booléen, qui vaut 1 si type licite, 0 sinon
+            - un message d'erreurs ('' si illicite)
+        """
+        if not type:
+            type = self.type_retourne
+        if not type :
+            return 0,"Le type de la valeur retournée n'est pas spécifié"
+        if type not in self.l_types_autorises:
+            return 0,"Une formule ne peut retourner une valeur de type : %s" %type
+        return 1,''
+
+    def verif_formule(self,formule=None):
+        """
+        Vérifie la validité de la formule passée en argument.
+        Cette nouvelle formule est passée sous la forme d'un tuple :
+                (nom,type_retourne,arguments,corps)
+        Si aucune formule passée, prend les valeurs courantes de la formule
+        Retourne :
+            - un booléen, qui vaut 1 si formule licite, 0 sinon
+            - un message d'erreurs ('' si illicite)
+        """
+        if not formule :
+            formule = (None,None,None,None)
+        test_nom,erreur_nom = self.verif_nom(formule[0])
+        test_type,erreur_type = self.verif_type(formule[1])
+        if formule[2]:
+            args = '('+formule[2]+')'
+        else:
+            args = None
+        test_arguments,erreur_arguments = self.verif_arguments(args)
+        test_corps,erreur_corps = self.verif_corps(corps = formule[3], arguments = args)
+        # test global = produit des tests partiels
+        test = test_nom*test_type*test_arguments*test_corps
+        # message d'erreurs global = concaténation des messages partiels
+        erreur = ''
+        if not test :
+            for mess in (erreur_nom,erreur_type,erreur_arguments,erreur_corps):
+                erreur = erreur+(len(mess) > 0)*'\n'+mess
+        return test,erreur
+
+    def update(self,formule):
+        """
+        Méthode externe.
+        Met à jour les champs nom, type_retourne,arguments et corps de la FORMULE
+        par les nouvelles valeurs passées dans le tuple formule.
+        On stocke les valeurs SANS vérifications.
+        """
+        self.init_modif()
+        self.type_retourne = formule[1]
+        self.arguments = '('+formule[2]+')'
+        self.corps = formule[3]
+        # il faut ajouter le mot-clé simple correspondant dans mc_liste
+        # pour cela on utilise la méthode générale build_mc
+        # du coup on est obligé de modifier le dictionnaire valeur de self ...
+        self.valeur = {}
+        self.valeur[self.type_retourne] = self.arguments+' = ' + self.corps
+        self.McBuild()
+        sd = self.get_sd_prod()
+        if sd:
+            sd.nom = formule[0]
+
+    def active(self):
+        """
+        Rend l'etape courante active.
+        Il faut ajouter la formule au contexte global du JDC
+        """
+        self.actif = 1
+        nom = self.get_nom()
+        if nom == '' : return
+        try:
+            self.jdc.append_fonction(self.sd)
+        except:
+            pass
+
+    def inactive(self):
+        """
+        Rend l'etape courante inactive
+        Il faut supprimer la formule du contexte global du JDC
+        """
+        self.actif = 0
+        if not self.sd : return
+        self.jdc.del_fonction(self.sd)
+
+    def delete_concept(self,sd):
+        """ 
+         Inputs :
+           sd=concept detruit
+         Fonction :
+           Mettre a jour les mos cles de l etape et eventuellement le concept produit si reuse
+           suite à la disparition du concept sd
+           Seuls les mots cles simples MCSIMP font un traitement autre que de transmettre aux fils,
+          sauf les objets FORM_ETAPE qui doivent vérifier que le concept détruit n'est pas 
+          utilisé dans le corps de la fonction
+        """
+        self.init_modif()
+         
diff --git a/Ihm/I_JDC.py b/Ihm/I_JDC.py
new file mode 100644 (file)
index 0000000..2c26ab8
--- /dev/null
@@ -0,0 +1,375 @@
+"""
+"""
+# Modules Python
+import types,traceback
+import string,linecache
+
+# Modules Eficas
+import I_OBJECT
+from Noyau.N_ASSD import assd
+from Noyau.N_ETAPE import ETAPE
+from Noyau.N_CO import CO
+from Noyau.N_Exception import AsException
+from Extensions import commentaire,parametre,parametre_eval
+
+class JDC(I_OBJECT.OBJECT):
+   """
+   """
+   def __init__(self):
+      self.editmode=0
+      self.etapes_niveaux=[]
+      self.niveau=self
+      self.params=[]
+      self.fonctions=[]
+
+   def get_cmd(self,nomcmd):
+      """
+          Retourne l'objet de type COMMANDE de nom nomcmd
+      """
+      for cata in self.cata:
+         if hasattr(cata,nomcmd):
+            return getattr(cata,nomcmd)
+
+   def get_sd_avant_du_bon_type(self,etape,types_permis):
+      """
+          Retourne la liste des concepts avant etape d'un type acceptable
+      """
+      d=self.get_contexte_avant(etape)
+      l=[]
+      for k,v in d.items():
+        if type(v) != types.InstanceType : continue
+        if assd in types_permis or CO in types_permis :
+          l.append(k)
+          continue
+        for type_ok in types_permis:
+          if type_ok in ('R','I','C','TXM') and v in self.params : l.append(k)
+          elif type_ok == 'R' and v.__class__.__name__ == 'reel' : l.append(k)
+          elif type_ok == 'I' and v.__class__.__name__ == 'entier' : l.append(k)
+          elif type_ok == 'C' and v.__class__.__name__ == 'complexe' : l.append(k)
+          elif type_ok == 'TXM' and v.__class__.__name__ == 'chaine' : l.append(k)
+          elif type(type_ok) != types.ClassType : continue
+          elif v.__class__ == type_ok or issubclass(v.__class__,type_ok): l.append(k)
+      l.sort()
+      return l
+
+   def addentite(self,name,pos):
+      """
+          Ajoute une entite :
+          Si name est le nom d une commande ou un commentaire ajoute 
+          une etape au JDC
+          Sinon remonte une erreur
+      """
+      self.init_modif()
+      self.editmode=1
+      if name == "COMMENTAIRE" :
+        # ajout d'un commentaire
+        self.set_current_step()
+        ind = 1
+        for child in self.etapes :
+          if isinstance(child,commentaire.COMMENTAIRE):
+            ind = ind+1
+        objet = commentaire.COMMENTAIRE('',parent=self)
+        objet.nom = "_comm_"+`ind`
+        if pos == None : pos = 0
+        self.etapes.insert(pos,objet)
+        self.editmode=0
+        self.active_etapes()
+        return objet
+      elif name == "PARAMETRE":
+        # ajout d'un parametre
+        self.set_current_step()
+        nom_param = '_param_'+str(len(self.params)+1)
+        objet = parametre.PARAMETRE(nom=nom_param)
+        if pos == None : pos = 0
+        self.etapes.insert(pos,objet)
+        self.editmode=0
+        self.active_etapes()
+        return objet
+      elif name == "PARAMETRE_EVAL":
+        # ajout d'un parametre EVAL
+        self.set_current_step()
+        nom_param = '_param_'+str(len(self.params)+1)
+        objet = parametre_eval.PARAMETRE_EVAL(nom=nom_param)
+        if pos == None : pos = 0
+        self.etapes.insert(pos,objet)
+        self.editmode=0
+        self.active_etapes()
+        return objet
+      elif type(name)==types.InstanceType:
+        # on est dans le cas où on veut ajouter une commande déjà 
+        # existante (par copie donc)
+        # on est donc nécessairement en mode editeur ...
+        objet = name
+        objet.jdc = objet.parent = self
+        #XXX current_step n'existe plus. A priori le parent devrait etre self
+        # ainsi que le step courant.
+        #objet.parent = self.current_step
+        self.set_current_step()
+        if isinstance(objet,ETAPE):
+          if objet.nom_niveau_definition == 'JDC':
+            # l'objet dépend directement du JDC
+            objet.niveau = self
+          else:
+            # l'étape dépend d'un niveau et non directement du JDC :
+            # il faut l'enregistrer dans le niveau de parent
+            objet.parent.dict_niveaux[objet.nom_niveau_definition].register(objet)
+            objet.niveau = objet.parent.dict_niveaux[objet.nom_niveau_definition]
+        self.etapes.insert(pos,objet)
+        self.active_etapes()
+        self.editmode=0
+        return objet
+      else :
+        # On veut ajouter une nouvelle commande
+        try:
+          self.set_current_step()
+          cmd=self.get_cmd(name)
+          # L'appel a make_objet n'a pas pour effet d'enregistrer l'étape
+          # auprès du step courant car editmode vaut 1
+          e=cmd.make_objet()
+          if pos == None : pos = 0
+          self.etapes.insert(pos,e)
+          self.reset_current_step()
+          self.editmode=0
+          self.active_etapes()
+          return e
+        except:
+          traceback.print_exc()
+          self.reset_current_step()
+          self.editmode=0
+          raise AsException("Impossible d ajouter la commande "+name)
+
+   def set_current_step(self):
+      CONTEXT.unset_current_step()
+      CONTEXT.set_current_step(self)
+
+   def reset_current_step(self):
+      CONTEXT.unset_current_step()
+
+   def liste_mc_presents(self):
+      return []
+
+   def get_sd_avant_etape(self,nom_sd,etape):
+      return self.get_contexte_avant(etape).get(nom_sd,None)
+
+   def get_sd_apres_etape(self,nom_sd,etape):
+      """ 
+           Cette méthode retourne la SD de nom nom_sd qui est éventuellement
+            définie apres etape
+      """
+      ietap=self.etapes.index(etape)
+      for e in self.etapes[ietap+1:]:
+        sd=e.get_sdprods(nom_sd)
+        if sd:
+          if hasattr(e,'reuse'):
+            if e.reuse != sd:
+              return sd
+      return None
+
+   def get_sd_autour_etape(self,nom_sd,etape):
+      """
+           Fonction: retourne la SD de nom nom_sd qui est éventuellement
+            définie avant ou apres etape
+           Permet de vérifier si un concept de meme nom existe dans le périmètre 
+           d'une étape
+      """
+      sd=self.get_sd_avant_etape(nom_sd,etape)
+      if sd:return sd
+      return self.get_sd_apres_etape(nom_sd,etape)
+
+   def active_etapes(self):
+      """
+          Cette méthode a pour fonction de désactiver les étapes qui doivent
+          l'être cad, dans le cas d'ASTER, les étapes qui ne sont pas 
+          comprises entre le premier DEBUT/POURSUITE et le premier FIN 
+          et rendre actives les autres
+      """
+      if self.definition.code == 'ASTER' :
+         # Seulement pour ASTER :
+         # Avant DEBUT actif vaut 0
+         # Apres DEBUT et avant le 1er FIN actif vaut 1
+         # Apres le 1er FIN actif vaut -1
+         actif=0
+      else:
+         actif=1
+      for etape in self.etapes:
+        if actif == 0 and etape.nom in ['DEBUT','POURSUITE']:actif=1
+        if actif == 1:
+           etape.active()
+        else:
+           etape.inactive()
+        if etape.nom == 'FIN':actif=-1
+
+   def suppentite(self,etape) :
+      """  
+          Cette methode a pour fonction de supprimer une étape dans 
+          un jeu de commandes
+      """
+      self.init_modif()
+      self.etapes.remove(etape)
+      if etape.niveau is not self:
+        # Dans ce cas l'étape est enregistrée dans un niveau
+        # Il faut la désenregistrer
+        etape.niveau.unregister(etape)
+      etape.supprime_sdprods()
+      self.active_etapes()
+
+   def del_sdprod(self,sd):
+      """
+          Supprime la SD sd de la liste des sd et des dictionnaires de contexte
+      """
+      if sd in self.sds : self.sds.remove(sd)
+      if self.g_context.has_key(sd.nom) : del self.g_context[sd.nom]
+
+   def delete_concept(self,sd):
+      """ 
+          Inputs :
+             sd=concept detruit
+          Fonction :
+             Mettre a jour les etapes du JDC suite à la disparition du 
+             concept sd
+             Seuls les mots cles simples MCSIMP font un traitement autre 
+             que de transmettre aux fils
+      """
+      for etape in self.etapes :
+        etape.delete_concept(sd)
+
+   def analyse(self):
+      self.compile()
+      if not self.cr.estvide():return
+      self.exec_compile()
+      self.active_etapes()
+
+   def register(self,etape):
+      """ 
+           Cette méthode ajoute  etape dans la liste
+           des etapes self.etapes et retourne l identificateur d'étape
+           fourni par l appel a g_register
+           A quoi sert editmode ?
+           - Si editmode vaut 1, on est en mode edition de JDC. On cherche 
+           à enregistrer une étape que l'on a créée avec eficas (en passant 
+           par addentite) auquel cas on ne veut récupérer que son numéro 
+           d'enregistrement et c'est addentité qui l'enregistre dans 
+           self.etapes à la bonne place...
+           - Si editmode vaut 0, on est en mode relecture d'un fichier de 
+           commandes et on doit enregistrer l'étape à la fin de self.etapes 
+           (dans ce cas l'ordre des étapes est bien l'ordre chronologique 
+           de leur création   )
+      """
+      if not self.editmode:
+         self.etapes.append(etape)
+      else:
+         pass
+      return self.g_register(etape)
+
+   def register_parametre(self,param):
+      """
+          Cette méthode sert à ajouter un paramètre dans la liste des paramètres
+      """
+      self.params.append(param)
+
+   def delete_param(self,param):
+      """
+          Supprime le paramètre param de la liste des paramètres
+          et du contexte gobal
+      """
+      if param in self.params : self.params.remove(param)
+      if self.g_context.has_key(param.nom) : del self.g_context[param.nom]
+
+   def get_parametres_fonctions_avant_etape(self,etape):
+      """
+          Retourne deux éléments :
+          - une liste contenant les noms des paramètres (constantes ou EVAL) 
+            définis avant etape
+          - une liste contenant les formules définies avant etape
+      """
+      l_constantes = []
+      l_fonctions = []
+      # on récupère le contexte avant etape
+      # on ne peut mettre dans les deux listes que des éléments de ce contexte
+      d=self.get_contexte_avant(etape)
+      # construction de l_constantes
+      for param in self.params:
+        nom = param.nom
+        if not nom : continue
+        if d.has_key(nom): l_constantes.append(nom)
+      # construction de l_fonctions
+      for form in self.fonctions:
+        nom = form.nom
+        if not nom : continue
+        if d.has_key(nom): l_fonctions.append(form.get_formule())
+      # on retourne les deux listes
+      return l_constantes,l_fonctions
+
+   def get_nb_etapes_avant(self,niveau):
+      """ 
+          Retourne le nombre d etapes avant le debut de niveau
+      """
+      nb=0
+      for niv in self.etapes_niveaux:
+        if niv == niveau:break
+        nb=nb+len(niv.etapes)
+      return nb
+
+   def send_message(self,message):
+      if self.appli:
+         self.appli.send_message(message)
+
+#XXX ne semble pas servir pour JDC
+#   def reevalue_sd_jdc(self):
+      #""" 
+          #Avec la liste des SD qui ont été supprimées, propage la disparition de ces
+          #SD dans toutes les étapes et descendants
+      #"""
+      #l_sd = self.diff_contextes()
+      #if len(l_sd) == 0 : return
+      #for sd in l_sd:
+        #self.jdc.delete_concept(sd)
+
+   def init_modif(self):
+      """
+      Méthode appelée au moment où une modification va être faite afin de 
+      déclencher d'éventuels traitements pré-modification
+      """
+      self.state = 'modified'
+
+   def fin_modif(self):
+      pass
+
+   def get_liste_mc_inconnus(self):
+     """
+     Retourne une liste contenant les mots-clés inconnus à la relecture du JDC
+     """
+     # cette liste a le format suivant : [etape,(bloc,mcfact,...),nom_mc,valeur_mc]
+     l_mc = []
+     for etape in self.etapes :
+         if etape.isactif() :
+           if not etape.isvalid() :
+              l = etape.get_liste_mc_inconnus()
+              if l : l_mc.extend(l)
+     return l_mc    
+
+   def get_file(self,unite=None,fic_origine=''):
+      """
+          Retourne le nom du fichier correspondant à un numero d'unité
+          logique (entier) ainsi que le source contenu dans le fichier
+      """
+      if self.appli :
+         # Si le JDC est relié à une application maitre, on délègue la recherche
+         file,text = self.appli.get_file(unite,fic_origine)
+      else:
+         file = None
+         if unite != None:
+            if os.path.exists("fort."+str(unite)):
+               file= "fort."+str(unite)
+         if file == None :
+            raise AsException("Impossible de trouver le fichier correspondant \
+                               a l unite %s" % unite)
+         if not os.path.exists(file):
+            raise AsException("%s n'est pas un fichier existant" % unite)
+         fproc=open(file,'r')
+         text=fproc.read()
+         fproc.close()
+      text=string.replace(text,'\r\n','\n')
+      linecache.cache[file]=0,0,string.split(text,'\n'),file
+      return file,text
+
diff --git a/Ihm/I_JDC_CATA.py b/Ihm/I_JDC_CATA.py
new file mode 100644 (file)
index 0000000..945ced8
--- /dev/null
@@ -0,0 +1,18 @@
+from Noyau import N_JDC_CATA
+
+class JDC_CATA:
+  def __init__(self):
+    self.l_noms_entites=[]
+
+  def enregistre(self,commande):
+    """ 
+        Cette méthode surcharge la méthode de la classe du Noyau
+        Marche avec Noyau mais si un autre package l'a déjà surchargée ???
+    """
+    N_JDC_CATA.JDC_CATA.enregistre(self,commande)
+    self.l_noms_entites.append(commande.nom)
+
+  def get_liste_cmd(self):
+    self.l_noms_entites.sort()
+    return self.l_noms_entites
+
diff --git a/Ihm/I_MACRO_ETAPE.py b/Ihm/I_MACRO_ETAPE.py
new file mode 100644 (file)
index 0000000..be318d2
--- /dev/null
@@ -0,0 +1,148 @@
+"""
+"""
+# Modules Python
+import traceback,types,string
+
+# Modules Eficas
+import I_ETAPE
+from Noyau.N_ASSD import ASSD
+
+class MACRO_ETAPE(I_ETAPE.ETAPE):
+
+  def __init__(self):
+      I_ETAPE.ETAPE.__init__(self)
+
+  def get_sdprods(self,nom_sd):
+    """ 
+         Fonction : retourne le concept produit par l etape de nom nom_sd
+                    s il existe sinon None
+    """
+    if self.sd:
+      if self.sd.nom == nom_sd:
+         return self.sd
+    for co in self.sdprods:
+      if co.nom==nom_sd:return co
+    return None
+
+  def make_contexte(self,fichier,text):    
+    """
+        Cette méthode sert à créer un contexte en interprétant un texte source
+        Python
+    """
+    # on récupère le contexte d'un nouveau jdc dans lequel on interprete text
+    contexte = self.get_contexte_jdc(fichier,text)
+    if contexte == None :
+      raise Exception("Impossible de relire le fichier")
+    else:
+      self.g_context = contexte
+      if hasattr(self,'contexte_fichier_init'):
+        self.old_contexte_fichier_init = self.contexte_fichier_init
+      self.contexte_fichier_init = contexte
+      # XXX la validité ne doit pas etre forcée à 1. Que faut-il faire exactement ???
+      self.init_modif()
+      #self.valid = 1
+      #self.state = 'unchanged'
+
+  def get_contexte_jdc(self,fichier,text):
+    """ 
+         Interprète text comme un texte de jdc et retourne le 
+         contexte final
+         cad le dictionnaire des sd disponibles à la dernière étape
+         Si text n'est pas un texte de jdc valide, retourne None
+         --> utilisée par ops.POURSUITE et INCLUDE
+    """
+    try:
+       # on essaie de créer un objet JDC...
+       context_ini = self.parent.get_contexte_avant(self)
+
+       CONTEXT.unset_current_step()
+       j=self.jdc.definition(procedure=text,cata=self.jdc.cata,
+                             nom=fichier,
+                             context_ini = context_ini,
+                             appli=self.jdc.appli)
+       j.analyse()
+    except:
+       traceback.print_exc()
+       return None
+    CONTEXT.set_current_step(self)
+    if not j.cr.estvide():
+        raise Exception("Impossible de relire le fichier\n"+str(j.cr))
+
+    #XXX la validité d'un source inclus n'est pas identique à celle d'un JDC complet
+    #    impossible de la tester en dehors du JDC d'accueil
+    #cr=j.report()
+    #if not cr.estvide():
+    #    raise Exception("Le fichier contient des erreurs\n"+str(j.cr))
+    j_context=j.get_contexte_avant(None)
+    # XXX j.g_context doit donner le meme résultat
+    # On retourne le contexte apres la derniere etape
+    # XXX j.supprime() ???
+    self.verif_contexte(j_context)
+    # Le contexte est acceptable. On récupère les étapes internes (pour validation)
+    self.etapes=j.etapes
+    return j_context
+
+  def verif_contexte(self,context):
+     """
+         On verifie que le contexte context peut etre inséré dans le jeu
+         de commandes à la position de self
+     """
+     for nom_sd,sd in context.items():
+        if not isinstance(sd,ASSD):continue
+        if self.parent.get_sd_apres_etape(nom_sd,etape=self):
+           # Il existe un concept apres self => impossible d'inserer
+           raise Exception("Impossible d'inclure le fichier. Un concept de nom " + 
+                           "%s existe déjà dans le jeu de commandes." % nom_sd)
+
+  def reevalue_sd_jdc(self):
+     """
+         Avec la liste des SD qui ont été supprimées, propage la 
+         disparition de ces SD dans totues les étapes et descendants
+     """
+     l_sd = self.diff_contextes()
+     if len(l_sd) == 0 : return
+     for sd in l_sd:
+        self.jdc.delete_concept(sd)
+
+  def diff_contextes(self):
+     """ 
+         Réalise la différence entre les 2 contextes 
+         old_contexte_fichier_init et contexte_fichier_init
+         cad retourne la liste des sd qui ont disparu 
+     """
+     if not hasattr(self,'old_contexte_fichier_init'):return []
+     l_sd_suppressed = []
+     for old_key in self.old_contexte_fichier_init.keys():
+       if not self.contexte_fichier_init.has_key(old_key):
+         if isinstance(self.old_contexte_fichier_init[old_key],ASSD):
+           l_sd_suppressed.append(self.old_contexte_fichier_init[old_key])
+     return l_sd_suppressed
+      
+  def supprime_sdprods(self):
+      """
+          Fonction:
+            Lors d'une destruction d'etape, detruit tous les concepts produits
+            Un opérateur n a qu un concept produit
+            Une procedure n'en a aucun
+            Une macro en a en général plus d'un
+      """
+      if not self.is_reentrant() :
+         # l'étape n'est pas réentrante
+         # le concept retourné par l'étape est à supprimer car il était
+         # créé par l'étape
+         if self.sd != None :
+            self.parent.del_sdprod(self.sd)
+            self.parent.delete_concept(self.sd)
+      # On détruit les concepts à droite du signe =
+      for co in self.sdprods:
+         self.parent.del_sdprod(co)
+         self.parent.delete_concept(co)
+      # Si la macro a des etapes et des concepts inclus, on les detruit
+      for nom_sd,co in self.g_context.items():
+         if not isinstance(co,ASSD):continue
+         print "Delete: ",self.nom,co.nom
+         self.parent.del_sdprod(co)
+         self.parent.delete_concept(co)
+      # On met g_context à blanc
+      self.g_context={}
+         
diff --git a/Ihm/I_MCBLOC.py b/Ihm/I_MCBLOC.py
new file mode 100644 (file)
index 0000000..7b8281d
--- /dev/null
@@ -0,0 +1,5 @@
+import I_MCCOMPO
+class MCBLOC(I_MCCOMPO.MCCOMPO):
+  def makeobjet(self):
+    return self.definition(val = None,  nom = self.nom,parent = self.parent)
+
diff --git a/Ihm/I_MCCOMPO.py b/Ihm/I_MCCOMPO.py
new file mode 100644 (file)
index 0000000..24f71cc
--- /dev/null
@@ -0,0 +1,367 @@
+"""
+"""
+import string,types
+from copy import copy
+
+from Noyau.N_MCLIST import MCList
+from Noyau.N_MCSIMP import MCSIMP
+from Noyau.N_MCFACT import MCFACT
+from Noyau.N_MCBLOC import MCBLOC
+import I_OBJECT
+
+class MCCOMPO(I_OBJECT.OBJECT):
+  def getlabeltext(self):
+    """ 
+       Retourne le label de self suivant qu'il s'agit d'un MCFACT, 
+       d'un MCBLOC ou d'un MCFACT appartenant à une MCList : 
+       utilisée pour l'affichage dans l'arbre
+    """
+    objet = self.parent.get_child(self.nom)
+    # objet peut-être self ou une MCList qui contient self ...
+    if isinstance(objet,MCList) :
+      index = objet.get_index(self)+1 # + 1 à cause de la numérotation qui commence à 0
+      label = self.nom +'_'+`index`+':'
+      return label
+    else:
+      return self.nom
+
+  def get_genealogie(self):
+    """ 
+        Retourne la liste des noms des ascendants (noms de MCSIMP,MCFACT,MCBLOC
+        ou ETAPE) de self jusqu'au premier objet etape rencontré
+    """
+    l=[]
+    objet = self
+    while objet.definition.label != 'JDC' :
+      if not objet.isMCList() :
+        l.append(string.strip(objet.nom))
+      else :
+        pass
+      # Si objet.etape == etape c'est que objet est l'étape origine de la généalogie
+      if objet.etape == objet: break
+      objet = objet.parent
+    l.reverse()
+    return l
+
+  def get_liste_mc_ordonnee(self,liste,dico):
+    """
+       Retourne la liste ordonnée (suivant le catalogue) des mots-clés
+       d'une entité composée dont le chemin complet est donné sous forme
+       d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
+       il faut encore réarranger cette liste (certains mots-clés déjà
+       présents ne doivent plus être proposés, règles ...)
+    """
+    return self.filtre_liste_mc(self.get_liste_mc_ordonnee_brute(liste,dico))
+
+  def get_liste_mc_ordonnee_brute(self,liste,dico):
+    """
+       Retourne la liste ordonnée (suivant le catalogue) BRUTE des mots-clés
+       d'une entité composée dont le chemin complet est donné sous forme
+       d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
+    """
+    for arg in liste:
+        objet_cata = dico[arg]
+        dico=objet_cata.dico
+    return objet_cata.liste
+
+  def filtre_liste_mc(self,liste_brute):
+    """ 
+       Cette méthode est appelée par EFICAS afin de présenter à 
+       l'utilisateur la liste des enfants possibles de self actualisée 
+       en fonction du contexte de self. En clair, sont supprimés de la
+       liste des possibles (fournie par la définition), les mots-clés
+       exclus par les règles de self et les mots-clés ne pouvant plus 
+       être répétés
+    """
+    liste = copy(liste_brute)
+    liste_mc_presents = self.liste_mc_presents()
+    # on enlève les mots-clés non permis par les règles
+    for regle in self.definition.regles:
+       # la méthode purge_liste est à développer pour chaque règle qui
+       # influe sur la liste de choix à proposer à l'utilisateur
+       # --> EXCLUS,UN_PARMI,PRESENT_ABSENT
+       liste = regle.purge_liste(liste,liste_mc_presents)
+    # on enlève les mots-clés dont l'occurrence est déjà atteinte
+    liste_copy = copy(liste)
+    for k in liste_copy:
+      objet = self.get_child(k,restreint = 'oui')
+      if objet != None :
+        # l'objet est déjà présent : il faut distinguer plusieurs cas
+        if isinstance(objet,MCSIMP):
+          # un mot-clé simple ne peut pas être répété
+          liste.remove(k)
+        elif isinstance(objet,MCBLOC):
+          # un bloc conditionnel ne doit pas apparaître dans la liste de choix
+          liste.remove(k)
+        elif isinstance(objet,MCFACT):
+          # un mot-clé facteur ne peut pas être répété plus de self.max fois
+          if objet.definition.max == 1:
+            liste.remove(k)
+        elif isinstance(objet,MCList):
+          try :
+            nb_occur_maxi = objet[0].definition.max
+            if len(objet) >= nb_occur_maxi:
+              liste.remove(k)
+          except:
+            pass
+        else :
+          #XXX CCAR : les MCNUPLET ne sont pas traités
+          if CONTEXT.debug : print '   ',k,' est un objet de type inconnu :',type(objet)
+      else :
+        # l'objet est absent : on enlève de la liste les blocs
+        if self.definition.entites[k].statut=='c' :
+          liste.remove(k)
+        if self.definition.entites[k].label=='BLOC':
+          liste.remove(k)
+    return liste
+
+  def liste_mc_presents(self):
+    """ 
+       Retourne la liste des noms des mots-clés fils de self présents construite
+       à partir de self.mc_liste 
+    """
+    l=[]
+    for v in self.mc_liste:
+      k=v.nom
+      l.append(k)
+    return l
+
+  def ordonne_liste_mc(self,liste_mc_a_ordonner,liste_noms_mc_ordonnee):
+    """
+        Retourne liste_mc_a_ordonner ordonnée suivant l'ordre 
+        donné par liste_noms_mc_ordonnee
+    """
+    liste = []
+    # on transforme liste_a_ordonner en un dictionnaire (plus facile à consulter)
+    d_mc = {}
+    for mc in liste_mc_a_ordonner:
+      d_mc[mc.nom]=mc
+    # on construit la liste des objets ordonnés
+    for nom_mc in liste_noms_mc_ordonnee:
+      if d_mc.has_key(nom_mc):
+        liste.append(d_mc.get(nom_mc))
+    # on la retourne
+    return liste
+
+  def suppentite(self,objet) :
+    """ 
+        Supprime le fils 'objet' de self : 
+        Retourne 1 si la suppression a pu être effectuée,
+        Retourne 0 dans le cas contraire
+    """
+    self.init_modif()
+    if not objet in self.mc_liste:
+       # Impossible de supprimer objet. Il n'est pas dans mc_liste
+       self.fin_modif()
+       return 0
+
+    try :
+      if hasattr(objet.definition,'position'):
+          if objet.definition.position == 'global' :
+            self.delete_mc_global(objet)
+          elif objet.definition.position == 'global_jdc' :
+            self.delete_mc_global_jdc(objet)
+      self.mc_liste.remove(objet)
+      self.fin_modif()
+      return 1
+    except:
+      self.fin_modif()
+      return 0
+
+  def isoblig(self):
+    return self.definition.statut=='o'
+
+  def addentite(self,name,pos=None):
+      """ 
+          Ajoute le mot-cle name à la liste des mots-cles de
+          l'objet MCCOMPOSE
+      """
+      self.init_modif()
+      if type(name)==types.StringType :
+        if self.ispermis(name) == 0 : return 0
+        objet=self.definition.entites[name](val=None,nom=name,parent=self)
+        if hasattr(objet.definition,'position'):
+          if objet.definition.position == 'global' :
+            self.append_mc_global(objet)
+          elif objet.definition.position == 'global_jdc' :
+            self.append_mc_global_jdc(objet)
+      else :
+        objet = name
+      # si un objet de même nom est déjà présent dans la liste
+      # et si l'objet est répétable
+      # il faut créer une MCList et remplacer l'objet de la liste
+      # par la MCList
+      test1 = objet.isrepetable()
+      old_obj = self.get_child(objet.nom,restreint = 'oui')
+      test2 = self.ispermis(objet)
+      #print "test1,test2=",test1,test2
+      if test1 == 0 and old_obj :
+        self.jdc.send_message("L'objet %s ne peut pas être répété" %objet.nom)
+        self.fin_modif()
+        return 0
+      if test2 == 0:
+        self.jdc.send_message("L'objet %s ne peut être un fils de %s" %(objet.nom,self.nom))
+        self.fin_modif()
+        return 0
+      if test1 :
+        if old_obj :
+          #if not isinstance(old_obj,MCList):
+          if not old_obj.isMCList():
+            # un objet de même nom existe déjà mais ce n'est pas une MCList
+            # Il faut en créer une 
+            # L'objet existant (old_obj) est certainement un MCFACT 
+            # qui pointe vers un constructeur
+            # de MCList : definition.liste_instance
+            #print "un objet de même type existe déjà"
+            index = self.mc_liste.index(old_obj)
+            #XXX remplacé par definition.list_instance : new_obj = MCList()
+            new_obj = old_obj.definition.list_instance()
+            new_obj.init(objet.nom,self)
+            new_obj.append(old_obj)
+            new_obj.append(objet)
+            self.mc_liste.remove(old_obj)
+            self.mc_liste.insert(index,new_obj)
+            self.fin_modif()
+            return new_obj
+          else :
+            # une liste d'objets de même type existe déjà
+            #print "une liste d'objets de même type existe déjà"
+            old_obj.append(objet)
+            self.fin_modif()
+            return old_obj
+      if pos == None :
+        self.mc_liste.append(objet)
+      else :
+        self.mc_liste.insert(pos,objet)
+      self.fin_modif()
+      return objet
+
+  def ispermis(self,fils):
+    """ 
+        Retourne 1 si l'objet de nom nom_fils 
+        est bien permis, cad peut bien être un fils de self, 
+        Retourne 0 sinon 
+    """
+    if type(fils) == types.StringType :
+      # on veut juste savoir si self peut avoir un fils de nom 'fils'
+      if self.definition.entites.has_key(fils):
+        return 1
+      else :
+        return 0
+    elif type(fils) == types.InstanceType:
+      # fils est un objet (commande,mcf,mclist)
+      # on est dans le cas d'une tentative de copie de l'objet
+      # on veut savoir si l'objet peut bien être un fils de self :
+      # la vérification du nom de suffit pas (plusieurs commandes
+      # ont le même mot-clé facteur AFFE ... et c'est l'utilisateur
+      # qui choisit le père d'où un risque d'erreur)
+      if not self.definition.entites.has_key(fils.nom):
+        return 0
+      else:
+        if fils.parent.nom != self.nom : return 0
+      return 1
+
+  def liste_mc_presents(self):
+    """ 
+         Retourne la liste des noms des mots-clés fils de self présents 
+         construite à partir de self.mc_liste 
+    """
+    l=[]
+    for v in self.mc_liste:
+      k=v.nom
+      l.append(k)
+    return l
+
+  def delete_concept(self,sd):
+    """ 
+        Inputs :
+           sd=concept detruit
+        Fonction :
+           Mettre a jour les fils de l objet suite à la disparition du
+           concept sd
+           Seuls les mots cles simples MCSIMP font un traitement autre que 
+           de transmettre aux fils
+    """
+    for child in self.mc_liste :
+      child.delete_concept(sd)
+
+  def delete_mc_global(self,mc):
+    """ 
+        Supprime le mot-clé mc de la liste des mots-clés globaux de l'étape 
+    """
+    etape = self.get_etape()
+    if etape :
+      nom = mc.nom
+      del etape.mc_globaux[nom]
+
+  def delete_mc_global_jdc(self,mc):
+    """ 
+        Supprime le mot-clé mc de la liste des mots-clés globaux du jdc 
+    """
+    nom = mc.nom
+    del self.jdc.mc_globaux[nom]
+
+  def copy(self):
+    """ Retourne une copie de self """
+    objet = self.makeobjet()
+    objet.valeur = copy(self.valeur)
+    objet.val = copy(self.val)
+    objet.mc_liste=[]
+    for obj in self.mc_liste:
+      new_obj = obj.copy()
+      objet.mc_liste.append(new_obj)
+    return objet
+
+  def get_sd_utilisees(self):
+    """ 
+        Retourne la liste des concepts qui sont utilisés à l'intérieur de self
+        ( comme valorisation d'un MCS) 
+    """
+    l=[]
+    for child in self.mc_liste:
+      l.extend(child.get_sd_utilisees())
+    return l
+
+  def get_liste_mc_inconnus(self):
+     """
+     Retourne la liste des mots-clés inconnus dans self
+     """
+     l_mc = []
+     if self.reste_val != {}:
+        for k,v in self.reste_val.items() :
+           l_mc.append([self,k,v])
+     for child in self.mc_liste :
+        if child.isvalid() : continue
+        l_child = child.get_liste_mc_inconnus()
+       if l_child :
+          l = [self]
+          l.extend(l_child)
+          l_mc.append(l)
+     return l_mc
+
+  def verif_condition_bloc(self):
+    """ 
+        Evalue les conditions de tous les blocs fils possibles 
+        (en fonction du catalogue donc de la définition) de self
+        et retourne deux listes :
+        - la première contient les noms des blocs à rajouter
+        - la seconde contient les noms des blocs à supprimer
+    """
+    liste_ajouts = []
+    liste_retraits = []
+    dict = self.cree_dict_valeurs(self.mc_liste)
+    for k,v in self.definition.entites.items():
+      #dict = self.cree_dict_valeurs(self.mc_liste)
+      if v.label=='BLOC' :
+        if v.verif_presence(dict) :
+          # le bloc doit être présent
+          if not self.get_child(k,restreint = 'oui'):
+            # le bloc n'est pas présent et il doit être créé
+            liste_ajouts.append(k)
+        else :
+          # le bloc doit être absent
+          if self.get_child(k,restreint = 'oui'):
+            # le bloc est présent : il faut l'enlever
+            liste_retraits.append(k)
+    return liste_ajouts,liste_retraits
+
diff --git a/Ihm/I_MCFACT.py b/Ihm/I_MCFACT.py
new file mode 100644 (file)
index 0000000..08ab1f1
--- /dev/null
@@ -0,0 +1,17 @@
+import I_MCCOMPO
+class MCFACT(I_MCCOMPO.MCCOMPO):
+  def isrepetable(self):
+     """ 
+         Indique si l'objet est répétable.
+         Retourne 1 si le mot-clé facteur self peut être répété
+         Retourne 0 dans le cas contraire
+     """
+     if self.definition.max > 1:
+       # marche avec '**'
+       return 1
+     else :
+       return 0
+
+  def makeobjet(self):
+     return self.definition(val = None, nom = self.nom,parent = self.parent)
+
diff --git a/Ihm/I_MCLIST.py b/Ihm/I_MCLIST.py
new file mode 100644 (file)
index 0000000..c08a383
--- /dev/null
@@ -0,0 +1,95 @@
+from copy import copy
+
+class MCList:
+  def isMCList(self):
+    """ 
+       Retourne 1 si self est une MCList (liste de mots-clés), 0 sinon (défaut) 
+    """
+    return 1
+
+  def get_index(self,objet):
+    """
+        Retourne la position d'objet dans la liste self
+    """
+    return self.data.index(objet)
+
+  def ajout_possible(self):
+    """ 
+        Méthode booléenne qui retourne 1 si on peut encore ajouter une occurrence
+        de l'élément que contient self, 0 sinon 
+    """
+    max = self.data[0].definition.max
+    if max == '**':
+      return 1
+    else:
+      if len(self) < max :
+        return 1
+      else:
+        return 0
+
+  def isoblig(self):
+    for i in self.data:
+      if i.isoblig():return 1
+    return 0
+
+  def liste_mc_presents(self):
+    return []
+
+  def delete_concept(self,sd):
+    """ 
+        Inputs :
+           sd=concept detruit
+        Fonction :
+           Mettre a jour les fils de l objet suite à la disparition 
+           du concept sd
+           Seuls les mots cles simples MCSIMP font un traitement autre 
+           que de transmettre aux fils
+    """
+    for child in self.data :
+      child.delete_concept(sd)
+
+  def copy(self):
+    liste = self.data[0].definition.list_instance()
+    # XXX Pas de parent ??
+    liste.init(self.nom)
+    for objet in self:
+      new_obj = objet.copy()
+      liste.append(new_obj)
+    return liste
+
+  def get_docu(self):
+    return self.data[0].definition.get_docu()
+
+  def get_liste_mc_inconnus(self):
+     """
+     Retourne la liste des mots-clés inconnus dans self
+     """
+     l_mc = []
+     for mcfact in self.data :
+        if mcfact.isvalid() : continue
+        l_child = mcfact.get_liste_mc_inconnus()
+       if l_child :
+          l = [self]
+          l.extend(l_child)
+          l_mc.append(l)
+     return l_mc
+
+  def verif_condition_regles(self,liste_presents):
+    """
+        Retourne la liste des mots-clés à rajouter pour satisfaire les règles
+        en fonction de la liste des mots-clés présents
+    """
+    # Sans objet pour une liste de mots clés facteurs
+    return []
+
+  def verif_condition_bloc(self):
+    """ 
+        Evalue les conditions de tous les blocs fils possibles 
+        (en fonction du catalogue donc de la définition) de self et 
+        retourne deux listes :
+        - la première contient les noms des blocs à rajouter
+        - la seconde contient les noms des blocs à supprimer
+    """
+    # Sans objet pour une liste de mots clés facteurs
+    return [],[]
+
diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py
new file mode 100644 (file)
index 0000000..96fe6cc
--- /dev/null
@@ -0,0 +1,259 @@
+import types,string
+import traceback
+from copy import copy
+from repr import Repr
+myrepr = Repr()
+myrepr.maxstring = 100
+myrepr.maxother = 100
+
+from Noyau.N_utils import repr_float
+from Noyau.N_ASSD import ASSD,assd
+from Noyau.N_GEOM import GEOM,geom
+from Noyau.N_CO import CO
+from Noyau.N_EVAL import EVAL
+from Extensions import parametre
+import I_OBJECT
+
+class MCSIMP(I_OBJECT.OBJECT):
+  def GetText(self):
+    """
+        Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
+        pointé par self
+    """
+    if self.valeur == None : 
+      return None
+    elif type(self.valeur) == types.FloatType : 
+      txt = repr_float(self.valeur)
+    elif type(self.valeur) in (types.ListType,types.TupleType) :
+      txt='('
+      i=0
+      for val in self.valeur:
+        if type(val) == types.FloatType : 
+           txt=txt + i*',' + repr_float(val)
+        elif type(val) == types.InstanceType and isinstance(val,ASSD): 
+           txt = txt + i*',' + val.get_name()
+        else: 
+           txt = txt + i*','+ myrepr.repr(val)
+        i=1
+      txt=txt+')'
+    else:
+      txt = self.getval()
+    if type(txt) != types.StringType:
+      if type(txt) == types.InstanceType:
+        if isinstance(txt,parametre.PARAMETRE):
+          return str(txt)
+      return repr(txt)
+    # il faut tronquer txt au delà d'un certain nombre de caractères
+    # et avant tout retour chariot (txt peut être une chaîne de caractères
+    # sur plusieurs lignes (ex:shell)
+    txt = string.split(txt,'\n')[0]
+    if len(txt) < 30 :
+      return txt
+    else:
+      return txt[0:29]
+
+  def getval(self):
+    """ 
+       Retourne une chaîne de caractère représentant la valeur de self 
+    """
+    val=self.valeur
+    if type(val) != types.TupleType :
+      try:
+        return val.get_name()
+      except:
+        return val
+    else :
+      s='( '
+      for item in val :
+        try :
+          s=s+item.get_name()+','
+        except:
+          s=s+`item`+','
+      s=s+' )'
+      return s
+
+  def get_min_max(self):
+    return self.definition.min,self.definition.max
+
+  def wait_co(self):
+    """
+        Méthode booléenne qui retourne 1 si l'objet attend un objet ASSD 
+        qui n'existe pas encore (type CO()), 0 sinon
+    """
+    for typ in self.definition.type:
+      if type(typ) == types.ClassType :
+        if typ is CO : return 1
+    return 0
+
+  def wait_assd(self):
+    """ 
+        Méthode booléenne qui retourne 1 si le MCS attend un objet de type ASSD 
+        ou dérivé, 0 sinon
+    """
+    for typ in self.definition.type:
+      if type(typ) == types.ClassType :
+        if issubclass(typ,ASSD) and not issubclass(typ,GEOM):
+          return 1
+    return 0
+
+  def wait_assd_or_geom(self):
+    """ 
+         Retourne 1 si le mot-clé simple attend un objet de type
+          assd, ASSD, geom ou GEOM
+         Retourne 0 dans le cas contraire
+    """
+    for typ in self.definition.type:
+      if type(typ) == types.ClassType :
+        if typ in (GEOM,ASSD,geom,assd) or issubclass(typ,GEOM) :
+          return 1
+    return 0
+
+  def wait_geom(self):
+    """ 
+         Retourne 1 si le mot-clé simple attend un objet de type GEOM
+         Retourne 0 dans le cas contraire
+    """
+    for typ in self.definition.type:
+      if type(typ) == types.ClassType :
+        if issubclass(typ,GEOM) : return 1
+    return 0
+
+  def wait_TXM(self):
+    """ 
+         Retourne 1 si le mot-clé simple attend un objet de type TXM
+         Retourne 0 dans le cas contraire
+    """
+    for typ in self.definition.type:
+      if typ == 'TXM' :return 1
+    return 0
+
+  def get_liste_valeurs(self):
+    """
+    """
+    if self.valeur == None:
+      return []
+    elif type(self.valeur) == types.TupleType:
+      return list(self.valeur)
+    elif type(self.valeur) == types.ListType:
+      return self.valeur
+    else:
+      return [self.valeur]
+
+  def isoblig(self):
+    return self.definition.statut=='o'
+
+  def set_valeur(self,new_valeur,evaluation='oui'):
+    """
+        Remplace la valeur de self(si elle existe) par new_valeur
+            - si evaluation = 'oui' : 
+                        essaie d'évaluer new_valeur dans le contexte
+            - si evaluation = 'non' : 
+                        n'essaie pas d'évaluer (on stocke une string ou 
+                        une valeur de la liste into )
+    """
+    if evaluation == 'oui' and not self.wait_assd_or_geom():
+      valeur,test = self.eval_valeur(new_valeur)
+      if test :
+        self.val = new_valeur
+        self.valeur = valeur
+        self.init_modif()
+        return 1
+      else:
+        # On n'a pas trouve de concept ni réussi à évaluer la valeur 
+        # dans le contexte
+        # Si le mot cle simple attend un type CO on crée un objet de ce 
+        # type de nom new_valeur
+        if self.wait_co():
+          try:
+            self.valeur=CO(new_valeur)
+          except:
+            traceback.print_exc()
+            return 0
+          self.val=self.valeur
+          self.init_modif()
+          return 1
+        elif type(new_valeur)==types.StringType and self.wait_TXM():
+          self.val = new_valeur
+          self.valeur = new_valeur
+          self.init_modif()
+          return 1
+        else:
+          return 0
+    else :
+      # on ne fait aucune vérification ...
+      try:
+        self.valeur = eval(new_valeur)
+        self.val = eval(new_valeur)
+        self.init_modif()
+        return 1
+      except:
+        self.valeur = new_valeur
+        self.val = new_valeur
+        self.init_modif()
+        return 1
+
+  def eval_valeur(self,new_valeur):
+    """
+        Essaie d'évaluer new_valeur comme une SD, une déclaration Python 
+        ou un EVAL:
+           Retourne la valeur évaluée (ou None) et le test de réussite (1 ou 0)
+    """
+    #sd = self.jdc.get_sd_avant_etape(new_valeur,self.etape)
+    sd = self.jdc.get_contexte_avant(self.etape).get(new_valeur,None)
+    if sd :
+      return sd,1
+    else:
+      d={}
+      d['EVAL']=EVAL
+      try :
+        objet = eval(new_valeur,d)
+        return objet,1
+      except Exception:
+        if CONTEXT.debug : traceback.print_exc()
+        return None,0
+
+  def delete_concept(self,sd):
+    """ 
+        Inputs :
+           sd=concept detruit
+        Fonction :
+           Met a jour la valeur du mot cle simple suite à la disparition 
+           du concept sd
+    """
+    if type(self.valeur) == types.TupleType :
+      if sd in self.valeur:
+        self.valeur=list(self.valeur)
+        self.valeur.remove(sd)
+        self.init_modif()
+    elif type(self.valeur) == types.ListType:
+      if sd in self.valeur:
+        self.valeur.remove(sd)
+        self.init_modif()
+    else:
+      if self.valeur == sd:
+        self.valeur=None
+        self.val=None
+        self.init_modif()
+
+  def copy(self):
+    """ Retourne une copie de self """
+    objet = self.makeobjet()
+    #XXX est ce utile ??
+    objet.valeur = copy(self.valeur)
+    objet.val = copy(self.val)
+    return objet
+
+  def makeobjet(self):
+    return self.definition(val = None, nom = self.nom,parent = self.parent)
+
+  def get_sd_utilisees(self):
+    """ 
+        Retourne une liste qui contient la SD utilisée par self si c'est le cas
+        ou alors une liste vide
+    """
+    l=[]
+    if type(self.valeur) == types.InstanceType:
+      #XXX Est ce différent de isinstance(self.valeur,ASSD) ??
+      if issubclass(self.valeur.__class__,ASSD) : l.append(self.valeur)
+    return l
+
diff --git a/Ihm/I_OBJECT.py b/Ihm/I_OBJECT.py
new file mode 100644 (file)
index 0000000..559ebcd
--- /dev/null
@@ -0,0 +1,83 @@
+"""
+"""
+
+class OBJECT:
+  def isMCList(self):
+    """ 
+        Retourne 1 si self est une MCList (liste de mots-clés), 
+                 0 sinon (défaut) 
+    """
+    return 0
+
+  def get_regles(self):
+    """ 
+       Retourne les règles de self 
+    """
+    if hasattr(self,'definition'):
+      return self.definition.regles
+    elif hasattr(self,'regles'):
+      return self.regles
+    else :
+      return []
+
+  def init_modif(self):
+    """
+       Met l'état de l'objet à modified et propage au parent
+       qui vaut None s'il n'existe pas
+    """
+    self.state = 'modified'
+    if self.parent:
+      self.parent.init_modif()
+
+  def fin_modif(self):
+      """
+      Méthode appelée après qu'une modification a été faite afin de déclencher
+      d'éventuels traitements post-modification
+      """
+      # pour les objets autres que les commandes, aucun traitement spécifique 
+      # on remonte l'info de fin de modif au parent
+      if self.parent:
+        self.parent.fin_modif()
+
+  def isrepetable(self):
+    """
+         Indique si l'objet est répétable
+    """
+    return 0
+
+  def liste_mc_presents(self):
+    """
+         Retourne la liste des noms des mots clés présents
+    """
+    return []
+
+  def get_docu(self):
+    return self.definition.get_docu()
+
+  def get_liste_mc_inconnus(self):
+     """
+     Retourne la liste des mots-clés inconnus dans self
+     """
+     return []
+
+  def verif_condition_regles(self,liste_presents):
+    """ 
+        Retourne la liste des mots-clés à rajouter pour satisfaire les règles
+        en fonction de la liste des mots-clés présents 
+    """
+    liste=[]
+    for regle in self.definition.regles:
+        liste=regle.verif_condition_regle(liste,liste_presents)
+    return liste
+
+  def verif_condition_bloc(self):
+    """ 
+        Evalue les conditions de tous les blocs fils possibles 
+        (en fonction du catalogue donc de la définition) de self et
+        retourne deux listes :
+        - la première contient les noms des blocs à rajouter
+        - la seconde contient les noms des blocs à supprimer
+    """
+    return [],[]
+
+
diff --git a/Ihm/I_PRESENT_ABSENT.py b/Ihm/I_PRESENT_ABSENT.py
new file mode 100644 (file)
index 0000000..5ddd4a8
--- /dev/null
@@ -0,0 +1,16 @@
+"""
+"""
+
+import I_REGLE
+
+class PRESENT_ABSENT(I_REGLE.REGLE):
+  def purge_liste(self,liste_a_purger,liste_mc_presents):
+     regle_active=0
+     if self.mcs[0] in liste_mc_presents:regle_active=1
+     if not regle_active : return liste_a_purger
+
+     for mc in self.mcs:
+        if mc in liste_a_purger:
+           liste_a_purger.remove(mc)
+     return liste_a_purger
+
diff --git a/Ihm/I_PRESENT_PRESENT.py b/Ihm/I_PRESENT_PRESENT.py
new file mode 100644 (file)
index 0000000..e6a841e
--- /dev/null
@@ -0,0 +1,17 @@
+"""
+"""
+
+import I_REGLE
+
+class PRESENT_PRESENT(I_REGLE.REGLE):
+  def verif_condition_regle(self,liste,l_mc_presents):
+    mc0=self.mcs[0]
+    for mc_present in l_mc_presents:
+      if mc_present == mc0 :
+        for mc in self.mcs[1:]:
+          nb = l_mc_presents.count(mc)
+          if nb == 0 : liste.append(mc)
+        return liste
+    return liste
+
+
diff --git a/Ihm/I_PROC_ETAPE.py b/Ihm/I_PROC_ETAPE.py
new file mode 100644 (file)
index 0000000..ddfdabe
--- /dev/null
@@ -0,0 +1,26 @@
+import I_ETAPE
+class PROC_ETAPE(I_ETAPE.ETAPE):
+   def get_sdname(self):
+      return ""
+
+   def get_sdprods(self,nom_sd):
+      """ 
+         Fonction : retourne le concept produit par l etape de nom nom_sd
+                    s il existe sinon None
+         Une PROC ne produit aucun concept
+      """
+      return None
+
+   def delete_concept(self,sd):
+      """
+          Inputs :
+             sd=concept detruit
+          Fonction :
+             Mettre a jour les mots cles de l etape 
+             suite à la disparition du concept sd
+             Seuls les mots cles simples MCSIMP font un traitement autre
+             que de transmettre aux fils
+      """
+      for child in self.mc_liste :
+        child.delete_concept(sd)
+
diff --git a/Ihm/I_REGLE.py b/Ihm/I_REGLE.py
new file mode 100644 (file)
index 0000000..1ff738f
--- /dev/null
@@ -0,0 +1,31 @@
+"""
+"""
+import string
+
+class REGLE:
+
+  def gettext(self):
+    text = self.__class__.__name__+ ' :\n'
+    for mc in self.mcs :
+      text = text + '\t' + string.strip(mc) + '\n'
+    return text
+
+  def purge_liste(self,liste_a_purger,liste_mc_presents):
+    """
+         Cette méthode doit retirer de la liste liste_a_purger
+         les éléments qui ne doivent plus apparaitre en fonction du contexte
+    """
+    # Dans le cas général on ne touche pas à la liste
+    return liste_a_purger
+
+  def has_operande(self,nom):
+    # On peut faire aussi try:self.mcs.index(nom);return 1;except:return 0
+    for mc in self.mcs:
+      if mc==nom : return 1
+    return 0
+
+  def verif_condition_regle(self,liste,l_mc_presents):
+    return []
+
+
+
diff --git a/Ihm/I_UN_PARMI.py b/Ihm/I_UN_PARMI.py
new file mode 100644 (file)
index 0000000..a600514
--- /dev/null
@@ -0,0 +1,21 @@
+"""
+"""
+
+import I_REGLE
+
+class UN_PARMI(I_REGLE.REGLE):
+
+  def purge_liste(self,liste_a_purger,liste_mc_presents):
+     regle_active=0
+     for mc_present in liste_mc_presents:
+        if mc_present in self.mcs:
+           regle_active=1
+           break
+     if not regle_active : return liste_a_purger
+
+     # Si un des mots clés est présent, on les enlève tous
+     for mc in self.mcs:
+        if mc in liste_a_purger:
+           liste_a_purger.remove(mc)
+     return liste_a_purger
+
diff --git a/Ihm/__init__.py b/Ihm/__init__.py
new file mode 100644 (file)
index 0000000..a2c6164
--- /dev/null
@@ -0,0 +1,4 @@
+"""
+    Ce package contient les fonctionnalités supplémentaires nécessaires
+    pour l'éditeur graphique EFICAS
+"""
diff --git a/Minicode/cata_saturne.py b/Minicode/cata_saturne.py
new file mode 100755 (executable)
index 0000000..40975a2
--- /dev/null
@@ -0,0 +1,1231 @@
+# debut entete
+
+import Accas
+from Accas import *
+
+import ops
+
+JdC = JDC_CATA(code='SATURNE',
+               execmodul=None,
+               regles = (AU_MOINS_UN('DEBUT','POURSUITE'),
+                         AU_MOINS_UN('FIN'),
+                         A_CLASSER(('DEBUT','POURSUITE'),'FIN')
+                        )
+              );
+
+# P. RASCLE MMN
+# remarques diverses sur le catalogue Saturne
+# - dans les blocs, il faut au moins un mot clé de statut obligatoire
+# probleme de rafraichissement des blocs dépendants quand la valeur d'un mot cle global (ITURB) passe de 1 à 0
+
+class sonde(ASSD):pass
+class varsca(ASSD):pass
+class flusca(ASSD):pass
+class varpre(ASSD):pass
+class varvitx(ASSD):pass
+class varvity(ASSD):pass
+class varvitz(ASSD):pass
+class eturb(ASSD):pass
+class dturb(ASSD):pass
+class tsr11(ASSD):pass
+class tsr22(ASSD):pass
+class tsr33(ASSD):pass
+class tsr12(ASSD):pass
+class tsr13(ASSD):pass
+class tsr23(ASSD):pass
+class resti(ASSD):pass
+
+class maillage(ASSD):pass
+class listr8          (ASSD):pass
+
+# fin entete
+
+INCLUDE=MACRO(nom="INCLUDE",op=-1,docu="U4.13.01-e",
+             fr="Débranchement vers un fichier de commandes secondaires",
+             sd_prod=ops.INCLUDE,op_init=ops.INCLUDE_context,fichier_ini=1,
+         UNITE = SIMP(statut='o',typ='I'),
+         INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+);
+
+POURSUITE=MACRO(nom="POURSUITE",op=0,repetable='n',fr="Poursuite d une étude",
+                docu="U4.11.03-f1",sd_prod = ops.POURSUITE,
+                op_init = ops.POURSUITE_context,fichier_ini = 1,
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+                           into=("OUI","NON"),defaut="OUI"),
+         BASE            =FACT(fr="définition des parmètres associés aux bases JEVEUX",
+                               statut='f',min=1,max=3,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           CAS             =SIMP(statut='f',typ='TXM'),
+           NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+           LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+           LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+         ),
+         IMPRESSION      =FACT(statut='f',min=1,max=3,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='o',typ='I'),
+         ),
+         CATALOGUE       =FACT(statut='f',min=1,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+         DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
+                               statut='f',min=1,max=1,
+           JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+                                 statut='f',typ='TXM',into=('TES',)),
+         ),
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=1,max=1,
+           GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
+           TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
+           TAILLE          =SIMP(statut='f',typ='I'),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut=800.),
+           PARTITION       =SIMP(statut='f',typ='R' ),
+         ),
+         CODE            =FACT("définition d un nom pour l'esemble d'une étude",
+                               statut='f',min=1,max=1,
+           NOM             =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I',defaut=15),
+         ),
+)  ;
+
+FORMULE = FORM( nom='FORMULE',op=-5,sd_prod=fonction,
+                fr="Définition d une fonction",reentrant = 'n',
+                regles=(UN_PARMI('REEL','ENTIER','COMPLEXE'),),
+                REEL = SIMP(typ = 'shell',max=1),
+                ENTIER = SIMP(typ = 'shell',max=1),
+                COMPLEXE = SIMP(typ = 'shell',max=1),
+) ;
+
+DEFI_SONDE = OPER(nom="DEFI_SONDE",op= 1,sd_prod=sonde,
+     docu="U2D1",
+     fr="définition d'une sonde historique avec ses coordonnées",
+                  X = SIMP(statut ='o',typ='R',
+                           fr="coordonnée X de la sonde"),
+                  Y = SIMP(statut ='o',typ='R',
+                           fr="coordonnée Y de la sonde"),
+                  Z = SIMP(statut ='o',typ='R',
+                           fr="coordonnée Z de la sonde")
+                 );
+
+def defi_scala_prod(**args):
+   return varsca
+
+DEFI_SCALA = OPER(nom="DEFI_SCALA",op=2,sd_prod=defi_scala_prod,
+fr="définition d'une inconnue scalaire avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_FLUSCA = OPER(nom="DEFI_FLUSCA",op=2,sd_prod=flusca,fr="définition des fluctuations d'une inconnue scalaire avec ses paramètres physico numériques",
+                  VARFL  = SIMP(statut='o',typ=varsca,fr="scalaire associé au calcul de la variance des fluctuations"),
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable"),
+                                RVARFL = SIMP(statut='o',typ='R',val_min=0,defaut=0.8,
+                                                       fr="nombre de Prandtl pour la variance des fluctuations du scalaire")
+                                )
+                  );
+
+DEFI_PRESSION = OPER(nom="DEFI_PRESSION",op=2,sd_prod=varpre,fr="définition del'inconnue pression avec ses paramètres physico numériques",
+                   NUMERIC = FACT(statut='o',max=01,
+                                  fr="propriétés de l'équation de pression",
+                                  ICONV  = SIMP(statut='o',typ='I',defaut=0,into=(0,1),
+                                                fr="indicateur de convection"),
+                                  ISTAT  = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                fr="présence terme instationnaire dans les matrices"),
+                                  IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="diffusion"),
+                                  IDIRCL = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                  SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                          BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                        fr="pourcentage schéma convectif au second ordre"),
+                                                          ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                        fr ="type schéma convectif au second ordre 1 : centré")
+                                                          ),
+                                  NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                  EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                fr="précision relative pour la résolution des systèmes linéaires"),
+                                  IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                fr="type de limitation des gradients"),
+                                  NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                fr="reconstruction des gradients"),
+                                  NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                  CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                fr="facteur de limitation des gradients"),
+                                  EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                fr="précision relative pour la reconstruction itérative des gradients")
+                                  ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée",
+                                                defaut="Pression"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour la grandeur"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour la grandeur"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour la grandeur"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée à la grandeur"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                    );
+
+DEFI_VITX = OPER(nom="DEFI_VITX",op=2,sd_prod=varvitx,fr="définition de l'inconnue vitesse X avec ses paramètres physico numériques",
+                   NUMERIC = FACT(statut='o',max=01,
+                                  fr="propriétés de l'équation de vitesse X",
+                                  ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                fr="indicateur de convection"),
+                                  ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="présence terme instationnaire dans les matrices"),
+                                  IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="diffusion"),
+                                  IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                  SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                          BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                        fr="pourcentage schéma convectif au second ordre"),
+                                                          ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                        fr ="type schéma convectif au second ordre 1 : centré")
+                                                          ),
+                                  NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                  EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                fr="précision relative pour la résolution des systèmes linéaires"),
+                                  IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                fr="type de limitation des gradients"),
+                                  NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                fr="reconstruction des gradients"),
+                                  NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                  CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                fr="facteur de limitation des gradients"),
+                                  EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                fr="précision relative pour la reconstruction itérative des gradients")
+                                  ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée",
+                                                defaut="vitesse_u1"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour la grandeur"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour la grandeur"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour la grandeur"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée à la grandeur"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                );
+
+DEFI_VITY = OPER(nom="DEFI_VITY",op=2,sd_prod=varvity,fr="définition de l'inconnue vitesse Y avec ses paramètres physico numériques",
+                   NUMERIC = FACT(statut='o',max=01,
+                                  fr="propriétés de l'équation de vitesse Y",
+                                  ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                fr="indicateur de convection"),
+                                  ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="présence terme instationnaire dans les matrices"),
+                                  IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="diffusion"),
+                                  IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                  SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                          BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                        fr="pourcentage schéma convectif au second ordre"),
+                                                          ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                        fr ="type schéma convectif au second ordre 1 : centré")
+                                                          ),
+                                  NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                  EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                fr="précision relative pour la résolution des systèmes linéaires"),
+                                  IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                fr="type de limitation des gradients"),
+                                  NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                fr="reconstruction des gradients"),
+                                  NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                  CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                fr="facteur de limitation des gradients"),
+                                  EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                fr="précision relative pour la reconstruction itérative des gradients")
+                                  ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée",
+                                                defaut="vitesse_v1"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour la grandeur"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour la grandeur"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour la grandeur"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée à la grandeur"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                );
+
+DEFI_VITZ = OPER(nom="DEFI_VITZ",op=2,sd_prod=varvitz,fr="définition de l'inconnue vitesse Z avec ses paramètres physico numériques",
+                   NUMERIC = FACT(statut='o',max=01,
+                                  fr="propriétés de l'équation de vitesse Z",
+                                  ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                fr="indicateur de convection"),
+                                  ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="présence terme instationnaire dans les matrices"),
+                                  IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="diffusion"),
+                                  IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                  SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                          BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                        fr="pourcentage schéma convectif au second ordre"),
+                                                          ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                        fr ="type schéma convectif au second ordre 1 : centré")
+                                                          ),
+                                  NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                  EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                fr="précision relative pour la résolution des systèmes linéaires"),
+                                  IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                fr="type de limitation des gradients"),
+                                  NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                fr="reconstruction des gradients"),
+                                  NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                  CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                fr="facteur de limitation des gradients"),
+                                  EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                fr="précision relative pour la reconstruction itérative des gradients")
+                                  ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée",
+                                                defaut="vitesse_w1"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour la grandeur"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour la grandeur"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour la grandeur"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée à la grandeur"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable"),
+                                )
+                );
+
+
+DEFI_ETURB = OPER(nom="DEFI_ETURB",op=2,sd_prod=eturb,fr="définition de l'inconnue energie turbulente k-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                    fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_DTURB = OPER(nom="DEFI_DTURB",op=2,sd_prod=dturb,fr="définition de l'inconnue dissipation turbulente k-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR11 = OPER(nom="DEFI_TSR11",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R11 Rij-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR22 = OPER(nom="DEFI_TSR22",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R22 Rij-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR33 = OPER(nom="DEFI_TSR33",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R33 Rij-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR12 = OPER(nom="DEFI_TSR12",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R12 Rij-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR13 = OPER(nom="DEFI_TSR13",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R13 Rij-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR23 = OPER(nom="DEFI_TSR23",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R23 Rij-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+
+DEFI_RESTI = OPER(nom="DEFI_RESTI",op=2,sd_prod=resti,fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                  );
+
+CALCUL_SATURNE = PROC(nom = "CALCUL_SATURNE",op = 1,
+                      fr = "définition des paramètres généraux pour un calcul Saturne",
+                      docu = "néant",reentrant = 'n',
+        NomsBibliotheque   = NUPL ( max      = '**',
+                                    statut   = 'o',
+                                    elements = (  SIMP (typ='TXM',fr="Identificateur Procedure Bibliotheque"),
+                                                  SIMP (typ='TXM',fr="Identifiant de l'isotope dans la bibliotheque")
+                                               )
+                                  ),
+        ENVELOPPE = FACT(statut='o',max=01,fr = "gestion de l'enveloppe",
+                         IFOENV = SIMP(statut='o',typ='I',defaut=2,into=(0,1,2),position='global',
+                                       fr = "mode de communication enveloppe solveur"),
+                         ENVTOSOLV = BLOC(condition="IFOENV > 0",
+                                          fr = "liaison enveloppe vers solveur",
+                                          IMPEVI = SIMP(statut='o',typ='I',defaut=13,val_min=0,val_max=99,
+                                                        fr = "numéro de fichier enveloppe vers solveur"),
+                                          FICEVI = SIMP(statut='o',typ='TXM',defaut="enveloppe_vers_solveur          ",
+                                                        fr = "nom de fichier enveloppe vers solveur")
+                                         ),
+                         SOLVTOENV = BLOC(condition="IFOENV > 0",
+                                          fr = "liaison solveur vers enveloppe",
+                                          IMPEVO = SIMP(statut='o',typ='I',defaut=14,val_min=0,val_max=99,
+                                                        fr = "numéro de fichier solveur vers enveloppe"),
+                                          FICEVO = SIMP(statut='o',typ='TXM',defaut="solveur_vers_enveloppe          ",
+                                                        fr = "nom de fichier solveur vers enveloppe")
+                                         )
+                        ),
+        FICHIERS_CALCUL = FACT(statut='f',max=01,
+                               fr ="définition des fichiers géométrie, suite, stop",
+                               GEOMETRIE = BLOC(condition="IFOENV == 0",
+                                                fr = "fichier géométrique (pas d'enveloppe)",
+                                                IMPGEO = SIMP(statut='o',typ='I',defaut=10,val_min=0,val_max=99,
+                                                              fr = "numéro de fichier géométrique"),
+                                                FICGEO = SIMP(statut='o',typ='TXM',defaut="geomet",
+                                                              fr = "nom de fichier géométrique")
+                                               ),
+                               SUITE_AMONT = BLOC(condition="ISUITE == 1",
+                                                  fr = "fichier suite amont",
+                                                  IMPAMO = SIMP(statut='o',typ='I',defaut=11,val_min=0,val_max=99,
+                                                              fr = "numéro de fichier suite amont"),
+                                                  FICGEO = SIMP(statut='o',typ='TXM',defaut="suiamo",
+                                                              fr = "nom de fichier suite amont"),
+                                                  IFOAMO = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                              fr = "format du fichier suite amont, 0 = binaire")
+                                                 ),
+                               FICHIER_STOP = FACT(fr = "fichier stop",
+                                                   IMPSTP = SIMP(statut='o',typ='I',defaut=12,val_min=0,val_max=99,
+                                                                 fr = "numéro de fichier stop"),
+                                                   FICSTP = SIMP(statut='o',typ='TXM',defaut="ficstp",
+                                                                 fr = "nom de fichier stop")
+                                                  ),
+                               SUITE_AVAL = FACT(fr = "fichier suite aval",
+                                                 IMPAVA = SIMP(statut='o',typ='I',defaut=20,val_min=0,val_max=99,
+                                                             fr = "numéro de fichier suite aval"),
+                                                 FICAVA = SIMP(statut='o',typ='TXM',defaut="suiamo",
+                                                             fr = "nom de fichier suite aval"),
+                                                 IFOAVA = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                             fr = "format du fichier suite aval, 0 = binaire")
+                                                )
+                              ),
+        POST_PROC_ENSIGHT = FACT(statut='f',max=01,
+                                 fr = "options de post processing par Ensight",
+                                 IFOENS = SIMP(statut='f',typ='I',defaut=-2,into=(-2,-1,0,1),
+                                               fr = "option type de fichier et processus générateur"),
+                                 NTCHR  = SIMP(statut='f',typ='I',defaut=-1,
+                                               fr = "périodicité de sortie des fichiers Ensight"),
+                                 ITCHR  = SIMP(statut='f',typ='I',defaut=0,val_min=0,
+                                               fr = "compteur des sorties des fichiers Ensight"),
+                                 N3S_ASCII_NOY = BLOC(condition="(IFOENS == -1) and (IFOENV == 0)",
+                                                      fr = "format Ensight N3S ASCII généré par le noyau",
+                                                      IMPPST = SIMP(statut='o',typ='I',defaut=21,val_min=0,val_max=99,
+                                                                    fr = "numéro de fichier Ensight"),
+                                                      FICPST = SIMP(statut='o',typ='TXM',defaut="dessin",
+                                                                    fr = "nom de fichier Ensight")
+                                                      ),
+                                 P0_NOY =        BLOC(condition="((IFOENS == 0) or (IFOENS == 1)) and (IFOENV == 0)",
+                                                      fr = "format Ensight P0 généré par le noyau",
+                                                      IMPEP0 = SIMP(statut='o',typ='I',defaut=22,val_min=0,val_max=99,
+                                                                    fr = "numéro de fichier Ensight"),
+                                                      EMPCHR = SIMP(statut='o',typ='TXM',defaut="./",
+                                                                    fr = "répertoire de fichier Ensight"),
+                                                      ENTCHR = SIMP(statut='o',typ='TXM',defaut="chr",
+                                                                    fr = "préfixe nom de fichier Ensight")
+                                                      )
+                                ),
+        HISTORIQUE_PONCTUEL = FACT(statut='o',max=01,
+                                   fr = "Sondes historiques",
+                                   FICHIERS_HISTORIQUES = FACT(statut='f',max=01,
+                                                               fr = "description des fichiers historiques",
+                                                               EMPHIS = SIMP(statut='o',typ='TXM',defaut="./",
+                                                                             fr="répertoire fichiers historiques"),
+                                                               EXTHIS = SIMP(statut='o',typ='TXM',defaut="hst",
+                                                                             fr="extension fichiers historiques")
+                                                               ),
+                                   NTHIST = SIMP(statut='f',typ='I',defaut=-999,
+                                                 fr="fréquence de sortie des historiques en pas de temps"),
+                                   NTHSAV = SIMP(statut='f',typ='I',defaut=-999,
+                                                 fr="fréquence de sauvegarde des historiques en pas de temps")
+                                  ),
+        OPTIONS_TURBULENCE = FACT(statut='o',max=01,
+                                  fr="modèle de turbulence",
+                                  ITURB  = SIMP(statut='f',fr="laminaire : 0, k-epsilon :1,Rij-epsilon :2",
+                                                typ='I',into=(0,1,2),defaut=1,position='global'),
+                                  MODTURB = BLOC(condition="ITURB == 1",
+                                                 fr = "option k-epsilon",
+                                                 IGRAKE = SIMP(statut='o',typ='I',
+                                                               fr="prise en compte gravité dans k-epsilon",
+                                                               into=(0,1),defaut=0),
+                                                 IDEUCH = SIMP(statut='f',typ='I',
+                                                               fr="prise en compte k-epsilon deux échelles",
+                                                               into=(0,1),defaut=1),
+                                                 IKEKOU = SIMP(statut='f',typ='I',
+                                                               fr="prise en compte couplage en incréments sur k-epsilon",
+                                                               into=(0,1),defaut=1)
+                                                 ),
+                                  TEMPTURB = BLOC(condition="ITURB == 1",
+                                                  fr = "option k-epsilon",
+                                                  ISCALT = SIMP(statut='o',typ=varsca,
+                                                                fr=" identificateur inconnue scalaire température ")
+                                                  )
+                                  ),
+        MARCHE_TEMPS = FACT(statut='o',max=01,
+                            fr = "définition de la marche en temps",
+                            DTREF  = SIMP(statut='o',fr="pas de temps de référence",
+                                                        typ='R',val_min=0),
+                            IDTVAR = SIMP(statut='f',fr="pas de temps constant : 0, variable temps espace : 1, variable temps : 2",
+                                          typ='I',into=(0,1,2),defaut=0,position='global'),
+                                  # probleme trace eficas quand un mot cle position global change
+                            PASVAR = BLOC(condition="IDTVAR != 0",fr="options pas de temps variable",
+                                          XCFMAX = SIMP(statut='o',fr="nombre de Courant-Fourier cible",
+                                                        typ='R',defaut=0.5,val_min=0),
+                                          FMIN =   SIMP(statut='f',fr="rapport min pas calculé DTREF",
+                                                        typ='R',defaut=0.1,val_min=0),
+                                          FMAX =   SIMP(statut='f',fr="rapport max pas calculé DTREF",
+                                                        typ='R',defaut=1000,val_min=0),
+                                          VARRDT = SIMP(statut='f',fr="variation relative max pas calculé entre deux instants",
+                                                        typ='R',defaut=0.1,val_min=0)
+                                          )
+                            ),
+        OPTIONS_EQUATIONS = FACT(statut='o',max=01,
+                                   fr = "propriétés des équations, inconnues principales",
+                                   IMGR   = SIMP(statut='f',fr="utilisation du multigrille pour la résolution des systèmes linéaires",
+                                                 typ='I',into=(0,1),defaut=0),
+                                   IMRGRA = SIMP(statut='f',fr="type de reconstruction des gradients 1 : moindres carrés",
+                                                 typ='I',into=(0,1),defaut=0),
+                                   ),
+        VARIABLES = FACT(statut='o',max=01,
+                         fr = "Restitution des grandeurs principales",
+                         NTLIST = SIMP(statut='f',typ='I',defaut=1,val_min=1,val_max='**',
+                                       fr = "fréquence de sortie (en pas de temps) dans le compte rendu d'éxécution"),
+                         IWARNI = SIMP(statut='f',typ='I',defaut=2,val_min=0,val_max='**',
+                                       fr = "niveau de détail des impressions dans le compte rendu d'éxécution"),
+                         MASVOL1 = FACT(statut='o',max=01,
+                                         fr = "Description de la grandeur restituée : masse volumique",
+                                         NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur : masse volumique",
+                                                       defaut="Masse_vol1"),
+                                         ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                       fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                         ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                       fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                         IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                       fr = "inventaire des sondes utilisées pour la grandeur masse volumique")
+                                        ),
+                        TURB_KE = BLOC(condition="ITURB == 1",
+                                       E_TURB = FACT(statut='o',max=01,
+                                                     fr = "Description de la grandeur restituée : énergie turbulente",
+                                                     NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur : energie turbulente",
+                                                                   defaut="Energie_1"),
+                                                     ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                                   fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                                     ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                                   fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                                     IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                                   fr = "inventaire des sondes utilisées pour la grandeur énergie turbulente")
+                                                    ),
+                                       D_TURB = FACT(statut='o',max=01,
+                                                     fr = "Description de la grandeur restituée : dissipation turbulente",
+                                                     NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur : dissipation turbulente",
+                                                                   defaut="Dissipation"),
+                                                     ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                                   fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                                     ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                                   fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                                     IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                                   fr = "inventaire des sondes utilisées pour la grandeur dissipation turbulente")
+                                                    ),
+                                       V_TURB = FACT(statut='o',max=01,
+                                                     fr = "Description de la grandeur restituée : viscosité turbulente",
+                                                     NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur : viscosité turbulente",
+                                                                   defaut="Visc_turb1"),
+                                                     ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                                   fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                                     ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                                   fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                                     IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                                   fr = "inventaire des sondes utilisées pour la grandeur viscosité turbulente")
+                                                    ),
+                                      )
+                        ),
+        GESTION_CALCUL = FACT(statut='o',max=01,
+                              fr = "calcul suite et numéros de pas de temps début et fin",
+                              ISUITE = SIMP(statut='o',typ='I',defaut=0,into=(0,1),position='global',
+                                            fr = "indicateur calcul suite (1 = suite)"),
+                              NTPABS = SIMP(statut='f',typ='I',defaut=0,
+                                            fr = "numéro dernier pas de temps calcul précédent (initialisation automatique)"),
+                              NTMABS = SIMP(statut='o',typ='I',
+                                            fr = "numéro dernier pas de temps visé (absolu)"),
+                              TTPABS = SIMP(statut='f',typ='R',defaut=0,
+                                            fr = "temps simulation au dernier pas de temps précédent (initialisation automatique)")
+                             ),
+        CONSTANTES_PHYSIQUES=FACT(statut='o',max=01,
+                                  fr = "Grandeurs physiques et modélisation",
+                                  GRAVITE = FACT(statut='o',max=01,
+                                                 fr = "composantes de la gravité",
+                                                 GX = SIMP(statut ='o',typ='R',defaut=0, fr = "gravité selon X"),
+                                                 GY = SIMP(statut ='o',typ='R',defaut=0, fr = "gravité selon Y"),
+                                                 GZ = SIMP(statut ='o',typ='R',defaut=0, fr = "gravité selon Z")
+                                                 ),
+                                  FLUIDE = FACT(statut='o',max=01,
+                                                fr = "propriétés du fluide",
+                                                RO0 = SIMP(statut ='o',typ='R',val_min=0,fr="masse volumique de référence"),
+                                                VISCL0 = SIMP(statut ='o',typ='R',val_min=0,fr="viscosité dynamique de référence"),
+                                                P0 = SIMP(statut ='o',typ='R',val_min=0,fr="pression de référence")
+                                                ),
+                                  TURBULENCE = BLOC(condition="ITURB >= 0",
+                                                    XKAPPA = SIMP(statut ='o',typ='R',defaut=0.42,val_min=0,fr="constante de Karman"),
+                                                    CSTLOG = SIMP(statut ='f',typ='R',defaut=5.2,val_min=0,fr="constante de la loi log"),
+                                                    YPLULI = SIMP(statut ='f',typ='R',defaut=2/0.42,val_min=0,fr="valeur limite de y+ pour la sous couche visqueuse"),
+                                                    CMU = SIMP(statut ='f',typ='R',defaut=0.009,val_min=0,fr="constante C mu"),
+                                                    CE1 = SIMP(statut ='f',typ='R',defaut=1.44,val_min=0,fr="constante C epsilon 1"),
+                                                    CE2 = SIMP(statut ='f',typ='R',defaut=1.92,val_min=0,fr="constante C epsilon 2"),
+                                                    CE3 = SIMP(statut ='f',typ='R',defaut=1.0,val_min=0,fr="constante C epsilon 3"),
+                                                    SIGMAK = SIMP(statut ='f',typ='R',defaut=1.0,val_min=0,fr="nombre de Prandtl pour k en k-epsilon"),
+                                                    SIGMAE = SIMP(statut ='f',typ='R',defaut=1.3,val_min=0,fr="nombre de Prandtl pour epsilon en k-epsilon"),
+                                                    ALMAX = SIMP(statut ='f',typ='R',val_min=0,fr="longueur macroscopique caractéristique du domaine"),
+                                                    UREF = SIMP(statut ='f',typ='R',val_min=0,fr="vitesse caractéristique de l'écoulement pour l'initialisation du k-epsilon")
+                                                    )
+                                  )
+                                 );
+
+CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=fonction,
+                      docu="U4.32.01-d1",reentrant='f',
+         regles=(UN_PARMI('VALE_R','LIST_PARA'),),
+         FONCTION        =SIMP(statut='o',typ=fonction ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE_R          =SIMP(statut='f',typ='R',max='**'),
+         LIST_PARA       =SIMP(statut='f',typ=listr8 ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG","INT") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("EXCLU","CONSTANT","LINEAIRE","INTERPRE") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("EXCLU","CONSTANT","LINEAIRE","INTERPRE") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+
+LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage,
+                   fr="Lecture d'un fichier de maillage",
+                   ang="Readings of a mesh file",
+                   docu="U4.21.01-f",reentrant='n',
+#
+         UNITE           =SIMP(statut='f',typ='I',defaut= 20 ),
+#
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","MED"),
+                            fr="Format du fichier : ASTER ou MED.",
+                            ang="Format of the file : ASTER or MED.",),
+#
+         ABSC_CURV       =FACT(statut='f',min=00,max=01,
+               TOUT          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+#
+         VERI_MAIL       =FACT(statut='d',min=01,max=01,
+               APLAT         =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         ),
+#
+         b_format_med =BLOC( condition = " ( FORMAT == 'MED' ) " ,
+                           fr="Informations complémentaires pour la lecture MED.",
+                           ang="Further information for MED readings.",
+#
+# Pour une lecture dans un fichier MED, on peut préciser le nom sous lequel
+# le maillage y a été enregistré. Par défaut, on va le chercher sous le nom du concept à créer.
+#
+              NOM_MED    = SIMP(statut='f',typ='TXM',
+                            fr="Nom du maillage dans le fichier MED.",
+                            ang="Name of the mesh into the MED file.",),
+#
+              INFO_MED   = SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#
+                           ) ,
+#
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#
+)  ;
+
+DEBUT=MACRO(nom="DEBUT",op=0 ,docu="U4.11.01-f1",repetable='n',
+           fr="Ouverture d une étude. Allocation des ressources mémoire et disque",
+          sd_prod=ops.DEBUT,
+
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+                           into=("OUI","NON"),defaut="OUI"),
+         BASE            =FACT(fr="définition des paramètres associés aux bases JEVEUX",
+                               statut='f',min=01,max=03,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM',
+                                 into=('GLOBALE','VOLATILE','LOCALE'),),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           CAS             =SIMP(statut='f',typ='TXM'),
+           NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+           LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+           LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+         ),
+         IMPRESSION      =FACT(statut='f',min=01,max=03,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='o',typ='I'),
+         ),
+         CATALOGUE       =FACT(statut='f',min=01,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+         CODE            =FACT("définition d un nom pour l'esemble d'une étude",
+                               statut='f',min=01,max=01,
+           NOM             =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I',defaut=15),
+         ),
+         DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
+                               statut='f',min=01,max=01,
+           JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+                                 statut='f',typ='TXM',into=('TEST',)),
+         ),
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=01,max=01,
+           GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
+           TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
+           TAILLE          =SIMP(statut='f',typ='I'),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut=800.),
+           PARTITION       =SIMP(statut='f',typ='R'),
+         ),
+ );
+
+FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude",
+         docu="U4.11.02-f",
+         RETASSAGE       =SIMP(fr="provoque le retassage de la base GLOBALE",
+                               statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         PERFORMANCE     =SIMP(fr="provoque l'impression d'un résumé des mesures de temps ",
+                               statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+         INFO_RESU       =SIMP(fr="provoque l'impression des informations sur les structures de données",
+                               statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="MESSAGE"),
+)  ;
+
+
diff --git a/Minicode/cata_saturne2.py b/Minicode/cata_saturne2.py
new file mode 100755 (executable)
index 0000000..c934532
--- /dev/null
@@ -0,0 +1,1037 @@
+# debut entete
+import Accas
+from Accas import AU_MOINS_UN,UN_PARMI,EXCLUS,PRESENT_PRESENT
+from Accas import ENSEMBLE,PRESENT_ABSENT
+from Accas import JDC_CATA,NIVEAU
+from Accas import OPER,PROC,MACRO,FORM
+from Accas import SIMP,FACT,BLOC
+from Accas import EVAL,PARAMETRE,COMMENTAIRE,PARAMETRE_EVAL,COMMANDE_COMM
+from Accas import ASSD,CO,GEOM,fonction,geom,assd
+#
+__version__="$Name:  $"
+__Id__="$Id: cata_saturne.py,v 1.10 2000/10/24 10:32:56 iliade Exp $"
+#
+
+import ops
+
+JdC = JDC_CATA(code='SATURNE',
+               execmodul=None,
+               regles = (AU_MOINS_UN('CALCUL_SATURNE'),),
+              )
+
+# P. RASCLE MMN
+# remarques diverses sur le catalogue Saturne
+# - dans les blocs, il faut au moins un mot clé de statut obligatoire
+# probleme de rafraichissement des blocs dépendants quand la valeur d'un mot cle global (ITURB) passe de 1 à 0
+
+class sonde(ASSD):pass
+class varsca(ASSD):pass
+class flusca(ASSD):pass
+class varpre(ASSD):pass
+class varvitx(ASSD):pass
+class varvity(ASSD):pass
+class varvitz(ASSD):pass
+class eturb(ASSD):pass
+class dturb(ASSD):pass
+class tsr11(ASSD):pass
+class tsr22(ASSD):pass
+class tsr33(ASSD):pass
+class tsr12(ASSD):pass
+class tsr13(ASSD):pass
+class tsr23(ASSD):pass
+class resti(ASSD):pass
+
+# fin entete
+
+INCLUDE=MACRO(nom="INCLUDE",op=-1,docu="U4.13.01-e",
+             fr="Débranchement vers un fichier de commandes secondaires",
+             sd_prod=ops.INCLUDE,op_init=ops.INCLUDE_context,fichier_ini=1,
+         UNITE = SIMP(statut='o',typ='I'),
+         INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+);
+
+POURSUITE=MACRO(nom="POURSUITE",op=0,repetable='n',fr="Poursuite d une étude",
+                docu="U4.11.03-f1",sd_prod = ops.POURSUITE,
+                op_init = ops.POURSUITE_context,fichier_ini = 1,
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+                           into=("OUI","NON"),defaut="OUI"),
+         BASE            =FACT(fr="définition des parmètres associés aux bases JEVEUX",
+                               statut='f',min=1,max=3,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           CAS             =SIMP(statut='f',typ='TXM'),
+           NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+           LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+           LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+         ),
+         IMPRESSION      =FACT(statut='f',min=1,max=3,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='o',typ='I'),
+         ),
+         CATALOGUE       =FACT(statut='f',min=1,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+         DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
+                               statut='f',min=1,max=1,
+           JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+                                 statut='f',typ='TXM',into=('TES',)),
+         ),
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=1,max=1,
+           GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
+           TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
+           TAILLE          =SIMP(statut='f',typ='I'),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut=800.),
+           PARTITION       =SIMP(statut='f',typ='R' ),
+         ),
+         CODE            =FACT("définition d un nom pour l'esemble d'une étude",
+                               statut='f',min=1,max=1,
+           NOM             =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I',defaut=15),
+         ),
+)  ;
+
+FORMULE = FORM( nom='FORMULE',op=-5,sd_prod=fonction,
+                fr="Définition d une fonction",reentrant = 'n',
+                regles=(UN_PARMI('REEL','ENTIER','COMPLEXE'),),
+                REEL = SIMP(typ = 'shell',max=1),
+                ENTIER = SIMP(typ = 'shell',max=1),
+                COMPLEXE = SIMP(typ = 'shell',max=1),
+) ;
+
+DEFI_SONDE = OPER(nom="DEFI_SONDE",op= 1,sd_prod=sonde,
+     docu="U2D1",
+     fr="définition d'une sonde historique avec ses coordonnées",
+                  X = SIMP(statut ='o',typ='R',
+                           fr="coordonnée X de la sonde"),
+                  Y = SIMP(statut ='o',typ='R',
+                           fr="coordonnée Y de la sonde"),
+                  Z = SIMP(statut ='o',typ='R',
+                           fr="coordonnée Z de la sonde")
+                 );
+
+def defi_scala_prod(**args):
+   return varsca
+
+DEFI_SCALA = OPER(nom="DEFI_SCALA",op=2,sd_prod=defi_scala_prod,
+fr="définition d'une inconnue scalaire avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_FLUSCA = OPER(nom="DEFI_FLUSCA",op=2,sd_prod=flusca,fr="définition des fluctuations d'une inconnue scalaire avec ses paramètres physico numériques",
+                  VARFL  = SIMP(statut='o',typ=varsca,fr="scalaire associé au calcul de la variance des fluctuations"),
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable"),
+                                RVARFL = SIMP(statut='o',typ='R',val_min=0,defaut=0.8,
+                                                       fr="nombre de Prandtl pour la variance des fluctuations du scalaire")
+                                )
+                  );
+
+DEFI_PRESSION = OPER(nom="DEFI_PRESSION",op=2,sd_prod=varpre,fr="définition del'inconnue pression avec ses paramètres physico numériques",
+                   NUMERIC = FACT(statut='o',max=01,
+                                  fr="propriétés de l'équation de pression",
+                                  ICONV  = SIMP(statut='o',typ='I',defaut=0,into=(0,1),
+                                                fr="indicateur de convection"),
+                                  ISTAT  = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                fr="présence terme instationnaire dans les matrices"),
+                                  IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="diffusion"),
+                                  IDIRCL = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                  SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                          BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                        fr="pourcentage schéma convectif au second ordre"),
+                                                          ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                        fr ="type schéma convectif au second ordre 1 : centré")
+                                                          ),
+                                  NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                  EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                fr="précision relative pour la résolution des systèmes linéaires"),
+                                  IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                fr="type de limitation des gradients"),
+                                  NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                fr="reconstruction des gradients"),
+                                  NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                  CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                fr="facteur de limitation des gradients"),
+                                  EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                fr="précision relative pour la reconstruction itérative des gradients")
+                                  ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée",
+                                                defaut="Pression"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour la grandeur"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour la grandeur"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour la grandeur"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée à la grandeur"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                    );
+
+DEFI_VITX = OPER(nom="DEFI_VITX",op=2,sd_prod=varvitx,fr="définition de l'inconnue vitesse X avec ses paramètres physico numériques",
+                   NUMERIC = FACT(statut='o',max=01,
+                                  fr="propriétés de l'équation de vitesse X",
+                                  ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                fr="indicateur de convection"),
+                                  ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="présence terme instationnaire dans les matrices"),
+                                  IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="diffusion"),
+                                  IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                  SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                          BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                        fr="pourcentage schéma convectif au second ordre"),
+                                                          ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                        fr ="type schéma convectif au second ordre 1 : centré")
+                                                          ),
+                                  NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                  EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                fr="précision relative pour la résolution des systèmes linéaires"),
+                                  IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                fr="type de limitation des gradients"),
+                                  NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                fr="reconstruction des gradients"),
+                                  NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                  CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                fr="facteur de limitation des gradients"),
+                                  EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                fr="précision relative pour la reconstruction itérative des gradients")
+                                  ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée",
+                                                defaut="vitesse_u1"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour la grandeur"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour la grandeur"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour la grandeur"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée à la grandeur"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                );
+
+DEFI_VITY = OPER(nom="DEFI_VITY",op=2,sd_prod=varvity,fr="définition de l'inconnue vitesse Y avec ses paramètres physico numériques",
+                   NUMERIC = FACT(statut='o',max=01,
+                                  fr="propriétés de l'équation de vitesse Y",
+                                  ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                fr="indicateur de convection"),
+                                  ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="présence terme instationnaire dans les matrices"),
+                                  IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="diffusion"),
+                                  IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                  SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                          BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                        fr="pourcentage schéma convectif au second ordre"),
+                                                          ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                        fr ="type schéma convectif au second ordre 1 : centré")
+                                                          ),
+                                  NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                  EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                fr="précision relative pour la résolution des systèmes linéaires"),
+                                  IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                fr="type de limitation des gradients"),
+                                  NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                fr="reconstruction des gradients"),
+                                  NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                  CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                fr="facteur de limitation des gradients"),
+                                  EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                fr="précision relative pour la reconstruction itérative des gradients")
+                                  ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée",
+                                                defaut="vitesse_v1"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour la grandeur"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour la grandeur"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour la grandeur"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée à la grandeur"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                );
+
+DEFI_VITZ = OPER(nom="DEFI_VITZ",op=2,sd_prod=varvitz,fr="définition de l'inconnue vitesse Z avec ses paramètres physico numériques",
+                   NUMERIC = FACT(statut='o',max=01,
+                                  fr="propriétés de l'équation de vitesse Z",
+                                  ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                fr="indicateur de convection"),
+                                  ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="présence terme instationnaire dans les matrices"),
+                                  IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="diffusion"),
+                                  IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                  SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                          BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                        fr="pourcentage schéma convectif au second ordre"),
+                                                          ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                        fr ="type schéma convectif au second ordre 1 : centré")
+                                                          ),
+                                  NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                  EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                fr="précision relative pour la résolution des systèmes linéaires"),
+                                  IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                fr="type de limitation des gradients"),
+                                  NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                fr="reconstruction des gradients"),
+                                  NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                  CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                fr="facteur de limitation des gradients"),
+                                  EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                fr="précision relative pour la reconstruction itérative des gradients")
+                                  ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée",
+                                                defaut="vitesse_w1"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour la grandeur"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour la grandeur"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour la grandeur"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée à la grandeur"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable"),
+                                )
+                );
+
+
+DEFI_ETURB = OPER(nom="DEFI_ETURB",op=2,sd_prod=eturb,fr="définition de l'inconnue energie turbulente k-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                    fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_DTURB = OPER(nom="DEFI_DTURB",op=2,sd_prod=dturb,fr="définition de l'inconnue dissipation turbulente k-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR11 = OPER(nom="DEFI_TSR11",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R11 Rij-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR22 = OPER(nom="DEFI_TSR22",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R22 Rij-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR33 = OPER(nom="DEFI_TSR33",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R33 Rij-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR12 = OPER(nom="DEFI_TSR12",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R12 Rij-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR13 = OPER(nom="DEFI_TSR13",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R13 Rij-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR23 = OPER(nom="DEFI_TSR23",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R23 Rij-eps avec ses paramètres physico numériques",
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+
+DEFI_RESTI = OPER(nom="DEFI_RESTI",op=2,sd_prod=resti,fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                  );
+
+CALCUL_SATURNE = PROC(nom = "CALCUL_SATURNE",op = 1,
+                      fr = "définition des paramètres généraux pour un calcul Saturne",
+                      docu = "néant",reentrant = 'n',
+        ENVELOPPE = FACT(statut='o',max=01,fr = "gestion de l'enveloppe",
+                         IFOENV = SIMP(statut='o',typ='I',defaut=2,into=(0,1,2),position='global',
+                                       fr = "mode de communication enveloppe solveur"),
+                         ENVTOSOLV = BLOC(condition="IFOENV > 0",
+                                          fr = "liaison enveloppe vers solveur",
+                                          IMPEVI = SIMP(statut='o',typ='I',defaut=13,val_min=0,val_max=99,
+                                                        fr = "numéro de fichier enveloppe vers solveur"),
+                                          FICEVI = SIMP(statut='o',typ='TXM',defaut="enveloppe_vers_solveur          ",
+                                                        fr = "nom de fichier enveloppe vers solveur")
+                                         ),
+                         SOLVTOENV = BLOC(condition="IFOENV > 0",
+                                          fr = "liaison solveur vers enveloppe",
+                                          IMPEVO = SIMP(statut='o',typ='I',defaut=14,val_min=0,val_max=99,
+                                                        fr = "numéro de fichier solveur vers enveloppe"),
+                                          FICEVO = SIMP(statut='o',typ='TXM',defaut="solveur_vers_enveloppe          ",
+                                                        fr = "nom de fichier solveur vers enveloppe")
+                                         )
+                        ),
+        FICHIERS_CALCUL = FACT(statut='f',max=01,
+                               fr ="définition des fichiers géométrie, suite, stop",
+                               GEOMETRIE = BLOC(condition="IFOENV == 0",
+                                                fr = "fichier géométrique (pas d'enveloppe)",
+                                                IMPGEO = SIMP(statut='o',typ='I',defaut=10,val_min=0,val_max=99,
+                                                              fr = "numéro de fichier géométrique"),
+                                                FICGEO = SIMP(statut='o',typ='TXM',defaut="geomet",
+                                                              fr = "nom de fichier géométrique")
+                                               ),
+                               SUITE_AMONT = BLOC(condition="ISUITE == 1",
+                                                  fr = "fichier suite amont",
+                                                  IMPAMO = SIMP(statut='o',typ='I',defaut=11,val_min=0,val_max=99,
+                                                              fr = "numéro de fichier suite amont"),
+                                                  FICGEO = SIMP(statut='o',typ='TXM',defaut="suiamo",
+                                                              fr = "nom de fichier suite amont"),
+                                                  IFOAMO = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                              fr = "format du fichier suite amont, 0 = binaire")
+                                                 ),
+                              ),
+        POST_PROC_ENSIGHT = FACT(statut='f',max=01,
+                                 fr = "options de post processing par Ensight",
+                                 IFOENS = SIMP(statut='f',typ='I',defaut=-2,into=(-2,-1,0,1),
+                                               fr = "option type de fichier et processus générateur"),
+                                 NTCHR  = SIMP(statut='f',typ='I',defaut=-1,
+                                               fr = "périodicité de sortie des fichiers Ensight"),
+                                 ITCHR  = SIMP(statut='f',typ='I',defaut=0,val_min=0,
+                                               fr = "compteur des sorties des fichiers Ensight"),
+                                 N3S_ASCII_NOY = BLOC(condition="(IFOENS == -1) and (IFOENV == 0)",
+                                                      fr = "format Ensight N3S ASCII généré par le noyau",
+                                                      IMPPST = SIMP(statut='o',typ='I',defaut=21,val_min=0,val_max=99,
+                                                                    fr = "numéro de fichier Ensight"),
+                                                      FICPST = SIMP(statut='o',typ='TXM',defaut="dessin",
+                                                                    fr = "nom de fichier Ensight")
+                                                      ),
+                                 P0_NOY =        BLOC(condition="((IFOENS == 0) or (IFOENS == 1)) and (IFOENV == 0)",
+                                                      fr = "format Ensight P0 généré par le noyau",
+                                                      IMPEP0 = SIMP(statut='o',typ='I',defaut=22,val_min=0,val_max=99,
+                                                                    fr = "numéro de fichier Ensight"),
+                                                      EMPCHR = SIMP(statut='o',typ='TXM',defaut="./",
+                                                                    fr = "répertoire de fichier Ensight"),
+                                                      ENTCHR = SIMP(statut='o',typ='TXM',defaut="chr",
+                                                                    fr = "préfixe nom de fichier Ensight")
+                                                      )
+                                ),
+        HISTORIQUE_PONCTUEL = FACT(statut='o',max=01,
+                                   fr = "Sondes historiques",
+                                   NTHIST = SIMP(statut='f',typ='I',defaut=-999,
+                                                 fr="fréquence de sortie des historiques en pas de temps"),
+                                   NTHSAV = SIMP(statut='f',typ='I',defaut=-999,
+                                                 fr="fréquence de sauvegarde des historiques en pas de temps")
+                                  ),
+        OPTIONS_TURBULENCE = FACT(statut='o',max=01,
+                                  fr="modèle de turbulence",
+                                  ITURB  = SIMP(statut='f',fr="laminaire : 0, k-epsilon :1,Rij-epsilon :2",
+                                                typ='I',into=(0,1,2),defaut=1,position='global'),
+                                  MODTURB = BLOC(condition="ITURB == 1",
+                                                 fr = "option k-epsilon",
+                                                 IGRAKE = SIMP(statut='o',typ='I',
+                                                               fr="prise en compte gravité dans k-epsilon",
+                                                               into=(0,1),defaut=0),
+                                                 IDEUCH = SIMP(statut='f',typ='I',
+                                                               fr="prise en compte k-epsilon deux échelles",
+                                                               into=(0,1),defaut=1),
+                                                 IKEKOU = SIMP(statut='f',typ='I',
+                                                               fr="prise en compte couplage en incréments sur k-epsilon",
+                                                               into=(0,1),defaut=1)
+                                                 ),
+                                  TEMPTURB = BLOC(condition="ITURB == 1",
+                                                  fr = "option k-epsilon",
+                                                  ISCALT = SIMP(statut='o',typ=varsca,
+                                                                fr=" identificateur inconnue scalaire température ")
+                                                  )
+                                  ),
+        MARCHE_TEMPS = FACT(statut='o',max=01,
+                            fr = "définition de la marche en temps",
+                            DTREF  = SIMP(statut='o',fr="pas de temps de référence",
+                                                        typ='R',val_min=0),
+                            IDTVAR = SIMP(statut='f',fr="pas de temps constant : 0, variable temps espace : 1, variable temps : 2",
+                                          typ='I',into=(0,1,2),defaut=0,position='global'),
+                                  # probleme trace eficas quand un mot cle position global change
+                            PASVAR = BLOC(condition="IDTVAR != 0",fr="options pas de temps variable",
+                                          XCFMAX = SIMP(statut='o',fr="nombre de Courant-Fourier cible",
+                                                        typ='R',defaut=0.5,val_min=0),
+                                          FMIN =   SIMP(statut='f',fr="rapport min pas calculé DTREF",
+                                                        typ='R',defaut=0.1,val_min=0),
+                                          FMAX =   SIMP(statut='f',fr="rapport max pas calculé DTREF",
+                                                        typ='R',defaut=1000,val_min=0),
+                                          VARRDT = SIMP(statut='f',fr="variation relative max pas calculé entre deux instants",
+                                                        typ='R',defaut=0.1,val_min=0)
+                                          )
+                            ),
+        OPTIONS_EQUATIONS = FACT(statut='o',max=01,
+                                   fr = "propriétés des équations, inconnues principales",
+                                   IMGR   = SIMP(statut='f',fr="utilisation du multigrille pour la résolution des systèmes linéaires",
+                                                 typ='I',into=(0,1),defaut=0),
+                                   IMRGRA = SIMP(statut='f',fr="type de reconstruction des gradients 1 : moindres carrés",
+                                                 typ='I',into=(0,1),defaut=0),
+                                   ),
+        VARIABLES = FACT(statut='o',max=01,
+                         fr = "Restitution des grandeurs principales",
+                         NTLIST = SIMP(statut='f',typ='I',defaut=1,val_min=1,val_max='**',
+                                       fr = "fréquence de sortie (en pas de temps) dans le compte rendu d'éxécution"),
+                         IWARNI = SIMP(statut='f',typ='I',defaut=2,val_min=0,val_max='**',
+                                       fr = "niveau de détail des impressions dans le compte rendu d'éxécution"),
+                        ),
+        GESTION_CALCUL = FACT(statut='o',max=01,
+                              fr = "calcul suite et numéros de pas de temps début et fin",
+                              ISUITE = SIMP(statut='o',typ='I',defaut=0,into=(0,1),position='global',
+                                            fr = "indicateur calcul suite (1 = suite)"),
+                              NTPABS = SIMP(statut='f',typ='I',defaut=0,
+                                            fr = "numéro dernier pas de temps calcul précédent (initialisation automatique)"),
+                              NTMABS = SIMP(statut='o',typ='I',
+                                            fr = "numéro dernier pas de temps visé (absolu)"),
+                              TTPABS = SIMP(statut='f',typ='R',defaut=0,
+                                            fr = "temps simulation au dernier pas de temps précédent (initialisation automatique)")
+                             ),
+        CONSTANTES_PHYSIQUES=FACT(statut='o',max=01,
+                                  fr = "Grandeurs physiques et modélisation",
+                                  TURBULENCE = BLOC(condition="ITURB >= 0",
+                                                    XKAPPA = SIMP(statut ='o',typ='R',defaut=0.42,val_min=0,fr="constante de Karman"),
+                                                    CSTLOG = SIMP(statut ='f',typ='R',defaut=5.2,val_min=0,fr="constante de la loi log"),
+                                                    YPLULI = SIMP(statut ='f',typ='R',defaut=2/0.42,val_min=0,fr="valeur limite de y+ pour la sous couche visqueuse"),
+                                                    CMU = SIMP(statut ='f',typ='R',defaut=0.009,val_min=0,fr="constante C mu"),
+                                                    CE1 = SIMP(statut ='f',typ='R',defaut=1.44,val_min=0,fr="constante C epsilon 1"),
+                                                    CE2 = SIMP(statut ='f',typ='R',defaut=1.92,val_min=0,fr="constante C epsilon 2"),
+                                                    CE3 = SIMP(statut ='f',typ='R',defaut=1.0,val_min=0,fr="constante C epsilon 3"),
+                                                    SIGMAK = SIMP(statut ='f',typ='R',defaut=1.0,val_min=0,fr="nombre de Prandtl pour k en k-epsilon"),
+                                                    SIGMAE = SIMP(statut ='f',typ='R',defaut=1.3,val_min=0,fr="nombre de Prandtl pour epsilon en k-epsilon"),
+                                                    ALMAX = SIMP(statut ='f',typ='R',val_min=0,fr="longueur macroscopique caractéristique du domaine"),
+                                                    UREF = SIMP(statut ='f',typ='R',val_min=0,fr="vitesse caractéristique de l'écoulement pour l'initialisation du k-epsilon")
+                                                    )
+                                  )
+                                 );
+
diff --git a/Minicode/editeur.ini b/Minicode/editeur.ini
new file mode 100644 (file)
index 0000000..1cb03d6
--- /dev/null
@@ -0,0 +1,23 @@
+import os
+
+import prefs
+
+rep_cata = prefs.REPINI
+
+# Accès à la documentation 
+path_doc              = os.path.join(rep_cata,'Doc')
+exec_acrobat    =       "/usr/bin/xpdf"
+# Utilisateur/Développeur
+isdeveloppeur   =       "NON"
+path_cata_dev   =       "/tmp/cata"
+# Répertoire temporaire
+rep_travail     =   "/tmp"
+
+# Choix des catalogues
+rep_mat="bidon"
+
+catalogues = (
+  ('SATURNE','v1',os.path.join(rep_cata,'cata_saturne2.py'),'asterv5'),
+  ('SATURNE','v2',os.path.join(rep_cata,'cata_saturne.py'),'python','defaut'),
+             )
+
diff --git a/Minicode/eficas_mini.py b/Minicode/eficas_mini.py
new file mode 100755 (executable)
index 0000000..c8a97ac
--- /dev/null
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+"""
+    Ce module sert à lancer EFICAS configuré pour Code_Mini
+"""
+# Modules Python
+import sys
+
+# Modules Eficas
+import prefs
+sys.path[:0]=[prefs.INSTALLDIR]
+
+import Editeur
+from Editeur import eficas_go
+
+if len(sys.argv) > 1 :
+    # on veut ouvrir un fichier directement au lancement d'Eficas
+    eficas_go.lance_eficas(code='SATURNE',fichier = sys.argv[1])
+else:
+    # on veut ouvrir Eficas 'vide'
+    eficas_go.lance_eficas(code='SATURNE')
+
diff --git a/Minicode/ops.py b/Minicode/ops.py
new file mode 100644 (file)
index 0000000..560e898
--- /dev/null
@@ -0,0 +1,219 @@
+#
+__version__="$Name: FR_28_06_10_00 $"
+__Id__="$Id: ops.py,v 1.12.18.3 2001/06/19 12:24:51 iliade Exp $"
+#
+
+# Modules Python
+import types
+import string,linecache,os,traceback,re
+
+# Modules Eficas
+import Accas
+from Accas import ASSD
+
+def DEBUT(self,PAR_LOT,**args):
+   """
+       Fonction sdprod de la macro DEBUT
+   """
+   self.jdc.set_par_lot(PAR_LOT)
+
+def POURSUITE(self,PAR_LOT,**args):
+   """
+       Fonction sdprod de la macro POURSUITE
+   """
+   self.jdc.set_par_lot(PAR_LOT)
+   if self.codex and os.path.isfile("glob.1"):
+      # Le module d'execution est accessible et glob.1 est present
+      if hasattr(self,'fichier_init'):return
+      self.fichier_init='glob.1'
+      self.jdc.initexec()
+      lot,ier,lonuti,concepts=self.codex.poursu(self,1)
+      self.icmd=lonuti
+      #print "Fin de debut",ier,lot,lonuti
+      pos=0
+      d={}
+      while pos+80 < len(concepts)+1:
+        nomres=concepts[pos:pos+8]
+        concep=concepts[pos+8:pos+24]
+        nomcmd=concepts[pos+24:pos+40]
+        statut=concepts[pos+40:pos+48]
+        if nomres[0] not in (' ','.','&') and statut != '&DETRUIT':
+           exec nomres+'='+string.lower(concep)+'()' in self.parent.g_context,d
+        pos=pos+80
+      for k,v in d.items():
+        self.parent.NommerSdprod(v,k)
+      self.g_context=d
+      return
+   else:
+      # Si le module d'execution n est pas accessible ou glob.1 absent on 
+      # demande un fichier (EFICAS)
+      # Il faut éviter de réinterpréter le fichier à chaque appel de
+      # POURSUITE
+      if hasattr(self,'fichier_init'):
+         return
+      self.make_poursuite()
+
+def POURSUITE_context(self,d):
+   """
+       Fonction op_init de la macro POURSUITE
+   """
+   # self représente la macro POURSUITE ...
+   d.update(self.g_context)
+   # Une commande POURSUITE n'est possible qu'au niveau le plus haut
+   # On ajoute directement les concepts dans le contexte du jdc
+   # XXX est ce que les concepts ne sont pas ajoutés plusieurs fois ??
+   for v in self.g_context.values():
+      if isinstance(v,ASSD) : self.jdc.sds.append(v)
+
+def INCLUDE(self,UNITE,**args):
+   """ 
+       Fonction sd_prod pour la macro INCLUDE
+   """
+   if hasattr(self,'unite'):return
+   self.unite=UNITE
+
+   if self.jdc and self.jdc.par_lot == 'NON':
+      # On est en mode commande par commande
+      # On teste la validite de la commande avec interruption eventuelle
+      cr=self.report()
+      self.parent.cr.add(cr)
+      if not cr.estvide():
+         raise EOFError
+
+   self.make_include(unite=UNITE)
+
+def INCLUDE_context(self,d):
+   """ 
+       Fonction op_init pour macro INCLUDE
+   """
+   for k,v in self.g_context.items():
+      d[k]=v
+
+def detruire(self,d):
+   """
+       Cette fonction est la fonction op_init de la PROC DETRUIRE
+   """
+   sd=[]
+   for mc in self["CONCEPT"]:
+     mcs=mc["NOM"]
+     if type(mcs) == types.ListType or type(mcs) == types.TupleType:
+       for e in mcs:
+         if isinstance(e,ASSD):
+           sd.append(e)
+           e=e.nom
+         if d.has_key(e):del d[e]
+     else:
+       if isinstance(mcs,ASSD):
+         sd.append(mcs)
+         mcs=mcs.nom
+       if d.has_key(mcs):del d[mcs]
+   for s in sd:
+     # On signale au parent que le concept s n'existe plus apres l'étape self
+     self.parent.delete_concept_after_etape(self,s)
+
+def subst_materiau(text,NOM_MATER,EXTRACTION):
+   """
+       Cette fonction retourne un texte obtenu à partir du texte passé en argument (text)
+       en substituant le nom du materiau par NOM_MATER 
+       et en réalisant les extractions spéciifées dans EXTRACTION
+   """
+   lines=string.split(text,'\n')
+   if EXTRACTION:
+     ll=[]
+     regmcf=re.compile(r" *(.*) *= *_F\( *## +(.*) +(.*)")
+     regmcs=re.compile(r" *(.*) *= *([^ ,]*) *, *## +([^ ]*) *([^ ]*)")
+     regfin=re.compile(r" *\) *")
+     temps={};lmcf=[]
+     for e in EXTRACTION:
+       mcf=e['COMPOR']
+       lmcf.append(mcf)
+       temps[mcf]=e['TEMP_EVAL']
+     FLAG=0
+     for l in lines:
+       m=regmcf.match(l)
+       if m: # On a trouve un mot cle facteur "commentarise"
+         if m.group(2) == "SUBST": # il est de plus substituable
+           if temps.has_key(m.group(3)): # Il est a substituer
+             ll.append(" "+m.group(3)+"=_F(")
+             mcf=m.group(3)
+             TEMP=temps[mcf]
+             FLAG=1 # Indique que l'on est en cours de substitution
+           else: # Il n est pas a substituer car il n est pas dans la liste demandee
+             ll.append(l)
+         else: # Mot cle facteur commentarise non substituable
+           ll.append(l)
+       else:  # La ligne ne contient pas un mot cle facteur commentarise
+         if FLAG == 0: # On n est pas en cours de substitution
+           ll.append(l)
+         else: # On est en cours de substitution. On cherche les mots cles simples commentarises
+           m=regmcs.match(l)
+           if m: # On a trouve un mot cle simple commentarise
+             if m.group(3) == "EVAL":
+               ll.append("  "+m.group(1)+' = EVAL("'+m.group(4)+"("+str(TEMP)+')"),')
+             elif m.group(3) == "SUPPR":
+              pass
+             else:
+              ll.append(l)
+           else: # On cherche la fin du mot cle facteur en cours de substitution
+             m=regfin.match(l)
+             if m: # On l a trouve. On le supprime de la liste
+               FLAG=0
+               del temps[mcf]
+             ll.append(l)
+   else:
+     ll=lines
+
+   for l in ll:
+     print l
+   lines=ll
+   ll=[]
+   for l in lines:
+     l=re.sub(" *MAT *= *",NOM_MATER+" = ",l,1)
+     ll.append(l)
+   text=string.join(ll,'\n')
+   return text
+
+def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER,
+                    EXTRACTION,INFO,**args):
+  """ 
+      Fonction sd_prod pour la macro INCLUDE_MATERIAU
+  """
+  mat=string.join((NOM_AFNOR,'_',TYPE_MODELE,'_',VARIANTE,'.',TYPE_VALE),'')
+  if not hasattr(self,'mat') or self.mat != mat:
+    self.mat=mat
+    # On récupère le répertoire des matériaux dans les arguments 
+    # supplémentaires du JDC
+    rep_mat=self.jdc.args["rep_mat"]
+    f=os.path.join(rep_mat,mat)
+    if not os.path.isfile(f):
+       raise "Erreur sur le fichier materiau: "+f
+    # Les materiaux sont uniquement disponibles en syntaxe Python
+    # On lit le fichier et on supprime les éventuels \r
+    text=string.replace(open(f).read(),'\r\n','\n')
+    # On effectue les substitutions necessaires
+    self.prefix=NOM_MATER
+    self.text= subst_materiau(text,NOM_MATER,EXTRACTION)
+    if INFO == 2:
+      print "INCLUDE_MATERIAU: ", self.mat,' ',NOM_MATER,'\n'
+      print self.text
+    # on execute le texte fourni dans le contexte forme par
+    # le contexte de l etape pere (global au sens Python)
+    # et le contexte de l etape (local au sens Python)
+    # Il faut auparavant l'enregistrer aupres du module linecache (utile pour nommage.py)
+    linecache.cache[f]=0,0,string.split(self.text,'\n'),f
+    code=compile(self.text,f,'exec')
+    if self.jdc.par_lot == 'NON':
+      # On est en mode commande par commande
+      # On teste la validite de la commande avec interruption eventuelle
+      cr=self.report()
+      self.parent.cr.add(cr)
+      if not cr.estvide():
+        raise EOFError
+      # Et en plus il faut executer la fonction ops014 avant les sous
+      # commandes car le prefixe PRFXCO doit etre initialise dans le Fortran
+      self.codex.opsexe(self,0,-1,-self.definition.op)  
+
+    d={}
+    self.g_context = d
+    self.contexte_fichier_init = d
+    exec code in self.parent.g_context,d
diff --git a/Minicode/prefs.py b/Minicode/prefs.py
new file mode 100644 (file)
index 0000000..f3d82ae
--- /dev/null
@@ -0,0 +1,21 @@
+import os
+
+# REPINI sert à localiser le fichier editeur.ini
+# Obligatoire
+REPINI=os.path.dirname(os.path.abspath(__file__))
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+# Obligatoire
+INSTALLDIR=os.path.join(REPINI,'..')
+
+# CODE_PATH sert à localiser Noyau et Validation éventuellement
+# non contenus dans la distribution EFICAS
+# Par défaut on utilise les modules de INSTALLDIR
+# Peut valoir None (defaut)
+CODE_PATH = None
+#CODE_PATH = os.path.join(REPINI,'../../Superv')
+
+# ICONDIR sert à localiser le répertoire contenant les icones
+# Par défaut on utilise le répertoire icons dans Editeur
+ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
+
diff --git a/Misc/Cyclops.py b/Misc/Cyclops.py
new file mode 100644 (file)
index 0000000..ae8e824
--- /dev/null
@@ -0,0 +1,1005 @@
+# Module Cyclops version 0.9.4.
+# Released to the public domain 18-Jul-1999,
+# by Tim Peters (tim_one@email.msn.com).
+
+# Provided as-is; use at your own risk; no warranty; no promises; enjoy!
+
+# Some parts of the code, and many ideas, were stolen with gratitude from:
+#     Lars Marius Garshol's Plumbo.py.
+#     Guido van Rossum.
+#     Python's standard library module repr.py.
+
+"""Module Cyclops -- stare at cycles in Python data structures.
+
+Cyclops started life as a faster implementation of Lars Marius
+Garshol's Plumbo.py, but almost instantly diverged due to feature
+bloat.
+
+The only object of real interest is class CycleFinder.  First get an
+instance of that:
+
+import Cyclops
+z = Cyclops.CycleFinder()
+
+This creates a cycle-tracker with an empty "root set".  Then tell z
+which objects you're curious about (more on that later).
+
+After running your regular code, tell z to look for cycles:
+
+z.find_cycles(purge_dead_roots=0)
+    Look for cycles reachable from the root set.
+    Return 1 if a cycle was found, else 0.
+    If optional arg purge_dead_roots is true, first remove objects
+    from the root set whose true refcount (exclusive of CycleFinder
+    internal references) is 0.
+    See also method install_cycle_filter.
+
+Then various methods can be used to get useful reports.  Which are
+*most* useful you'll just have to play with.  If you have a few small
+cycles, show_cycles is very revealing; if you have many cycles,
+show_sccs and show_arcs *may* cut to the heart of the problem quickly.
+
+z.show_stats()
+    Print some stats about the last run of find_cycles:  number of
+    distinct structured objects reachable from the root set, number of
+    distinct objects involved in a cycle, number of cycles found,
+    number of strongly connected components, number of objects in the
+    root set, and number of edges (graph arcs) examined.
+
+z.show_cycles()
+    Print each cycle found to stdout.
+
+z.show_cycleobjs(compare=typename_address_cmp)
+    Print a listing of all objects involved in some cycle.  The
+    objects are first sorted via the optional "compare" function.  By
+    default, sorts first by type name and then by address (id); among
+    objects of instance type, sorts by the instances' class names;
+    among objects of class type, sorts by the classes' names.
+
+x.show_sccs(compare=typename_address_cmp)
+    Print a listing of cycle objects partitioned into strongly
+    connected components (that is, the largest groupings possible such
+    that each object in an SCC is reachable from every other object in
+    that SCC).  Within each SCC, objects are sorted as for
+    show_cycleobjs.
+
+z.show_arcs(compare=None)
+    Print a listing of all arc types involved in some cycle.  An arc
+    is characterized by:
+    1) its source object type or class,
+    2) the selector (e.g. attribute) from the source, and
+    3) its destination object type or class.
+    The output is a table with four columns:  count, source, selector,
+    destination.  The table is sorted by default on columns 2, 3, 4
+    in that order; the first column (count) is ignored.  Specify an
+    alternative compare function to change the sort; the compare
+    function sees pairs of the form
+        ((source_type, selector, destination_type), count)
+    where each element of the triple is a string and count is an int.
+
+z.show_obj(obj)
+    Print a 2-line description of obj, including its address, adjusted
+    refcount, type name and a short representation of its contents.
+    See the method docstring for details.
+
+There are two ways to add objects to the root set:
+
+z.run(func, args=(), kwargs={})
+    Run func (with optional args and keyword arguments kwargs), adding
+    every object initialized by an __init__ function to the root set.
+    This is the closest Cyclops gets to plumbo's "lazy" mode.  It's
+    factored out here so it can be intermixed with the next method.
+
+z.register(obj)
+    Add obj to the root set.
+
+To see the current root set,
+
+z.get_rootset()
+    Return the root set, as a list of (rc, cyclic?, obj) tuples.
+    See method docstring for details.  In short, rc is the true
+    refcount (CycleFinder internal references are subtracted out);
+    cyclic is true iff the object is in a known cycle; and obj is the
+    object.
+
+Finally, to empty the root set again:
+
+z.clear()
+    Empty the root set, and release all other internal references to
+    register'ed objects.
+
+Notes:
+
++ Run Cyclops.py directly to exercise its _test() function; _test()
+  sets up some common kinds of cycles, and should be easy to follow.
+  Stare at the _test() code and the output until their relationship is
+  clear.
+
++ find_cycles is linear-time, in the number of objects reachable from
+  the root set plus the number of arcs connecting them.  This makes
+  Cyclops pleasant for "real life" apps with tens of thousands of
+  reachable objects, and at least usable well beyond that.
+
++ A (at least one) reference to each root-set object is maintained
+  internally, so roots cannot die before invoking .clear() (or the
+  CycleFinder is finalized).  This can distort the truth of your
+  program, if a __del__ method of some root object that's not involved
+  in a cycle could have caused cycles to get broken (this is unusual,
+  but possible!).
+
+  If you suspect it's happening, run find_cycles again passing true
+  (optional arg purge_dead_roots):  find_cycles then releases all
+  internal refs to root set objects whose true refcount is 0, thus
+  allowing their __del__ methods to get invoked.  After that,
+  find_cycles chases the remaining root set objects again.  You may
+  need several iterations of invoking find_cycles(1) before reaching a
+  steady state!
+
++ By default, cycles are chased through these (& only these) objects:
+
+  - Lists.
+  - Tuples.
+  - Dicts (both keys and values).
+  - Class instances (through their attributes).
+  - Classes (through their attributes).
+  - Instance method objects (through .im_self and .im_class).
+
+  In particular, modules are not chased.  Maybe they should be.  See
+  the next section for a way to force modules to get chased.
+
+
+CHANGING THE SET OF INTERESTING TYPES
+
+Methods of a CycleFinder object can be used to alter/query its view of
+the set of types find_cycles "chases":
+
+z.chase_type(t, t_refs_func, t_tag_func)
+    Add type t to the set of interesting types.
+    t_refs_func is a function of one argument x, where type(x) is t;
+    it should return a sequence (typically a list or tuple) of all
+    objects directly reachable from x.
+    t_tag_func is a function of two arguments x and i, where type(x)
+    is t and i in range(len(t_refs_func(x))).  It should return a
+    brief string describing how t_refs_func(x][i] was obtained from
+    x.
+    See the _XXX_refs and _XXX_tag functions at the start of the
+    module for examples of all this.
+
+z.dont_chase_type(t)
+    Remove type t from the set of interesting types.  find_cycles
+    will not attempt to chase the objects reachable from objects of
+    type t.
+
+z.get_chased_types()
+    Return the set of interesting types, as a list.
+
+
+CHANGING THE SET OF INTERESTING CYCLES
+
+Sometimes there are "expected" cycles you would like to ignore; e.g.,
+this can happen if you install a module-chaser, because there are
+cycles in Python's implementation you typically don't care about (for
+example, if your module imports sys, there's a cycle because
+sys.modules points back to your module!).
+
+z.install_cycle_filter(filter_func=None)
+    filter_func=None -> a way to ignore "expected" cycles.
+
+    filter_func is a function of one argument, a cycle.  Each time
+    find_cycles finds a cycle, the cycle is passed to filter_func.  The
+    cycle is ignored unless filter_func returns true.  Passing None
+    for filter_func restores the default behavior (do not ignore any
+    cycle).
+
+    A cycle is a list of (object, index) pairs, where the first object
+    in the list is the same as the last object in the list, and where
+    the object at cycle[i][0] is the cycle[i][1]'th object obtained
+    from object cycle[i-1][0]. cycle[0][1] should be ignored (it tells
+    us how we got to the first item in the cycle to begin with, but
+    that's irrelevant to the cycle).
+
+
+CASE STUDY
+
+Below is the driver I used to track cycles in IDLE; it's a replacement
+for IDLE's idle.py.
+
+At first it didn't install function or module chasers, or a cycle filter,
+and printed everything.  This turned up a bunch of easy cases, and the
+show_sccs output was surprisingly revealing (all the cycles fell into a
+handful of SCCs, which corresponded to distinct cycle-creating IDLE
+subsystems).  show_arcs was also very helpful in getting the big picture.
+show_cycles output was too voluminous to be helpful.
+
+After those cycles were broken, the job got harder.  A module chaser was
+added, which turned up another class of cycles, and then a function
+chaser turned up 100s more.  Most of these involved expected cycles due
+to Python's implementation, so a cycle filter was installed to ignore
+cycles that didn't contain at least one class instance.  The remaining
+cycles were isolated special cases, and only show_cycles output was
+of real use.
+
+After all cycles were purged, IDLE was still leaking, so driver output was
+added to display the root-set objects still alive at the end.  This turned
+up many cases where objects were living only because registration in the
+root set was keeping them alive.  So a loop was added to the driver that
+repeatedly purges dead root-set objects and tries again.  The __del__
+methods of the purged roots caused other root objects to become trash,
+and after several iterations of this the output reaches a steady state.
+
+IDLE is still leaking (as of 18-Jul-1999), but ever less so, and while
+Cyclops is no longer finding cycles, the driver's "live at the end"
+output is still the best clue I've got for guessing what to do next.
+
+Interesting:  At the start of this, it turned out that almost all cycles
+were reachable from places outside themselves.  That is, they would not
+have been considered trash even if Python used a mark-&-sweep form of
+garbage collection.  IDLE's problems, in large part inherited from Tkinter,
+are simply that "everything points to everything else".  The good news is
+that Guido was able to clean most of this up just by adding reference-
+purging code to widgets' explicitly-called destroy() methods.
+
+#! /usr/bin/env python
+import PyShell
+import Cyclops
+import types
+
+def mod_refs(x):
+    return x.__dict__.values()
+
+def mod_tag(x, i):
+    return "." + x.__dict__.keys()[i]
+
+def func_refs(x):
+    return x.func_globals, x.func_defaults
+
+def func_tag(x, i):
+    return (".func_globals", ".func_defaults")[i]
+
+def instance_filter(cycle):
+    for obj, index in cycle:
+        if type(obj) is types.InstanceType:
+            return 1
+    return 0
+
+# Note: PyShell binds ModifiedInterpreter.locals  to __main__.__dict__,
+# and __main__ is *us*.  So if we don't keep the CycleFinder instance
+# out of the global namespace here, z starts chewing over its own
+# instance attributes.  Nothing breaks, but the output is at best
+# surprising.
+
+def hidez():
+    z = Cyclops.CycleFinder()
+    z.chase_type(types.ModuleType, mod_refs, mod_tag)
+    z.chase_type(types.FunctionType, func_refs, func_tag)
+    z.install_cycle_filter(instance_filter)
+    z.run(PyShell.main)
+    z.find_cycles()
+    z.show_stats()
+    z.show_cycles()
+    # z.show_cycleobjs()
+    # z.show_sccs()
+    z.show_arcs()
+    while 1:
+        print "*" * 70
+        print "non-cyclic root set objects:"
+        sawitalready = {}
+        numsurvivors = numdead = 0
+        for rc, cyclic, x in z.get_rootset():
+            if not sawitalready.has_key(id(x)):
+                sawitalready[id(x)] = 1
+                if rc == 0:
+                    print "DEAD",
+                    numdead = numdead + 1
+                    z.show_obj(x)
+                elif not cyclic:
+                    numsurvivors = numsurvivors + 1
+                    z.show_obj(x)
+        x = None
+        print numdead, "dead;", numsurvivors, "non-cycle & alive"
+        if numdead == 0:
+            break
+        print "releasing dead root-set objects and trying again"
+        z.find_cycles(1)
+        z.show_stats()
+
+hidez()
+"""
+
+# 0,9,4    18-Jul-1999
+#    added purge_dead_roots arg to find_cycles
+#    rearranged module docstring; added IDLE driver sample
+# 0,9,3    29-Jun-1999
+#    renamed print_obj to show_obj, and advertised it
+#    redid adjusted refcount computations to account for root-set
+#        objects too
+#    changed get_rootset to return (refcount, cyclic?, obj) triples
+# 0,9,2    27-Jun-1999
+#    freed __init_tracer from dependence on name "self"
+#    rearranged __find_cycles' inner loop for a nice little speed gain
+#    which was promptly way more than lost by new code to compute &
+#        display adjusted refcounts
+#    which was partly regained by rewriting all that
+# 0,9,1    26-Jun-1999
+#    added SCC computation/display
+#    added show_cycles; find_cycles no longer prints anything
+#    changed all showXXX names to show_XXX
+#    added install_cycle_filter
+# 0,9,0    24-Jun-1999
+#    first version I put under source control
+
+__version__ = 0, 9, 4
+
+#########################################################################
+# Type-specific reference revealers.
+#
+# _T_refs(obj) should return a sequence of all objects directly
+# reachable from obj.
+#
+# _T_tag(obj, i) should return a string briefly describing how
+# _T_refs(obj][i] was obtained from obj.
+#
+# Why the separation?  Speed and space:  string tags are never
+# computed unless a cycle is found and so something needs to be
+# printed.
+
+def _dict_refs(x):
+    return x.keys() + x.values()
+def _dict_tag(x, i):
+    n = len(x)
+    if i < n:
+        return ".keys()[%d]" % i
+    else:
+        return "[%s]" % _quickrepr(x.keys()[i-n])
+
+def _list_refs(x):
+    return x
+def _list_tag(x, i):
+    return "[%d]" % i
+
+_tuple_refs = _list_refs
+_tuple_tag = _list_tag
+
+def _instance_refs(x):
+    # the keys are strings, so not interesting to return
+    return x.__dict__.values()
+def _instance_tag(x, i):
+    return "." + x.__dict__.keys()[i]
+
+_class_refs = _instance_refs
+_class_tag = _instance_tag
+
+def _instance_method_refs(x):
+    return (x.im_self, x.im_class)
+def _instance_method_tag(x, i):
+    return (".im_self", ".im_class")[i]
+
+import types
+_default_refs_dispatcher = {
+    types.DictType: _dict_refs,
+    types.ListType: _list_refs,
+    types.TupleType: _tuple_refs,
+    types.InstanceType: _instance_refs,
+    types.ClassType: _class_refs,
+    types.MethodType: _instance_method_refs,
+}
+_default_tag_dispatcher = {
+    types.DictType: _dict_tag,
+    types.ListType: _list_tag,
+    types.TupleType: _tuple_tag,
+    types.InstanceType: _instance_tag,
+    types.ClassType: _class_tag,
+    types.MethodType: _instance_method_tag,
+}
+_InstanceType = types.InstanceType
+_ClassType = types.ClassType
+del types
+
+del _dict_refs, _list_refs, _tuple_refs, _instance_refs, \
+    _class_refs, _instance_method_refs
+del _dict_tag, _list_tag, _tuple_tag, _instance_tag, \
+    _class_tag, _instance_method_tag
+
+#########################################################################
+# A class to make short string representations of objects, for speed
+# and brevity.  The std repr.repr sorts dicts by keys, but we refer to
+# the keys via numeric subscript in cycle reports, so first a derived
+# class that leaves dicts in raw order.  Also, instances, instance
+# methods and classes frequently appear in cycle reports, so avoid
+# chopping their reprs at all.  We're only trying to prevent massive
+# expense for massive lists, tuples & dicts.
+
+import repr
+_repr = repr
+del repr
+
+class _CyclopsRepr(_repr.Repr):
+
+    def __init__(self):
+        _repr.Repr.__init__(self)
+        # Boost the limit on types we don't know about; else it's too
+        # easy to get a useless repr string when adding new types via
+        # CycleFinder.chase_type.
+        # Perhaps better to expose this class too, but-- sheesh --
+        # this module is complicated enough!
+        self.maxstring = self.maxother = 40
+
+    # override base dictionary formatter; the code is almost the same,
+    # we just leave the dict order alone
+
+    def repr_dictionary(self, x, level):
+        n = len(x)
+        if n == 0:
+            return '{}'
+        if level <= 0:
+            return '{...}'
+        s = ''
+        for k, v in x.items()[:min(n, self.maxdict)]:
+            if s:
+                s = s + ', '
+            s = s + self.repr1(k, level-1)
+            s = s + ': ' + self.repr1(v, level-1)
+        if n > self.maxdict:
+            s = s + ', ...'
+        return '{' + s + '}'
+
+    # don't chop instance, class or instance method reprs
+
+    def repr_instance(self, x, level):
+        try:
+            return `x`
+            # Bugs in x.__repr__() can cause arbitrary
+            # exceptions -- then make up something
+        except:
+            return '<' + x.__class__.__name__ + ' instance at ' + \
+                   hex(id(x))[2:] + '>'
+
+    def repr_class(self, x, level):
+        return `x`
+
+    repr_instance_method = repr_class
+
+_quickrepr = _CyclopsRepr().repr
+
+#########################################################################
+# CycleFinder is the workhorse.
+
+def typename_address_cmp(x, y):
+    if isinstance(x, _InstanceType) and isinstance(y, _InstanceType):
+        xname, yname = x.__class__.__name__, y.__class__.__name__
+    elif isinstance(x, _ClassType) and isinstance(y, _ClassType):
+        xname, yname = x.__name__, y.__name__
+    else:
+        xname, yname = type(x).__name__, type(y).__name__
+    return cmp((xname, id(x)), (yname, id(y)))
+
+class CycleFinder:
+    """Class for finding cycles in Python data structures.
+
+    See Cyclops module docstring for details.
+    """
+
+    def __init__(self):
+        """Create a cycle finder with empty root set."""
+
+        self.clear()
+        self.refs_dispatcher = _default_refs_dispatcher.copy()
+        self.tag_dispatcher = _default_tag_dispatcher.copy()
+        self.cycle_filter = None
+
+    def clear(self):
+        """Remove all internal references to external objects.
+
+        Empties the root set.
+        Does not change the set of types this CycleFinder chases.
+        Does not change the cycle filter in effect.
+        """
+
+        self.roots = []
+        self.__reset()
+
+    def register(self, obj):
+        """obj -> add object obj to the root set."""
+
+        self.roots.append(obj)
+
+    def run(self, func, args=(), kwargs={}):
+        """func, args=(), kwargs={} -> add objects to root set by magic.
+
+        Function func is invoked with arguments args and keyword
+        arguments kwargs.  For the duration of the call, each class
+        instance initialized by an __init__ call is automatically
+        added to the root set.  The result of invoking func is
+        returned. """
+
+        # This clever method of trapping __init__ invocations was
+        # stolen from Lars' plumbo.py.
+        import sys
+        sys.setprofile(self.__init_tracer)
+        try:
+            return apply(func, args, kwargs)
+        finally:
+            sys.setprofile(None)
+
+    def find_cycles(self, purge_dead_roots=0):
+        """purge_dead_roots=0 -> look for cycles, return true if found.
+
+        Identify all cycles among objects reachable from the root set.
+        Return true iff at least one cycle is found.
+
+        This should be called before any of the show_XXX methods.
+        Note that it's OK to add more objects to the root set and
+        call it again, or to change the set of chased types, etc.
+        find_cycles starts over from scratch each time it's called.
+
+        If optional arg purge_dead_roots is true (default false),
+        before searching for cycles the root set is purged of all
+        objects that the preceding run of find_cycles determined had a
+        true refcount of 0 (that is, the root set objects that are
+        still alive only because they appear in the root set).
+        Purging these allows their finalizers to get invoked, which
+        may allow a cascade of other objects (including cycles) to go
+        away too.
+
+        See also method install_cycle_filter.
+        """
+
+        if purge_dead_roots and self.roots:
+            id2rc = self.id2rc.get
+            survivors = []
+            for x in self.roots:
+                if id2rc(id(x), None) != 0:
+                    survivors.append(x)
+            self.roots = survivors
+            del x, survivors, id2rc
+
+        self.__reset()
+        self.__find_cycles(self.roots, 0)
+        del self.seenids[id(self.roots)]    # not a user-visible object
+
+        # Compute true refcounts for objects in cycles.
+        id2rc = self.id2rc
+        from sys import getrefcount
+        for x in self.cycleobjs.values():
+            # From the system refcount, subtract one for each of:
+            #    being an element in the loop temp cycleobjs.values()
+            #    being bound to "x"
+            #    being an argument to getrefcount
+            #    being a value in the cycleobjs dict
+            #    showing up exactly once somewhere in self.sccno2objs
+            xid = id(x)
+            id2rc[xid] = getrefcount(x) - 5
+
+        # Need also to subtract refs due to appearances in
+        # self.cycles.  Complication:  some pairs in self.cycles may
+        # be shared.
+        seenpairs = {}
+        isknown = seenpairs.has_key
+        for cycle in self.cycles:
+            for pair in cycle:
+                pairid = id(pair)
+                if not isknown(pairid):
+                    seenpairs[pairid] = 1
+                    xid = id(pair[0])
+                    id2rc[xid] = id2rc[xid] - 1
+        del isknown, seenpairs
+
+        # And need also to subtract refs for membership is self.roots.
+        # While we're at it, also compute adjusted refcounts for other
+        # root set objects.
+        for x in self.roots:
+            xid = id(x)
+            if id2rc.has_key(xid):
+                id2rc[xid] = id2rc[xid] - 1
+            else:
+                assert not self.cycleobjs.has_key(xid)
+                # Subtract one for each of:
+                #     being bound to "x"
+                #     being an argument to getrefcount
+                #     being in self.roots
+                id2rc[xid] = getrefcount(x) - 3
+
+        return len(self.cycles) > 0
+
+    def install_cycle_filter(self, filter_func=None):
+        """filter_func=None -> a way to ignore "expected" cycles.
+
+        See module docstring for details.  This is a callback function
+        invoked whenever find_cycles() finds a cycle; the cycle is
+        ignored unless the callback returns true.
+        """
+
+        self.cycle_filter = filter_func
+
+    def show_stats(self):
+        """Print statistics for the last run of find_cycles."""
+
+        self._print_separator()
+        print "# objects in root set:", len(self.roots)
+        print "# distinct structured objects reachable:", len(self.seenids)
+        print "# distinct structured objects in cycles:", len(self.cycleobjs)
+        print "# cycles found:", len(self.cycles)
+        print "# cycles filtered out:", self.ncyclesignored
+        print "# strongly-connected components:", len(self.sccno2objs)
+        print "# arcs examined:", self.narcs
+
+    def show_cycles(self):
+        """Print all cycles to stdout."""
+
+        self._print_separator()
+        print "# all cycles:"
+        n = len(self.cycles)
+        for i in xrange(n):
+            self._print_cycle(self.cycles[i])
+            if i < n-1:
+                print "-" * 20
+
+    def show_cycleobjs(self, compare=typename_address_cmp):
+        """compare=typename_address_cmp -> print all objects in cycles.
+
+        Prints to stdout.  Each distinct object find_cycles found in a
+        cycle is displayed.  The set of objects found in cycles is
+        first sorted by the optional "compare" function.  By default,
+        objects are sorted using their type name as the primary key
+        and their storage address (id) as the secondary key; among
+        objects of instance type, sorts by the instances' class names;
+        among objects of class type, sorts by the classes' names.
+        """
+
+        self._print_separator()
+        print "# objects involved in cycles:"
+        objs = self.cycleobjs.values()
+        objs.sort(compare)
+        for obj in objs:
+            self.show_obj(obj)
+
+    def show_sccs(self, compare=typename_address_cmp):
+        """compare=typename_address_cmp -> print SCCs.
+
+        Prints to stdout.  Shows the objects in cycles partitioned into
+        strongly connected components (that is, the largest groupings
+        possible such that each object in an SCC is reachable from every
+        other object in that SCC).  Within each SCC, objects are sorted
+        as for show_cycleobjs.
+        """
+
+        self._print_separator()
+        print "# cycle objects partitioned into maximal SCCs:"
+        sccs = self.sccno2objs.values()
+        n = len(sccs)
+        for i in xrange(n):
+            print "--- SCC", i+1, "of", n
+            objs = sccs[i]
+            objs.sort(compare)
+            for obj in objs:
+                self.show_obj(obj)
+
+    def show_arcs(self, compare=None):
+        """compare=None -> print unique arc types in cycles.
+
+        See module docstring for details.  Briefly, each arc in a
+        cycle is categorized by the type of the source node, the kind
+        of arc (how we got from the source to the destination), and
+        the type of the destination node.  Each line of output
+        consists of those three pieces of info preceded by the count
+        of arcs of that kind.  By default, the rows are sorted first
+        by column 2 (source node type), then by columns 3 and 4.
+        """
+
+        self._print_separator()
+        print "# arc types involved in cycles:"
+        items = self.arctypes.items()
+        if compare:
+            items.sort(compare)
+        else:
+            items.sort()
+        for triple, count in items:
+            print "%6d %-20s %-20s -> %-20s" % ((count,) + triple)
+
+    def get_rootset(self):
+        """Return the root set, as a list of (rc, cyclic?, obj) tuples.
+
+        Should be called after find_cycles.  For each object in the
+        root set, returns a triple consisting of
+        refcount
+            number of outstanding references less those due to
+            CycleFinder internals; see show_obj docstring for more
+            details; this will be None if find_cycles hasn't been
+            run, or not since the last clear()
+        cyclic?
+            true (1) iff obj is known to be in a cycle
+        obj
+            the object
+        """
+
+        result = []
+        getrc = self.id2rc.get
+        incycle = self.cycleobjs.has_key
+        for x in self.roots:
+            xid = id(x)
+            result.append((getrc(xid, None), incycle(xid), x))
+        return result
+
+    def chase_type(self, t, t_refs_func, t_tag_func):
+        """t, t_refs_func, t_tag_func -> chase type t.
+
+        See module docstring for details.
+        """
+
+        self.refs_dispatcher[t] = t_refs_func
+        self.tag_dispatcher[t] = t_tag_func
+
+    def dont_chase_type(self, t):
+        """t -> remove type t from the set of chased types.
+
+        See module docstring for details.
+        """
+
+        try:
+            del self.refs_dispatcher[t], \
+                self.tag_dispatcher[t]
+        except KeyError:
+            pass
+
+    def get_chased_types(self):
+        """Return the set of chased types, as a list."""
+
+        return self.refs_dispatcher.keys()
+
+    def __init_tracer(self, frame, event, args):
+        if event == "call" and frame.f_code.co_name == "__init__":
+            # We want to capture the first argument -- this works whether
+            # or not it's named "self", and in case the function is like
+            #     def __init__(*args):
+            # it's still OK:  we'll pick up the name 'args', and add the
+            # tuple it's bound to to the root set; the tuple's first
+            # element is "self", so will be found by the tuple-chaser.
+            locals = frame.f_code.co_varnames
+            if locals:
+                # first argname is first element of locals
+                self.register(frame.f_locals[locals[0]])
+
+    def __reset(self):
+        # Clear out everything except:
+        #       the root set
+        #       the refs_dispatcher
+        #       the tag_dispatcher
+        #       the cycle filter
+
+        # stack exactly mirrors __find_cycles' recursive calls; it's a
+        # list of (object, index) pairs.
+        self.stack = []
+
+        # Map id of active object to its index in self.stack.  Since
+        # it's a depth-first search, there's a cycle iff we hit an
+        # object that's already on the stack.
+        self.id2stacki = {}
+
+        # Set of (addresses of) all interesting objects seen.  Since
+        # we use a depth-first search, there's never a reason to
+        # revisit a node.
+        self.seenids = {}
+
+        # List of all cycles found; each element is a stack slice (a
+        # list of (object, index) pairs).
+        self.cycles = []
+
+        # Set of objects found in cycles (maps id(obj) -> obj).
+        self.cycleobjs = {}
+
+        # Classifies arcs found in cycles, mapping
+        # (source_type, selector, destination_type) triples to a count
+        # of how many times that triple appears in a cycle.
+        self.arctypes = {}
+
+        # Support for computing strongly-connected components (SCC).
+        # We do this by merging cycles into equivalence classes.
+        # Could be done faster by e.g. Tarjan's algorithm in
+        # __find_cycles, but would rather keep that lean since cycles
+        # are expected to be unusual.
+        self.nextsccno = 1      # monotonically increasing SCC id
+        self.id2sccno = {}      # map id(obj) to obj's sccno
+        self.sccno2objs = {}    # map sccno back to list of objects
+
+        # For objects in cycles and root set, map address to true
+        # reference count.
+        self.id2rc = {}
+
+        # Number of arcs examined.
+        self.narcs = 0
+
+        # Number of cycles ignored (filtered out).
+        self.ncyclesignored = 0
+
+    def __find_cycles(self, obj, i, id=id, type=type, len=len):
+        # This can be called an enormous number of times, so speed
+        # tricks are appropriate.
+
+        stack = self.stack
+
+        # Set of ids of objects being, or formerly, chased.
+        seenids = self.seenids
+        already_seen = seenids.has_key
+
+        # Maps active object id to index in stack.
+        id2stacki = self.id2stacki
+        currently_on_stack = id2stacki.has_key
+
+        refs_dispatcher = self.refs_dispatcher
+        is_interesting_type = refs_dispatcher.has_key
+
+        myid = id(obj)
+        seenids[myid] = 1
+        id2stacki[myid] = len(stack)
+        stack.append((obj, i))
+        refs = refs_dispatcher[type(obj)](obj)
+        self.narcs = self.narcs + len(refs)
+        for i in xrange(len(refs)):
+            child = refs[i]
+            if is_interesting_type(type(child)):
+                childid = id(child)
+                if not already_seen(childid):
+                    self.__find_cycles(child, i)
+                elif currently_on_stack(childid):
+                    cycle = stack[id2stacki[childid]:]
+                    cycle.append((child, i)) # complete the cycle
+                    self.__study_cycle(cycle)
+
+        del stack[-1], id2stacki[myid]
+
+    # a helper for __study_cycle
+    def __obj2arcname(self, obj):
+        if isinstance(obj, _InstanceType):
+            name = obj.__class__.__name__ + "()"
+        elif isinstance(obj, _ClassType):
+            name = obj.__name__
+        else:
+            name = type(obj).__name__
+        return name
+
+    def __study_cycle(self, slice):
+        assert len(slice) >= 2
+
+        if self.cycle_filter is not None and \
+           not self.cycle_filter(slice):
+            self.ncyclesignored = self.ncyclesignored + 1
+            return
+
+        self.cycles.append(slice)
+
+        # Pick (or create) an SCC equivalence class for this cycle.
+        sccnowinner = self.id2sccno.get(id(slice[0][0]), None)
+        if sccnowinner is None:
+            sccnowinner = self.nextsccno
+            self.nextsccno = self.nextsccno + 1
+            self.sccno2objs[sccnowinner] = []
+        classwinner = self.sccno2objs[sccnowinner]
+
+        for i in xrange(len(slice)-1):
+            obj1 = slice[i][0]
+            key1 = self.__obj2arcname(obj1)
+
+            obj2, index = slice[i+1]
+            key2 = self.tag_dispatcher[type(obj1)](obj1, index)
+
+            key3 = self.__obj2arcname(obj2)
+
+            key = (key1, key2, key3)
+            self.arctypes[key] = self.arctypes.get(key, 0) + 1
+
+            self.cycleobjs[id(obj1)] = obj1
+
+            # Merge the equivalence class for obj1 into classwinner.
+            thissccno = self.id2sccno.get(id(obj1), None)
+            if thissccno is None:
+                self.id2sccno[id(obj1)] = sccnowinner
+                classwinner.append(obj1)
+            elif thissccno != sccnowinner:
+                # merge obj1's entire equivalence class
+                tomerge = self.sccno2objs[thissccno]
+                for obj2 in tomerge:
+                    self.id2sccno[id(obj2)] = sccnowinner
+                classwinner.extend(tomerge)
+                del self.sccno2objs[thissccno]
+
+    ################################################################
+    # Various output routines.  If someone is motivated enough to
+    # change one of these, they're motivated enough to subclass us!
+
+    def show_obj(self, obj):
+        """obj -> print short description of obj to sdtout.
+
+        This is of the form
+
+        <address> rc:<refcount> <typename>
+            repr: <shortrepr>
+
+        where
+        <address>
+            hex address of obj
+        <refcount>
+            If find_cycles() has been run and obj is in the root set
+            or was found in a cycle, this is the number of references
+            outstanding less the number held internally by
+            CycleFinder.  In most cases, this is what the true
+            refcount would be had you not used CycleFinder at all.
+            You can screw that up, e.g. by installing a cycle filter
+            that holds on to references to one or more cycle elements.
+            If find_cycles() has not been run, or has but obj wasn't
+            found in a cycle and isn't in the root set, <refcount> is
+            "?".
+        <typename>
+            type(obj), as a string.  If obj.__class__ exists, also
+            prints the class name.
+        <shortrepr>
+            repr(obj), but using a variant of the std module repr.py
+            that limits the number of characters displayed.
+        """
+
+        objid = id(obj)
+        rc = self.id2rc.get(objid, "?")
+        print hex(objid), "rc:" + str(rc), type(obj).__name__,
+        if hasattr(obj, "__class__"):
+            print obj.__class__,
+        print
+        print "    repr:", _quickrepr(obj)
+
+    def _print_separator(self):
+        print "*" * 70
+
+    def _print_cycle(self, slice):
+        n = len(slice)
+        assert n >= 2
+        print "%d-element cycle" % (n-1)
+        for i in xrange(n):
+            obj = slice[i][0]
+            self.show_obj(obj)
+            if i < n-1:
+                index = slice[i+1][1]
+                print "    this" + \
+                      self.tag_dispatcher[type(obj)](obj, index), \
+                      "->"
+
+def _test():
+    class X:
+        def __init__(me, name):
+            me.name = name
+        def __repr__(self):
+            return "X(" + `self.name` + ")"
+
+    a, b, c, d = X('a'), X('b'), X('c'), X('d')
+    a.k = b
+    b.k = c
+    c.k = a
+    a.y = b.y = c.y = d
+    d.k = {'harrumph': (1, 2, d, 3)}
+    e = X('e')
+    e.selfref = e
+    a.gotoe = e
+    a.__repr__ = a.__repr__
+
+    class Y: pass
+    X.gotoy = Y
+    Y.gotox = X
+
+    lonely = X('lonely')
+
+    z = CycleFinder()
+    z.register(a)
+    z.register(lonely)
+    del a, b, c, d, e, X, Y, lonely
+    z.find_cycles()
+    z.show_stats()
+    z.show_cycles()
+    z.show_cycleobjs()
+    z.show_sccs()
+    z.show_arcs()
+    print "dead root set objects:"
+    for rc, cyclic, x in z.get_rootset():
+        if rc == 0:
+            z.show_obj(x)
+    z.find_cycles(1)
+    z.show_stats()
+
+if __name__ == "__main__":
+    _test()
diff --git a/Misc/Trace.py b/Misc/Trace.py
new file mode 100644 (file)
index 0000000..9aac3d2
--- /dev/null
@@ -0,0 +1,32 @@
+"""
+    Ce module sert à tracer les appels aux methodes pendant
+    l'exécution.
+    Mode d'emploi :
+    Au début de la zone à tracer faire : Trace.begin_trace()
+    à la fin de la zone faire : Trace.end_trace()
+
+"""
+import sys
+
+def begin_trace():
+     sys.settrace(trace_dispatch)
+
+def end_trace():
+     sys.settrace(None)
+
+def dispatch_call(frame, arg):
+     """ Cette fonction est appelée par trace_dispatch
+         pour tracer les appels à des fonctions ou méthodes
+     """
+     name = frame.f_code.co_name
+     if not name: name = '???'
+     print '+++ call', name, arg
+
+def trace_dispatch(frame,event,arg):
+     """ Cette fonction sert à tracer tous les appels
+         à des fonctions ou à des méthodes.
+     """
+     if event == 'call':
+        return dispatch_call(frame, arg)
+     return trace_dispatch
+
diff --git a/Misc/__init__.py b/Misc/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Misc/timing.py b/Misc/timing.py
new file mode 100644 (file)
index 0000000..90a230e
--- /dev/null
@@ -0,0 +1,12 @@
+import time
+f=open('timing.out','w')
+temps={}
+
+def debut(event):
+   #temps[event]=time.clock()
+   temps[event]=time.time()
+
+def fin(event):
+   #temps[event]=time.clock()-temps[event]
+   temps[event]=time.time()-temps[event]
+   f.write("%s %.4f\n"%(event,temps[event]))
diff --git a/Noyau/N_ASSD.py b/Noyau/N_ASSD.py
new file mode 100644 (file)
index 0000000..51d8a7a
--- /dev/null
@@ -0,0 +1,87 @@
+"""
+
+"""
+import string
+
+class ASSD:
+   """
+      Classe de base pour definir des types de structures de donnees ASTER
+      equivalent d un concept ASTER
+   """
+   idracine="SD"
+
+   def __init__(self,etape=None,sd=None,reg='oui'):
+      """
+        reg est un paramètre qui vaut oui ou non :
+          - si oui (défaut) : on enregistre la SD auprès du JDC
+          - si non : on ne l'enregistre pas
+      """
+      self.etape=etape
+      self.sd=sd
+      self.nom=None
+      if etape:
+        self.parent=etape.parent
+      else:
+        self.parent=CONTEXT.get_current_step()
+      if self.parent :
+         self.jdc = self.parent.get_jdc_root()
+      else:
+         self.jdc = None
+
+      if not self.parent:
+        self.id=None
+      elif reg == 'oui' :
+        self.id = self.parent.reg_sd(self)
+      else :
+        self.id = self.parent.o_register(self)
+
+   def __getitem__(self,key):
+      return self.etape[key]
+
+   def is_object(valeur):
+      """
+          Indique si valeur est d'un type conforme à la classe (retourne 1) 
+          ou non conforme (retourne 0)
+      """
+      return 0
+
+   def get_name(self):
+      """
+          Retourne le nom de self, éventuellement en le demandant au JDC
+      """
+      if not self.nom :
+        try:
+          self.nom=self.parent.get_name(self) or self.id
+        except:
+          self.nom=""
+      if string.find(self.nom,'sansnom') != -1 or self.nom == '':
+        self.nom = self.id
+      return self.nom
+
+   def supprime(self):
+      """ 
+          Cassage des boucles de références pour destruction du JDC 
+      """
+      self.etape = None
+      self.sd = None
+      self.jdc = None
+      self.parent = None
+
+   def accept(self,visitor):
+      """
+         Cette methode permet de parcourir l'arborescence des objets
+         en utilisant le pattern VISITEUR
+      """
+      visitor.visitASSD(self)
+
+
+class assd(ASSD):
+   def is_object(valeur):
+      """
+          Indique si valeur est d'un type conforme à la classe (1) 
+          ou non conforme (0)
+          La classe assd est utilisée pour valider tout objet
+      """
+      return 1
+
+
diff --git a/Noyau/N_BLOC.py b/Noyau/N_BLOC.py
new file mode 100644 (file)
index 0000000..49aef06
--- /dev/null
@@ -0,0 +1,126 @@
+""" 
+    Ce module contient la classe de definition BLOC
+    qui permet de spécifier les caractéristiques des blocs de mots clés 
+"""
+
+import types,string
+import traceback
+
+import N_ENTITE
+import N_MCBLOC
+from N_Exception import AsException
+
+class BLOC(N_ENTITE.ENTITE):
+   """
+    Classe pour definir un bloc de mots-cles
+
+    Cette classe a deux attributs de classe :
+
+    - class_instance qui indique la classe qui devra etre utilisée 
+            pour créer l'objet qui servira à controler la conformité d'un 
+            bloc de mots-clés avec sa définition
+
+    - label qui indique la nature de l'objet de définition (ici, BLOC)
+
+   """
+   class_instance = N_MCBLOC.MCBLOC
+   label = 'BLOC'
+
+   def __init__(self,fr="",ang="",docu="",regles=(),statut='f',condition=None,
+                     **args):
+     
+      """
+          Un bloc est caractérisé par les attributs suivants :
+
+          - fr   : chaine de caractere commentaire pour aide en ligne (en francais)
+
+          - ang : chaine de caractere commentaire pour aide en ligne (en anglais)
+
+          - regles : liste d'objets de type REGLE pour vérifier la cohérence des sous-objets
+
+          - statut : obligatoire ('o') ou facultatif ('f')
+
+          - condition : chaine de caractère evaluable par l'interpreteur Python
+
+          - entites : dictionnaire contenant les sous-objets de self (mots-clés). La clé du dictionnaire 
+                     est le nom du mot-clé et la valeur l'objet de définition correspondant. Cet attribut
+                     est initialisé avec l'argument args de la méthode __init__
+
+      """
+      # Initialisation des attributs
+      self.fr=fr
+      self.ang=ang
+      self.docu=docu
+      if type(regles)== types.TupleType:
+          self.regles=regles
+      else:
+          self.regles=(regles,)
+      self.statut=statut
+      self.condition=condition
+      self.entites=args
+      self.affecter_parente()
+
+   def __call__(self,val,nom,parent=None):
+      """
+          Construit un objet MCBLOC a partir de sa definition (self)
+          de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent)
+      """
+      return self.class_instance(nom=nom,definition=self,val=val,parent=parent)
+
+   def verif_cata(self):
+      """
+         Cette méthode vérifie si les attributs de définition sont valides.
+         Les éventuels messages d'erreur sont écrits dans l'objet compte-rendu (self.cr).
+      """
+      if type(self.fr) != types.StringType :
+        self.cr.fatal("L'attribut 'fr' doit être une chaîne de caractères : %s" %`self.fr`)
+      if type(self.docu) != types.StringType :
+        self.cr.fatal("L'attribut 'docu' doit être une chaîne de caractères : %s" %`self.docu`)
+      if type(self.regles) != types.TupleType :
+        self.cr.fatal("L'attribut 'regles' doit être un tuple : %s" %`self.regles` )
+      if self.statut not in ['f','o'] :
+        self.cr.fatal("L'attribut 'statut' doit valoir 'o' ou 'f' : %s" %`self.statut` )
+      if self.condition != None :
+        if type(self.condition) != types.StringType :
+          self.cr.fatal("L'attribut 'condition' doit être une chaîne de caractères : %s" %`self.condition`)
+      else:
+        self.cr.fatal("La condition ne doit pas valoir None !")
+      self.verif_cata_regles()
+
+   def verif_presence(self,dict):
+      """
+         Cette méthode vérifie si le dictionnaire passé en argument (dict)
+         est susceptible de contenir un bloc de mots-clés conforme à la 
+         définition qu'il porte.
+
+         Si la réponse est oui, la méthode retourne 1
+
+         Si la réponse est non, la méthode retourne 0
+         Le dictionnaire dict a pour clés les noms des mots-clés et pour valeurs
+         les valeurs des mots-clés
+      """
+      # On recopie le dictionnaire pour protéger l'original 
+      dico=dict.copy()
+      # XXX on ajoute AsType pour permettre les évaluations
+      # XXX pour le moment en commentaire. Voir si on ne peut pas faire autrement.
+      #dico['AsType']=AsType
+      if self.condition != None :
+        try:
+          test = eval(self.condition,dico)
+          return test
+        except NameError:
+          # erreur 'normale' : un mot-clé n'est pas présent et on veut l'évaluer dans la condition
+          return 0
+        except SyntaxError:
+          # le texte de la condition n'est pas du Python correct --> faute de catalogue
+          l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+          raise AsException("Catalogue entite : ", self.nom,", de pere : ", self.pere.nom,
+                     '\n',"Erreur dans la condition : ", self.condition,string.join(l))
+        except:
+          l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+          raise AsException("Catalogue entite : ", self.nom,", de pere : ", self.pere.nom,
+                     '\n',"Erreur dans la condition : ", self.condition,string.join(l))
+      else :
+        return 0
+
diff --git a/Noyau/N_CO.py b/Noyau/N_CO.py
new file mode 100644 (file)
index 0000000..7f92230
--- /dev/null
@@ -0,0 +1,13 @@
+from N_ASSD import ASSD
+
+class CO(ASSD):
+  def __init__(self,nom):
+    ASSD.__init__(self,etape=None,sd=None,reg='oui')
+    #
+    #  On demande le nommage du concept
+    #
+    if self.parent : 
+       self.parent.NommerSdprod(self,nom)
+    else:
+       self.nom=nom
+
diff --git a/Noyau/N_CR.py b/Noyau/N_CR.py
new file mode 100644 (file)
index 0000000..9c511aa
--- /dev/null
@@ -0,0 +1,221 @@
+""" Ce module contient la classe compte-rendu de validation
+"""
+
+import string
+
+class CR :
+   """ 
+        Classe servant à la construction et à l'affichage des objets Comptes-rendus 
+   """
+   def __init__(self,verbeux = 'non',debut='',fin='',dec='   '):
+      """
+         Attributs
+          - verbeux
+          - debut
+          - fin
+          - dec
+      """
+      self.verbeux = verbeux
+      self.debut=debut
+      self.fin=fin
+      self.dec=dec
+      self.crok=[]
+      self.crwarn=[]
+      self.crfatal=[]
+      self.crexception=[]
+      self.subcr=[]
+
+   def ok(self,comment):
+      """ Ajoute un commentaire OK à la liste crok"""
+      self.crok.append(comment)
+
+   def warn(self,comment):
+      """ Ajoute un commentaire Warning à la liste crwarn"""
+      self.crwarn.append(comment)
+
+   def fatal(self,comment):
+      """ Ajoute un commentaire Erreur Fatale à la liste crfatal"""
+      self.crfatal.append(comment)
+
+   def exception(self,comment):
+      """ Ajoute un commentaire Exception à la liste crexception"""
+      self.crexception.append(comment)
+
+   def add(self,cr):
+      """ Ajoute un objet CR à la liste subcr :il s'agit de l'objet CR d'un fils de self """
+      self.subcr.append(cr)
+
+   def estvide(self):
+      """ 
+           Retourne 1 si self ne contient aucun message grave (fatal ou exception) et
+                          aucun CR qui en contienne,
+                    0 sinon
+      """
+      if self.crexception : return 0
+      if self.crfatal : return 0
+      for s in self.subcr :
+        if not s.estvide(): return 0
+      return 1
+
+   def purge(self):
+      """ 
+           Purge complètement le CR sauf les exceptions
+      """
+      self.debut=''
+      self.fin=''
+      self.dec='   '
+      self.crok=[]
+      self.crwarn=[]
+      self.crfatal=[]
+      self.subcr=[]
+
+   def beautifie_messages(self):
+      """
+        Beautifie les messages stockés dans crok,crfatal,crexception et crwarn
+      """
+      l=[]
+      for mess in self.crok:
+         l.append(mess+'\n')
+      self.crok_belle=l
+      l=[]
+      for mess in self.crwarn:
+         l.append(encadre_message(mess,'*'))
+      self.crwarn_belle = l
+      l=[]
+      for mess in self.crfatal:
+         l.append(encadre_message(mess,'!'))
+      self.crfatal_belle = l
+      l=[]
+      for mess in self.crexception:
+         l.append(encadre_message(mess,'!'))
+      self.crexception_belle = l
+
+   def indent(self,s):
+      """
+        Insère en tete de chaque ligne du texte s la chaine self.dec
+      """
+      l = string.split(s,'\n')
+      return self.dec+string.join(l,'\n'+self.dec)[:-3]
+
+   def __str__(self):
+      """
+        Retourne une chaîne de caractères décorée et représentative de self
+      """
+      s=''
+      self.beautifie_messages()
+      s=s+string.join(self.crok_belle)
+      s=s+string.join(self.crwarn_belle)
+      s=s+string.join(self.crfatal_belle)
+      s=s+string.join(self.crexception_belle)
+      for subcr in self.subcr:
+         if self.verbeux == 'oui':
+            s=s+str(subcr)+'\n'
+         else:
+            if not subcr.estvide():
+               s=s+str(subcr)
+      if s != '':
+         s=self.debut+'\n'+self.indent(s)+self.fin+'\n'
+      else :
+         s=self.debut+'\n'+self.fin+'\n'
+      return s
+
+   def report(self,decalage = 2):
+      """
+        Retourne une chaîne de caractères non encadrée mais représentative de self
+      """
+      s=''
+      # on stocke dans s les messages de premier niveau
+      for mess in self.crok :
+        s=s + decalage*self.dec + mess + self.dec + '\n'
+      for mess in self.crwarn:
+        s=s + decalage*self.dec + mess + self.dec + '\n'
+      for mess in self.crfatal:
+        s=s + decalage*self.dec + mess + self.dec + '\n'
+      for mess in self.crexception:
+        s=s + decalage*self.dec + mess + self.dec + '\n'
+      # on récupère les messages des sous comptes-rendus ...
+      for subcr in self.subcr:
+        if not subcr.estvide():
+            s=s+subcr.report(decalage = decalage + 1)
+      # on rajoute les flags de début et de fin ... (si self n'est pas vide)
+      if not self.estvide() :
+        s = (decalage-1)*self.dec+self.debut+'\n'+s+ \
+            (decalage-1)*self.dec+self.fin+'\n'
+      return s
+
+   def get_mess_fatal(self):
+      """
+          Retourne une chaîne de caractères contenant les messages de 
+          la liste crfatal (du dernier au premier)
+      """
+      self.crfatal.reverse()
+      s=''
+      for elem in self.crfatal :
+        s=s+elem
+      self.crfatal.reverse()
+      return s
+
+   def get_mess_exception(self):
+      """
+          Retourne une chaîne de caractères contenant les messages 
+          de la liste crexception (du dernier au premier)
+      """
+      self.crexception.reverse()
+      s=''
+      for elem in self.crexception :
+        s=s+elem
+      self.crexception.reverse()
+      return s
+
+
+
+
+def justify_text(texte='',cesure=50):
+  """
+      Prend la chaîne de caractères 'texte' et la retourne avec un retour chariot
+      tous les 'cesure' caractères s'il y a lieu (le retour chariot est placé dans un blanc
+      et non au milieu d'un mot
+  """
+  texte = string.strip(texte)
+  if len(texte) < cesure : return texte
+  liste_lignes = string.split(texte,'\n')
+  texte_justifie = ''
+  for ligne in liste_lignes :
+    ligne = string.strip(ligne)
+    if len(ligne) <= cesure :
+      texte_justifie = texte_justifie + ligne + '\n'
+      continue
+    longueur = 0
+    new_text = ''
+    liste_mots = string.split(ligne,' ')
+    for mot in liste_mots :
+      new_longueur = longueur + len(mot)+1
+      if new_longueur < cesure :
+        new_text = new_text+' '+mot
+        longueur = longueur + len(mot) + 1
+      else :
+        longueur = 0
+        new_text = new_text + '\n'+mot
+    texte_justifie = texte_justifie + string.strip(new_text) + '\n'
+  return texte_justifie[0:-1]
+
+def encadre_message(texte,motif):
+  """ 
+     Retourne la chaîne de caractères texte entourée d'un cadre formés
+     d'éléments 'motif'
+  """
+  texte = justify_text(texte,cesure=80)
+  lignes = string.split(texte,'\n')
+  longueur = 0
+  for ligne in lignes :
+    if len(ligne)> longueur : longueur = len(ligne)
+  longueur = longueur + 4
+  txt = motif*longueur+'\n'
+  for ligne in lignes :
+    txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
+  txt = txt + motif*longueur+'\n'
+  return txt
+
+
+
+
diff --git a/Noyau/N_ENTITE.py b/Noyau/N_ENTITE.py
new file mode 100644 (file)
index 0000000..2279dda
--- /dev/null
@@ -0,0 +1,87 @@
+""" 
+    Ce module contient la classe ENTITE qui est la classe de base
+    de toutes les classes de definition d'EFICAS.
+"""
+
+import N_CR
+
+class ENTITE:
+   """
+      Classe de base pour tous les objets de definition : mots cles et commandes
+      Cette classe ne contient que des methodes utilitaires
+      Elle ne peut etre instanciee et doit d abord etre specialisee
+   """
+   CR=N_CR.CR
+
+   def __init__(self):
+      """
+         Initialise les deux attributs regles et entites d'une classe dérivée
+         à : pas de règles et pas de sous-entités.
+        
+         L'attribut regles doit contenir la liste des regles qui s'appliquent 
+         sur ses sous-entités
+
+         L'attribut entités doit contenir le dictionnaires des sous-entités 
+         (clé = nom, valeur=objet)
+      """
+      self.regles=()
+      self.entites={}
+
+   def affecter_parente(self):
+      """
+          Cette methode a pour fonction de donner un nom et un pere aux
+          sous entités qui n'ont aucun moyen pour atteindre leur parent 
+          directement
+          Il s'agit principalement des mots cles 
+      """
+      for k,v in self.entites.items():
+        v.pere = self
+        v.nom = k
+
+   def verif_cata(self):
+      """
+          Cette methode sert à valider les attributs de l'objet de définition
+      """
+      raise "La méthode verif_cata de la classe %s doit etre implémentée" % self.__class__.__name__
+
+   def __call__(self):
+      """
+          Cette methode doit retourner un objet dérivé de la classe OBJECT
+      """
+      raise "La méthode __call__ de la classe %s doit etre implémentée" % self.__class__.__name__
+
+   def report(self):
+      """
+         Cette méthode construit pour tous les objets dérivés de ENTITE un 
+         rapport de validation de la définition portée par cet objet
+      """
+      self.cr = self.CR()
+      self.verif_cata()
+      for k,v in self.entites.items() :
+         try :
+            cr = v.report()
+            cr.debut = "Début "+v.__class__.__name__+ ' : ' + k
+            cr.fin = "Fin "+v.__class__.__name__+ ' : ' + k
+            self.cr.add(cr)
+         except:
+            self.cr.fatal("Impossible d'obtenir le rapport de %s %s" %(k,`v`))
+            print "Impossible d'obtenir le rapport de %s %s" %(k,`v`)
+            print "père =",self
+      return self.cr
+
+   def verif_cata_regles(self):
+      """
+         Cette méthode vérifie pour tous les objets dérivés de ENTITE que 
+         les objets REGLES associés ne portent que sur des sous-entités 
+         existantes
+      """
+      for regle in self.regles :
+        l=[]
+        for mc in regle.mcs :
+          if not self.entites.has_key(mc) :
+            l.append(mc)
+        if l != [] :
+          txt = str(regle)
+          self.cr.fatal("Argument(s) non permis : %s pour la règle : %s" %(`l`,txt))
+
+
diff --git a/Noyau/N_ETAPE.py b/Noyau/N_ETAPE.py
new file mode 100644 (file)
index 0000000..b441d41
--- /dev/null
@@ -0,0 +1,299 @@
+""" 
+    Ce module contient la classe ETAPE qui sert à vérifier et à exécuter
+    une commande
+"""
+
+# Modules Python
+import types,sys,string,os
+import linecache
+import traceback
+
+# Modules EFICAS
+import N_MCCOMPO
+from N_Exception import AsException
+import N_utils
+from N_utils import AsType
+
+class ETAPE(N_MCCOMPO.MCCOMPO):
+   """
+      Cette classe hérite de MCCOMPO car ETAPE est un OBJECT composite
+
+   """
+   nature = "OPERATEUR"
+
+   # L'attribut de classe codex est utilisé pour rattacher le module de calcul éventuel (voir Build)
+   # On le met à None pour indiquer qu'il n'y a pas de module de calcul rattaché
+   codex=None
+
+   def __init__(self,oper=None,reuse=None,args={}):
+      """
+         Attributs :
+
+          - definition : objet portant les attributs de définition d'une étape de type opérateur. Il
+                         est initialisé par l'argument oper.
+
+          - reuse : indique le concept d'entrée réutilisé. Il se trouvera donc en sortie
+                    si les conditions d'exécution de l'opérateur l'autorise
+
+          - valeur : arguments d'entrée de type mot-clé=valeur. Initialisé avec l'argument args.
+
+      """
+      self.definition=oper
+      self.reuse=reuse
+      self.valeur=args
+      self.nettoiargs()
+      self.parent=CONTEXT.get_current_step()
+      self.etape = self
+      self.nom=oper.nom
+      self.idracine=oper.label
+      self.appel=N_utils.callee_where()
+      self.mc_globaux={}
+      self.sd=None
+      self.actif=1
+      self.make_register()
+
+   def make_register(self):
+      """
+         Initialise les attributs jdc, id, niveau et réalise les 
+         enregistrements nécessaires
+      """
+      if self.parent :
+         self.jdc = self.parent.get_jdc_root()
+         self.id=self.parent.register(self)
+         self.niveau=None
+      else:
+         self.jdc = self.parent =None
+         self.id=None
+         self.niveau=None
+
+   def nettoiargs(self):
+      """
+         Cette methode a pour fonction de retirer tous les arguments egaux à None
+         de la liste des arguments. Ils sont supposés non présents et donc retirés.
+      """
+      for k in self.valeur.keys():
+         if self.valeur[k] == None:del self.valeur[k]
+
+   def McBuild(self):
+      """
+         Demande la construction des sous-objets et les stocke dans l'attribut
+         mc_liste.
+      """
+      self.mc_liste=self.build_mc()
+
+   def Build_sd(self,nom):
+      """
+         Construit le concept produit de l'opérateur. Deux cas 
+         peuvent se présenter :
+        
+         - le parent n'est pas défini. Dans ce cas, l'étape prend en charge la création 
+           et le nommage du concept.
+
+         - le parent est défini. Dans ce cas, l'étape demande au parent la création et 
+           le nommage du concept.
+
+      """
+      if not self.isactif():return
+      try:
+         if self.parent:
+            sd= self.parent.create_sdprod(self,nom)
+            if type(self.definition.op_init) == types.FunctionType: 
+               apply(self.definition.op_init,(self,self.parent.g_context))
+         else:
+            sd=self.get_sd_prod()
+            # On n'utilise pas self.definition.op_init car self.parent 
+            # n'existe pas
+            if sd != None and self.reuse == None:
+               # On ne nomme le concept que dans le cas de non reutilisation 
+               # d un concept
+               sd.nom=nom
+         if self.jdc and self.jdc.par_lot == "NON" :
+            self.Execute()
+         return sd
+      except AsException,e:
+         raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
+                              'fichier : ',self.appel[1],e)
+      except EOFError:
+         # XXX Normalement le contexte courant doit etre le parent.
+         # Il n'y a pas de raison de remettre le contexte au parent
+         #self.reset_current_step()
+         raise
+      except :
+         l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+         raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
+                           'fichier : ',self.appel[1]+'\n',
+                            string.join(l))
+
+   def Execute(self):
+      """
+         Cette methode est prevue pour faire une execution dans le cas
+         ou par_lot == 'NON'
+         Par defaut, elle ne fait rien
+      """
+      return
+
+   def get_sd_prod(self):
+      """
+          Retourne le concept résultat de l'étape
+          Deux cas :
+                   cas 1 : sd_prod de oper n'est pas une fonction
+                           il s'agit d'une sous classe de ASSD
+                           on construit le sd à partir de cette classe
+                           et on le retourne
+                   cas 2 : il s'agit d'une fonction
+                           on l'évalue avec les mots-clés de l'étape (mc_liste)
+                           on construit le sd à partir de la classe obtenue
+                           et on le retourne
+      """
+      if type(self.definition.sd_prod) == types.FunctionType:
+        d=self.cree_dict_valeurs(self.mc_liste)
+        try:
+          sd_prod= apply(self.definition.sd_prod,(),d)
+        except EOFError:
+          raise
+        except:
+          if CONTEXT.debug: traceback.print_exc()
+          l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],
+                                       sys.exc_info()[2])
+          raise AsException("impossible d affecter un type au resultat",
+                             string.join(l[2:]))
+          #         sys.exc_info()[0],sys.exc_info()[1],)
+      else:
+        sd_prod=self.definition.sd_prod
+      # on teste maintenant si la SD est réutilisée ou s'il faut la créer
+      if self.reuse:
+        if AsType(self.reuse) != sd_prod:
+          raise AsException("type de concept reutilise incompatible avec type produit")
+        self.sd=self.reuse
+      else:
+        self.sd= sd_prod(etape=self)
+        if self.definition.reentrant == 'o':
+          self.reuse = self.sd
+      return self.sd
+
+   def get_type_produit(self):
+      """
+          Retourne le type du concept résultat de l'étape
+          Deux cas :
+           cas 1 : sd_prod de oper n'est pas une fonction
+                   il s'agit d'une sous classe de ASSD
+                   on retourne le nom de la classe
+           cas 2 : il s'agit d'une fonction
+                    on l'évalue avec les mots-clés de l'étape (mc_liste)
+                   et on retourne son résultat
+      """
+      if type(self.definition.sd_prod) == types.FunctionType:
+        d=self.cree_dict_valeurs(self.mc_liste)
+        try:
+          sd_prod= apply(self.definition.sd_prod,(),d)
+        except:
+          #traceback.print_exc()
+          return None
+      else:
+        sd_prod=self.definition.sd_prod
+      return sd_prod
+
+   def get_etape(self):
+      """
+         Retourne l'étape à laquelle appartient self
+         Un objet de la catégorie etape doit retourner self pour indiquer que
+         l'étape a été trouvée
+         XXX fait double emploi avec self.etape ????
+      """
+      return self
+
+   def supprime(self):
+      """
+         Méthode qui supprime toutes les références arrières afin que l'objet puisse
+         être correctement détruit par le garbage collector
+      """
+      N_MCCOMPO.MCCOMPO.supprime(self)
+      self.jdc=None
+      self.appel=None
+      if self.sd : self.sd.supprime()
+
+   def isactif(self):
+      """ 
+         Indique si l'étape est active (1) ou inactive (0)
+      """
+      return self.actif
+
+   def set_current_step(self):
+      """
+          Methode utilisee pour que l etape self se declare etape
+          courante. Utilise par les macros
+      """
+      #print "set_current_step ",self.nom
+      #traceback.print_stack(limit=3,file=sys.stdout)
+      cs= CONTEXT.get_current_step()
+      if self.parent != cs :
+         raise "L'étape courante %s devrait etre le parent de self : %s" % (cs,self)
+      else :
+         CONTEXT.unset_current_step()
+         CONTEXT.set_current_step(self)
+
+   def reset_current_step(self):
+      """ 
+            Methode utilisee par l'etape self qui remet son etape parent comme 
+             etape courante 
+      """
+      #print "reset_current_step ",self.nom
+      #traceback.print_stack(limit=3,file=sys.stdout)
+      cs= CONTEXT.get_current_step()
+      if self != cs :
+         raise "L'étape courante %s devrait etre self : %s" % (cs,self)
+      else :
+         CONTEXT.unset_current_step()
+         CONTEXT.set_current_step(self.parent)
+
+   def issubstep(self,etape):
+      """ 
+          Cette methode retourne un entier indiquant si etape est une
+          sous etape de self ou non
+          1 = oui
+          0 = non
+          Une étape simple n'a pas de sous etape
+      """
+      return 0
+
+   def get_file(self,unite=None,fic_origine=''):
+      """ 
+         Retourne le nom du fichier associe a l unite logique unite (entier)
+         ainsi que le source contenu dans le fichier
+      """
+      if self.jdc : return self.jdc.get_file(unite=unite,fic_origine=fic_origine)
+      else :
+         file = None
+         if unite != None:
+            if os.path.exists("fort."+str(unite)):
+               file= "fort."+str(unite)
+         if file == None : 
+            raise AsException("Impossible de trouver le fichier correspondant a l unite %s" % unite)
+         if not os.path.exists(file): 
+            raise AsException("%s n'est pas un fichier existant" % unite)
+         fproc=open(file,'r')
+         text=string.replace(fproc.read(),'\r\n','\n')
+         fproc.close()
+         linecache.cache[file]=0,0,string.split(text,'\n'),file
+         return file,text
+
+   def accept(self,visitor):
+      """
+         Cette methode permet de parcourir l'arborescence des objets
+         en utilisant le pattern VISITEUR
+      """
+      visitor.visitETAPE(self)
+
+   def update_context(self,d):
+      """
+          Cette methode doit updater le contexte fournit par
+          l'appelant en argument (d) en fonction de sa definition
+      """
+      if type(self.definition.op_init) == types.FunctionType:
+        apply(self.definition.op_init,(self,d))
+      if self.sd:
+        d[self.sd.nom]=self.sd
+
+
+
+
diff --git a/Noyau/N_EVAL.py b/Noyau/N_EVAL.py
new file mode 100644 (file)
index 0000000..d3dff1b
--- /dev/null
@@ -0,0 +1,23 @@
+"""
+"""
+
+class EVAL :
+   """
+   """
+   def __init__(self,str):
+      """
+         L'objet EVAL est initialise avec une chaine de caracteres (str)
+      """
+      self.valeur = str
+      self.val=None
+
+   def __repr__(self):
+      return 'EVAL("""'+self.valeur+'""")'
+
+   def accept(self,visitor):
+      """
+         Cette methode permet de parcourir l'arborescence des objets
+         en utilisant le pattern VISITEUR
+      """
+      visitor.visitEVAL(self)
+
diff --git a/Noyau/N_Exception.py b/Noyau/N_Exception.py
new file mode 100644 (file)
index 0000000..ae3b4ad
--- /dev/null
@@ -0,0 +1,20 @@
+""" 
+   Ce module contient la classe AsException
+"""
+
+# Modules Python
+import types
+
+class AsException(Exception):
+  def __str__(self):
+    if not self.args:
+      return ''
+    elif len(self.args) == 1:
+      return str(self.args[0])
+    else:
+      s=''
+      for e in self.args:
+        if type(e) == types.StringType: s=s+ ' ' + e
+        else:s=s+ ' ' + str(e)
+      return s
+
diff --git a/Noyau/N_FACT.py b/Noyau/N_FACT.py
new file mode 100644 (file)
index 0000000..0cf0289
--- /dev/null
@@ -0,0 +1,131 @@
+""" Ce module contient la classe de definition FACT
+    qui permet de spécifier les caractéristiques des mots clés facteurs
+"""
+
+import types
+
+import N_ENTITE
+import N_MCFACT
+import N_MCLIST
+
+class FACT(N_ENTITE.ENTITE):
+   """
+    Classe pour definir un mot cle facteur
+
+    Cette classe a trois attributs de classe 
+
+    - class_instance qui indique la classe qui devra etre utilisée 
+            pour créer l'objet qui servira à controler la conformité d'un 
+            mot-clé facteur avec sa définition
+
+    - list_instance
+
+    - label qui indique la nature de l'objet de définition (ici, FACT)
+   """
+   class_instance = N_MCFACT.MCFACT
+   list_instance = N_MCLIST.MCList
+   label = 'FACT'
+
+   def __init__(self,fr="",ang="",docu="",regles=(),statut='f',defaut=None,
+                     min=0,max=1,**args):
+     
+      """
+          Un mot-clé facteur est caractérisé par les attributs suivants :
+
+          - fr   :
+
+          - ang :
+
+          - statut :
+
+          - defaut :
+
+          - regles
+
+          - min
+
+          - max
+
+          - position
+
+          - docu
+      """
+      # Initialisation des attributs
+      self.fr=fr
+      self.ang=ang
+      self.docu = docu
+      if type(regles)== types.TupleType:
+          self.regles=regles
+      else:
+          self.regles=(regles,)
+      self.statut=statut
+      self.defaut=defaut
+      self.min=min
+      self.max=max
+      self.entites=args
+      self.position=None
+      self.affecter_parente()
+
+   def __call__(self,val,nom,parent):
+      """
+          Construit la structure de donnee pour un mot cle facteur a partir 
+          de sa definition (self) de sa valeur (val), de son nom (nom) et de 
+          son parent dans l arboresence (parent)
+          
+          Suivant le type de la valeur on retournera soit un objet de type 
+          MCFACT soit une liste de type MCLIST.
+
+          La creation d un mot cle facteur depend de son statut
+          Si statut ='o'   il est obligatoire
+          Si statut == 'd' il est facultatif mais ses sous mots cles avec 
+                           defaut sont visibles
+          Si statut == 'f' il est facultatif et ses sous mots avec defaut ne 
+                           sont pas visibles
+          Si statut == 'c' il est cache ???
+          Si defaut != None, on utilise cette valeur pour calculer la valeur 
+                             par defaut du mot cle facteur
+      """
+      if val == None:
+        if self.defaut == None:
+          val={}
+        elif type(self.defaut) == types.TupleType:
+          val=self.defaut
+              # Est ce utile ? Le défaut pourrait etre uniquement un dict
+        elif type(self.defaut) == types.DictType or isinstance(self.defaut,N_MCFACT._F):
+          val=self.defaut
+        else:
+          # On ne devrait jamais passer par la
+          print "On ne devrait jamais passer par la"
+          return None
+
+      if type(val) == types.TupleType or type(val) == types.ListType :
+        # on est en présence d'un MCFACT multiple !
+        l=self.list_instance()
+        l.init(nom = nom,parent=parent)
+        for v in val:
+          objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent)
+          l.append(objet)
+        return l
+      else:
+        return self.class_instance(nom=nom,definition=self,val=val,parent=parent)
+
+
+   def verif_cata(self):
+      if type(self.min) != types.IntType :
+         if self.min != '**':
+            self.cr.fatal("L'attribut 'min' doit être un entier : %s" %`self.min`)
+      if type(self.max) != types.IntType :
+         if self.max != '**':
+            self.cr.fatal("L'attribut 'max' doit être un entier : %s" %`self.max`)
+      if self.min > self.max :
+         self.cr.fatal("Nombres d'occurrence min et max invalides : %s %s" %(`self.min`,`self.max`))
+      if type(self.fr) != types.StringType :
+         self.cr.fatal("L'attribut 'fr' doit être une chaîne de caractères : %s" %`self.fr`)
+      if type(self.regles) != types.TupleType :
+         self.cr.fatal("L'attribut 'regles' doit être un tuple : %s" %`self.regles`)
+      if self.statut not in ['f','o','c','d'] :
+         self.cr.fatal("L'attribut 'statut' doit valoir 'o','f','c' ou 'd' : %s" %`self.statut`)
+      if type(self.docu) != types.StringType :
+         self.cr.fatal("L'attribut 'docu' doit être une chaîne de caractères : %s" %`self.docu`)
+      self.verif_cata_regles()
+
diff --git a/Noyau/N_FONCTION.py b/Noyau/N_FONCTION.py
new file mode 100644 (file)
index 0000000..a38526e
--- /dev/null
@@ -0,0 +1,5 @@
+from N_ASSD import ASSD
+
+class FONCTION(ASSD):pass
+
+class fonction(FONCTION) : pass
diff --git a/Noyau/N_FORM.py b/Noyau/N_FORM.py
new file mode 100644 (file)
index 0000000..f702637
--- /dev/null
@@ -0,0 +1,11 @@
+import N_MACRO
+import N_FORM_ETAPE
+
+class FORM(N_MACRO.MACRO):
+    """
+       Cette classe sert à définir dans le catalogue des objets de type
+       FORMULE pour ASTER.
+       Elle surcharge la classe MACRO
+    """
+    class_instance=N_FORM_ETAPE.FORM_ETAPE
+
diff --git a/Noyau/N_FORM_ETAPE.py b/Noyau/N_FORM_ETAPE.py
new file mode 100644 (file)
index 0000000..264edc7
--- /dev/null
@@ -0,0 +1,9 @@
+import N_MACRO_ETAPE
+
+class FORM_ETAPE(N_MACRO_ETAPE.MACRO_ETAPE):
+    """
+       Cette classe sert à construire l'objet ACCAS correspondant à une
+       FORMULE Aster.
+       Il s'agit d'un objet MACRO_ETAPE légèrement modifié
+    """
+
diff --git a/Noyau/N_GEOM.py b/Noyau/N_GEOM.py
new file mode 100644 (file)
index 0000000..c6d62b6
--- /dev/null
@@ -0,0 +1,46 @@
+"""
+
+"""
+from N_ASSD import ASSD
+
+class GEOM(ASSD):
+   """
+      Cette classe sert à définir les types de concepts
+      géométriques comme GROUP_NO, GROUP_MA,NOEUD et MAILLE
+
+   """
+   def __init__(self,nom,etape=None,sd=None,reg='oui'):
+      """
+      """
+      self.etape=etape
+      self.sd=sd
+      if etape:
+        self.parent=etape.parent
+      else:
+        self.parent=CONTEXT.get_current_step()
+      if self.parent :
+         self.jdc = self.parent.get_jdc_root()
+      else:
+         self.jdc = None
+
+      if not self.parent:
+        self.id=None
+      elif reg == 'oui' :
+        self.id = self.parent.reg_sd(self)
+      self.nom=nom
+
+   def get_name(self):
+      return self.nom
+
+   def is_object(valeur):
+      """
+          Indique si valeur est d'un type conforme à la classe (1) 
+          ou non conforme (0)
+          La classe GEOM est utilisée pour tous les objets géométriques
+          Elle valide tout objet
+      """
+      return 1
+
+
+class geom(GEOM):pass
+
diff --git a/Noyau/N_JDC.py b/Noyau/N_JDC.py
new file mode 100644 (file)
index 0000000..82568d2
--- /dev/null
@@ -0,0 +1,361 @@
+"""
+   Ce module contient la classe JDC qui sert à interpréter un jeu de commandes
+"""
+
+# Modules Python
+import os,string,traceback
+import types,sys,linecache
+
+# Modules EFICAS
+import N_OBJECT
+import N_CR
+from N_Exception import AsException
+from N_ASSD import ASSD
+
+class JDC(N_OBJECT.OBJECT):
+   """
+      Cette classe interprete un jeu de commandes fourni sous
+      la forme d'une chaine de caractères
+
+      Attributs de classe :
+
+      Attributs d'instance :
+
+   """
+   nature = "JDC"
+   CR=N_CR.CR
+   exec_init="""
+import Accas
+from Accas import _F
+from Accas import *
+NONE = None
+"""
+   from N_utils import SEP
+
+   def __init__(self,definition=None,procedure=None,cata=None,
+                     cata_ord_dico=None,parent=None,
+                     nom='SansNom',appli=None,context_ini=None,**args):
+      self.procedure=procedure
+      self.definition = definition
+      self.cata=cata
+      if type(self.cata) != types.TupleType and cata != None: 
+         self.cata=(self.cata,)
+      self.cata_ordonne_dico=cata_ord_dico
+      self.nom = nom
+      self.appli=appli
+      self.parent=parent
+      self.context_ini=context_ini
+      # On conserve les arguments supplémentaires. Il est possible de passer 
+      # des informations globales au JDC par ce moyen. Il pourrait etre plus 
+      # sur de mettre en place le mecanisme des mots-cles pour verifier la 
+      # validité des valeurs passées.
+      # Ceci reste à faire
+      # On initialise avec les parametres de la definition puis on 
+      # update avec ceux du JDC
+      self.args=self.definition.args
+      self.args.update(args)
+      self.nstep=0
+      self.nsd=0
+      self.par_lot='OUI'
+      if definition:
+         self.regles=definition.regles
+         self.code = definition.code
+      else:
+         self.regles=()
+         self.code = "CODE"
+      #
+      #  Creation de l objet compte rendu pour collecte des erreurs
+      #
+      self.cr = self.CR(debut = "CR phase d'initialisation", 
+                        fin = "fin CR phase d'initialisation")
+      self.g_context={}
+      self.sds=[]
+      self.etapes=[]
+      self.mc_globaux={}
+      self.current_context={}
+      self.index_etape_courante=0
+
+   def compile(self):
+      """
+         Cette methode compile la chaine procedure
+         Si des erreurs se produisent, elles sont consignées dans le 
+         compte-rendu self.cr
+      """
+      try:
+        if self.appli != None : 
+           self.appli.affiche_infos('Compilation du fichier de commandes \
+                                     en cours ...')
+        self.proc_compile=compile(self.procedure,self.nom,'exec')
+      except SyntaxError,e:
+        if CONTEXT.debug : traceback.print_exc()
+        l=traceback.format_exception_only(SyntaxError,e)
+        self.cr.exception("Compilation impossible : "+string.join(l))
+      return
+
+   def exec_compile(self):
+      """
+         Cette méthode execute le jeu de commandes compilé dans le contexte
+         self.g_context de l'objet JDC
+      """
+      CONTEXT.set_current_step(self)
+      # Le module nommage utilise le module linecache pour accéder
+      # au source des commandes du jeu de commandes.
+      # Dans le cas d'un fichier, on accède au contenu de ce fichier
+      # Dans le cas d'une chaine de caractères il faut accéder
+      # aux commandes qui sont dans la chaine
+      import linecache
+      linecache.cache[self.nom]=0,0,string.split(self.procedure,'\n'),self.nom
+      try:
+         exec self.exec_init in self.g_context
+         for obj_cata in self.cata:
+            if type(obj_cata) == types.ModuleType :
+               init2 = "from "+obj_cata.__name__+" import *"
+               exec init2 in self.g_context
+         # Si l'attribut context_ini n'est pas vide, on ajoute au contexte global
+         # le contexte initial (--> permet d'évaluer un JDC en récupérant un contexte
+         # d'un autre par exemple)
+         if self.context_ini :
+            self.g_context.update(self.context_ini)
+
+         if self.appli != None : 
+            self.appli.affiche_infos('Interprétation du fichier de \
+                                      commandes en cours ...')
+         # On sauve le contexte pour garder la memoire des constantes
+         # En mode edition (EFICAS) ou lors des verifications le contexte 
+         # est recalculé
+         # mais les constantes sont perdues
+         self.const_context=self.g_context
+         exec self.proc_compile in self.g_context
+
+         CONTEXT.unset_current_step()
+         if self.appli != None : self.appli.affiche_infos('')
+
+      except EOFError:
+        # Exception utilise pour interrompre un jeu
+        # de commandes avant la fin
+        # Fonctionnement normal, ne doit pas etre considere comme une erreur
+        CONTEXT.unset_current_step()
+
+      except AsException,e:
+        # une erreur a ete identifiee
+        if CONTEXT.debug :
+          traceback.print_exc()
+        self.cr.exception(str(e))
+        CONTEXT.unset_current_step()
+
+      except NameError,e:
+        etype, value, tb = sys.exc_info()
+        l= traceback.extract_tb(tb)
+        s= traceback.format_exception_only("Erreur de nom",e)[0][:-1]
+        message = "erreur de syntaxe,  %s ligne %d" % (s,l[-1][1])
+        if CONTEXT.debug :
+          #prbanner(message)
+          traceback.print_exc()
+        self.cr.exception(message)
+        CONTEXT.unset_current_step()
+
+      except :
+        # erreur inattendue
+        # sys_exc_typ,sys_exc_value,sys_exc_frame = sys_exc.info() 
+        # (tuple de 3 éléments)
+        if CONTEXT.debug :
+          traceback.print_exc()
+          #prbanner("erreur non prevue et non traitee prevenir \
+          #           la maintenance "+self.nom)
+        l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],
+                                     sys.exc_info()[2])
+        self.cr.exception("erreur non prevue et non traitee prevenir la maintenance "+
+                           self.nom+'\n'+ string.join(l))
+        CONTEXT.unset_current_step()
+
+   def register(self,etape):
+      """
+         Cette méthode ajoute etape dans la liste des etapes : self.etapes
+         et retourne un numéro d'enregistrement
+      """
+      self.etapes.append(etape)
+      return self.g_register(etape)
+
+   def o_register(self,sd):
+      """
+         Retourne un identificateur pour concept
+      """
+      self.nsd=self.nsd+1
+      nom=sd.idracine + self.SEP + `self.nsd`
+      return nom
+
+   def g_register(self,etape):
+      """
+          Retourne un identificateur pour etape
+      """
+      self.nstep=self.nstep+1
+      idetape=etape.idracine + self.SEP + `self.nstep`
+      return idetape
+
+   def create_sdprod(self,etape,nomsd):
+      """ 
+          Intention : Cette methode doit fabriquer le concept produit retourne
+                  par l'etape etape et le nommer.
+                  Elle est appelée à l'initiative de l'etape
+                  pendant le processus de construction de cette etape : 
+                    methode __call__ de la classe CMD (OPER ou MACRO)
+                  Ce travail est réalisé par le contexte supérieur 
+                  (etape.parent) car dans certains cas, le concept ne doit 
+                  pas etre fabriqué mais l'etape doit simplement utiliser 
+                  un concept préexistant.
+                  Cas 1 : etape.reuse != None : le concept est réutilisé
+                  Cas 2 : l'étape appartient à une macro qui a déclaré un 
+                          concept de sortie qui doit etre produit par cette 
+                          etape.
+                  Dans le cas du JDC, le deuxième cas ne peut pas se produire.
+      """
+      sd= etape.get_sd_prod()
+      if sd != None and etape.reuse == None:
+         # ATTENTION : On ne nomme la SD que dans le cas de non reutilisation 
+         # d un concept
+         self.NommerSdprod(sd,nomsd)
+      return sd
+
+   def NommerSdprod(self,sd,sdnom):
+      """ 
+          Nomme la SD apres avoir verifie que le nommage est possible : nom 
+          non utilise
+          Si le nom est deja utilise, leve une exception
+          Met le concept créé dans le concept global g_context
+      """
+      if CONTEXT.debug : print "JDC.NommerSdprod ",sd,sdnom
+      o=self.g_context.get(sdnom,None)
+      if isinstance(o,ASSD):
+         raise AsException("Nom de concept deja defini : %s" % sdnom)
+
+      # ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja.
+      # Ajoute a la creation (appel de reg_sd).
+      self.g_context[sdnom]=sd
+      sd.nom=sdnom
+
+   def reg_sd(self,sd):
+      """ 
+          Methode appelee dans l __init__ d un ASSD lors de sa creation 
+          pour s enregistrer
+      """
+      self.sds.append(sd)
+      return self.o_register(sd)
+
+   def delete_concept_after_etape(self,etape,sd):
+      """
+          Met à jour les étapes du JDC qui sont après etape suite à
+          la disparition du concept sd
+      """
+      # Cette methode est définie dans le noyau mais ne sert que pendant 
+      # la phase de creation des etapes et des concepts. Il n'y a aucun 
+      # traitement particulier à réaliser.
+      # Dans d'autres conditions, il faut surcharger cette méthode
+      return
+
+   def supprime(self):
+      N_OBJECT.OBJECT.supprime(self)
+      for etape in self.etapes:
+         etape.supprime()
+
+   def get_file(self,unite=None,fic_origine=''):
+      """
+          Retourne le nom du fichier correspondant à un numero d'unité 
+          logique (entier) ainsi que le source contenu dans le fichier
+      """
+      if self.appli :
+         # Si le JDC est relié à une application maitre, on délègue la recherche
+         file= self.appli.get_file(unite,fic_origine)
+      else:
+         file = None
+         if unite != None:
+            if os.path.exists("fort."+str(unite)):
+               file= "fort."+str(unite)
+         if file == None :
+            raise AsException("Impossible de trouver le fichier correspondant \
+                               a l unite %s" % unite)
+         if not os.path.exists(file):
+            raise AsException("%s n'est pas un fichier existant" % unite)
+      fproc=open(file,'r')
+      text=string.replace(fproc.read(),'\r\n','\n')
+      fproc.close()
+      linecache.cache[file]=0,0,string.split(text,'\n'),file
+      return file,text
+
+   def set_par_lot(self,par_lot):
+      """ 
+          Met le mode de traitement a PAR LOT 
+          ou a COMMANDE par COMMANDE
+          en fonction de la valeur du mot cle PAR_LOT et 
+          du contexte : application maitre ou pas
+      """
+      if self.appli == None:
+        # Pas d application maitre
+        self.par_lot=par_lot
+      else:
+        # Avec application maitre
+        self.par_lot='OUI'
+
+   def accept(self,visitor):
+      """
+         Cette methode permet de parcourir l'arborescence des objets
+         en utilisant le pattern VISITEUR
+      """
+      visitor.visitJDC(self)
+
+   def interact(self):
+      """
+          Cette methode a pour fonction d'ouvrir un interpreteur 
+          pour que l'utilisateur entre des commandes interactivement
+      """
+      CONTEXT.set_current_step(self)
+      try:
+         # Le module nommage utilise le module linecache pour accéder
+         # au source des commandes du jeu de commandes.
+         # Dans le cas d'un fichier, on accède au contenu de ce fichier
+         # Dans le cas de la console interactive, il faut pouvoir accéder
+         # aux commandes qui sont dans le buffer de la console
+         import linecache,code
+         console= code.InteractiveConsole(self.g_context,filename="<console>")
+         linecache.cache["<console>"]=0,0,console.buffer,"<console>"
+         banner="""***********************************************
+*          Interpreteur interactif %s
+***********************************************""" % self.code
+         console.interact(banner)
+      finally:
+         console=None
+         CONTEXT.unset_current_step()
+
+   def get_contexte_avant(self,etape):
+      """
+         Retourne le dictionnaire des concepts connus avant etape
+         On tient compte des commandes qui modifient le contexte
+         comme DETRUIRE ou les macros
+         Si etape == None, on retourne le contexte en fin de JDC
+      """
+      # L'étape courante pour laquelle le contexte a été calculé est 
+      # mémorisée dans self.index_etape_courante
+      # XXX on pourrait faire mieux dans le cas PAR_LOT="NON" : en 
+      # mémorisant l'étape
+      # courante pendant le processus de construction des étapes.
+      # Si on insère des commandes (par ex, dans EFICAS), il faut préalablement
+      # remettre ce pointeur à 0
+      if etape:
+         index_etape=self.etapes.index(etape)
+      else:
+         index_etape=len(self.etapes)
+      if index_etape >= self.index_etape_courante:
+         # On calcule le contexte en partant du contexte existant
+         d=self.current_context
+         liste_etapes=self.etapes[self.index_etape_courante:index_etape]
+      else:
+         d=self.current_context={}
+         liste_etapes=self.etapes
+
+      for e in liste_etapes:
+         if e is etape:
+            break
+         if e.isactif():
+            e.update_context(d)
+      self.index_etape_courante=index_etape
+      return d
+
diff --git a/Noyau/N_JDC_CATA.py b/Noyau/N_JDC_CATA.py
new file mode 100644 (file)
index 0000000..ffb36d1
--- /dev/null
@@ -0,0 +1,113 @@
+""" 
+    Ce module contient la classe de definition JDC_CATA
+    qui permet de spécifier les caractéristiques d'un JDC
+"""
+
+import types,string,traceback
+
+import N_ENTITE
+import N_JDC
+
+class JDC_CATA(N_ENTITE.ENTITE):
+   """
+    Classe pour definir un jeu de commandes
+
+    Attributs de classe :
+
+    - class_instance qui indique la classe qui devra etre utilisée 
+            pour créer l'objet qui servira à controler la conformité 
+            du jeu de commandes avec sa définition
+
+    - label qui indique la nature de l'objet de définition (ici, JDC)
+
+   """
+   class_instance = N_JDC.JDC
+   label = 'JDC'
+
+   def __init__(self,code='',execmodul=None,regles=(),niveaux=(),**args):
+      """
+      """
+      self.code = code
+      self.execmodul=execmodul
+      if type(regles)== types.TupleType:
+        self.regles = regles
+      else:
+        self.regles=(regles,)
+      # Tous les arguments supplémentaires sont stockés dans l'attribut args
+      # et seront passés au JDC pour initialiser ses paramètres propres
+      self.args=args
+      self.d_niveaux={}
+      self.l_niveaux=niveaux
+      self.commandes=[]
+      for niveau in niveaux:
+         self.d_niveaux[niveau.nom]=niveau
+      # On change d'objet catalogue. Il faut d'abord mettre le catalogue 
+      # courant à None
+      CONTEXT.unset_current_cata()
+      CONTEXT.set_current_cata(self)
+
+   def __call__(self,procedure=None,cata=None,cata_ord_dico=None,
+                     nom='SansNom',parent=None,**args):
+      """
+          Construit l'objet JDC a partir de sa definition (self),
+      """
+      return self.class_instance(definition=self,procedure=procedure,
+                         cata=cata,cata_ord_dico=cata_ord_dico,
+                         nom=nom,
+                         parent=parent,
+                         **args
+                         )
+
+   def enregistre(self,commande):
+      """
+         Methode qui permet aux definitions de commandes de s'enregistrer aupres
+         d'un JDC_CATA
+      """
+      self.commandes.append(commande)
+
+   def verif_cata(self):
+      """
+          Méthode de vérification des attributs de définition
+      """
+      if type(self.regles) != types.TupleType :
+        self.cr.fatal("L'attribut 'regles' doit être un tuple : %s" %`self.regles`)
+      self.verif_cata_regles()
+
+   def verif_cata_regles(self):
+      """
+         Cette méthode vérifie pour tous les objets stockés dans la liste entités
+         respectent les REGLES associés  à self
+      """
+      # A FAIRE
+
+   def report(self):
+      """
+         Methode pour produire un compte-rendu de validation d'un catalogue de commandes
+      """
+      self.cr = self.CR(debut = "Compte-rendu de validation du catalogue "+self.code,
+                         fin = "Fin Compte-rendu de validation du catalogue "+self.code)
+      self.verif_cata()
+      for commande in self.commandes:
+        cr = commande.report()
+        cr.debut = "Début Commande :"+commande.nom
+        cr.fin = "Fin commande :"+commande.nom
+        self.cr.add(cr)
+      return self.cr
+
+   def supprime(self):
+      """
+          Méthode pour supprimer les références arrières susceptibles de provoquer
+          des cycles de références
+      """
+      for commande in self.commandes:
+         commande.supprime()
+
+   def get_niveau(self,nom_niveau):
+      """
+           Retourne l'objet de type NIVEAU de nom nom_niveau
+           ou None s'il n'existe pas
+      """
+      return self.d_niveaux.get(nom_niveau,None)
+
+
+
diff --git a/Noyau/N_MACRO.py b/Noyau/N_MACRO.py
new file mode 100644 (file)
index 0000000..f34051e
--- /dev/null
@@ -0,0 +1,159 @@
+""" 
+    Ce module contient la classe de definition MACRO
+    qui permet de spécifier les caractéristiques d'une macro-commande
+"""
+
+import types,string,traceback
+
+import N_ENTITE
+import N_MACRO_ETAPE
+import nommage
+
+class MACRO(N_ENTITE.ENTITE):
+   """
+    Classe pour definir une macro-commande
+
+    Cette classe a trois attributs de classe 
+
+    - class_instance qui indique la classe qui devra etre utilisée 
+            pour créer l'objet qui servira à controler la conformité d'un 
+            macro-commande avec sa définition
+
+    - label qui indique la nature de l'objet de définition (ici, MACRO)
+
+    - nommage qui est un module Python qui fournit la fonctionnalité de nommage
+
+    et les attributs d'instance suivants :
+
+    - nom   : son nom
+
+    - op   : le numéro d'opérateur
+
+    - sd_prod : le type de concept produit. C'est une classe ou une fonction qui retourne
+                      une classe
+
+    - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur
+                        réentrant peut modifier un concept d'entrée et le produire comme concept de sortie
+
+    - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur
+                        non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort
+                        de l'objet gérant le contexte d'exécution de vérifier cette contrainte.
+
+    - fr   : commentaire associé en français
+
+    - ang : commentaire associé en anglais
+
+    - docu : clé de documentation associée
+
+    - regles : liste des règles associées
+
+    - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette
+                      fonction est exécutée lors des phases d'initialisation de l'étape associée.
+
+    - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent être
+                     rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement.
+                     Si niveau vaut None, l'opérateur est rangé au niveau global.
+
+    - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit
+                      des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut
+                      est initialisé avec args, c'est à dire les arguments d'appel restants.
+
+
+   """
+   class_instance = N_MACRO_ETAPE.MACRO_ETAPE
+   label = 'MACRO'
+   nommage = nommage
+
+   def __init__(self,nom,op,sd_prod=None,reentrant='n',repetable='o',fr="",ang="",
+                docu="",regles=(),op_init=None,niveau = None,fichier_ini=0,**args):
+      """
+         Méthode d'initialisation de l'objet MACRO. Les arguments sont utilisés pour initialiser
+         les attributs de meme nom
+      """
+      # XXX fichier_ini n'est pas utilisé pour l'instant
+      self.nom=nom
+      # op est obligatoire et permet de spécifier la procédure de construction de la macro
+      # - Si op est un entier la construction de la macro est réalisée par une subroutine fortran opsxxx ou
+      # xxx est donné par la valeur absolue de op. L'execution est egalement effectuée via cette subroutine.
+      # - Si op est une fonction Python, la construction de la macro est effectuée par l'appel à cette fonction
+      # Suivant le cas on garde l info dans self.op ou dans self.proc
+      if type(op) == types.IntType:
+        self.proc=None
+        self.op=op
+      else:
+        self.op=None
+        self.proc=op
+
+      self.sd_prod=sd_prod
+      self.reentrant=reentrant
+      self.fr=fr
+      self.ang=ang
+      self.repetable = repetable
+      self.docu=docu
+      if type(regles)== types.TupleType:
+          self.regles=regles
+      else:
+          self.regles=(regles,)
+      self.fichier_ini = fichier_ini
+      # Attribut op_init : Fonction a appeler a la construction de l operateur sauf si == None
+      self.op_init=op_init
+      self.entites=args
+      current_cata=CONTEXT.get_current_cata()
+      if niveau == None:
+         self.niveau=None
+         current_cata.enregistre(self)
+      else:
+         self.niveau=current_cata.get_niveau(niveau)
+         self.niveau.enregistre(self)
+      self.affecter_parente()
+
+   def __call__(self,reuse=None,**args):
+      """
+          Construit l'objet MACRO_ETAPE a partir de sa definition (self),
+          puis demande la construction de ses sous-objets et du concept produit.
+      """
+      nomsd=self.nommage.GetNomConceptResultat(self.nom)
+      etape= self.class_instance(oper=self,reuse=reuse,args=args)
+      etape.McBuild()
+      return etape.Build_sd(nomsd)
+
+   def make_objet(self,mc_list='oui'):
+      """
+           Cette méthode crée l'objet MACRO_ETAPE dont la définition est self sans
+           créer sa sdprod.
+           Normalement l'étape est enregistrée auprès de son parent.
+           Si l'argument mc_list vaut 'oui', elle déclenche en plus la construction
+           des objets MCxxx.
+      """
+      etape= self.class_instance(oper=self,reuse=None,args={})
+      if mc_list == 'oui':etape.McBuild()
+      return etape
+
+   def verif_cata(self):
+      """
+          Méthode de vérification des attributs de définition
+      """
+      if self.op is not None and (type(self.op) != types.IntType or self.op > 0) :
+        self.cr.fatal("L'attribut 'op' doit être un entier signé : %s" %`self.op`)
+      if self.proc is not None and type(self.proc) != types.FunctionType:
+        self.cr.fatal("L'attribut op doit être une fonction Python : %s" % `self.proc`)
+      if type(self.regles) != types.TupleType :
+        self.cr.fatal("L'attribut 'regles' doit être un tuple : %s" %`self.regles`)
+      if type(self.fr) != types.StringType :
+        self.cr.fatal("L'attribut 'fr' doit être une chaîne de caractères : %s" %`self.fr`)
+      if type(self.docu) != types.StringType :
+        self.cr.fatal("L'attribut 'docu' doit être une chaîne de caractères : %s" %`self.docu` )
+      if type(self.nom) != types.StringType :
+        self.cr.fatal("L'attribut 'nom' doit être une chaîne de caractères : %s" %`self.nom`)
+      if self.reentrant not in ('o','n','f'):
+        self.cr.fatal("L'attribut 'reentrant' doit valoir 'o','n' ou 'f' : %s" %`self.reentrant`)
+      self.verif_cata_regles()
+
+   def supprime(self):
+      """
+          Méthode pour supprimer les références arrières susceptibles de provoquer
+          des cycles de références
+      """
+      self.niveau=None
+
+
diff --git a/Noyau/N_MACRO_ETAPE.py b/Noyau/N_MACRO_ETAPE.py
new file mode 100644 (file)
index 0000000..4055910
--- /dev/null
@@ -0,0 +1,458 @@
+""" 
+    Ce module contient la classe MACRO_ETAPE qui sert à vérifier et à exécuter
+    une commande
+"""
+
+# Modules Python
+import types,sys,string
+import traceback
+
+# Modules EFICAS
+import N_MCCOMPO
+import N_ETAPE
+from N_Exception import AsException
+import N_utils
+from N_utils import AsType
+
+class MACRO_ETAPE(N_ETAPE.ETAPE):
+   """
+
+   """
+   nature = "COMMANDE"
+   def __init__(self,oper=None,reuse=None,args={}):
+      """
+         Attributs :
+
+          - definition : objet portant les attributs de définition d'une étape 
+                         de type macro-commande. Il est initialisé par 
+                          l'argument oper.
+
+          - reuse : indique le concept d'entrée réutilisé. Il se trouvera donc
+                    en sortie si les conditions d'exécution de l'opérateur 
+                    l'autorise
+
+          - valeur : arguments d'entrée de type mot-clé=valeur. Initialisé 
+                     avec l'argument args.
+
+      """
+      self.definition=oper
+      self.reuse=reuse
+      self.valeur=args
+      self.nettoiargs()
+      self.parent=CONTEXT.get_current_step()
+      self.etape = self
+      self.nom=oper.nom
+      self.idracine=oper.label
+      self.appel=N_utils.callee_where()
+      self.mc_globaux={}
+      self.g_context={}
+      # Contexte courant
+      self.current_context={}
+      self.index_etape_courante=0
+      self.etapes=[]
+      self.sds=[]
+      #  Dans le cas d'une macro écrite en Python, l'attribut Outputs est un 
+      #  dictionnaire qui contient les concepts produits de sortie 
+      #  (nom : ASSD) déclarés dans la fonction sd_prod
+      self.Outputs={}
+      self.sd=None
+      self.actif=1
+      self.sdprods=[]
+      self.make_register()
+
+   def make_register(self):
+      """
+         Initialise les attributs jdc, id, niveau et réalise les enregistrements
+         nécessaires
+      """
+      if self.parent :
+         self.jdc = self.parent.get_jdc_root()
+         self.id=self.parent.register(self)
+         self.niveau=None
+      else:
+         self.jdc = self.parent =None
+         self.id=None
+         self.niveau=None
+
+   def Build_sd(self,nom):
+      """
+         Construit le concept produit de l'opérateur. Deux cas 
+         peuvent se présenter :
+        
+         - le parent n'est pas défini. Dans ce cas, l'étape prend en charge 
+           la création et le nommage du concept.
+
+         - le parent est défini. Dans ce cas, l'étape demande au parent la 
+           création et le nommage du concept.
+
+      """
+      if not self.isactif():return
+      try:
+         # On positionne la macro self en tant que current_step pour que les 
+         # étapes créées lors de l'appel à sd_prod et à op_init aient la macro
+         #  comme parent 
+         self.set_current_step()
+         if self.parent:
+            sd= self.parent.create_sdprod(self,nom)
+            if type(self.definition.op_init) == types.FunctionType: 
+               apply(self.definition.op_init,(self,self.parent.g_context))
+         else:
+            sd=self.get_sd_prod()
+            if sd != None and self.reuse == None:
+               # On ne nomme le concept que dans le cas de non reutilisation 
+               # d un concept
+               sd.nom=nom
+         self.reset_current_step()
+         if self.jdc and self.jdc.par_lot == "NON" :
+            self.Execute()
+         return sd
+      except AsException,e:
+         self.reset_current_step()
+         raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
+                              'fichier : ',self.appel[1],e)
+      except EOFError:
+         #self.reset_current_step()
+         raise
+      except :
+         self.reset_current_step()
+         l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+         raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
+                           'fichier : ',self.appel[1]+'\n',
+                            string.join(l))
+
+   def get_sd_prod(self):
+      """
+        Retourne le concept résultat d'une macro étape
+        La difference avec une etape ou une proc-etape tient a ce que
+         le concept produit peut exister ou pas
+        Si sd_prod == None le concept produit n existe pas on retourne None
+        Deux cas :
+         cas 1 : sd_prod  n'est pas une fonction
+                 il s'agit d'une sous classe de ASSD
+                 on construit le sd à partir de cette classe
+                 et on le retourne
+         cas 2 : sd_prod est une fonction
+                  on l'évalue avec les mots-clés de l'étape (mc_liste)
+                 on construit le sd à partir de la classe obtenue
+                 et on le retourne
+      """
+      sd_prod=self.definition.sd_prod
+      self.typret=None
+      if type(self.definition.sd_prod) == types.FunctionType:
+        d=self.cree_dict_valeurs(self.mc_liste)
+        try:
+          # la sd_prod d'une macro a l'objet macro_etape lui meme en premier argument
+          # Comme sd_prod peut invoquer la méthode type_sdprod qui ajoute
+          # les concepts produits dans self.sdprods, il faut le mettre à zéro avant de l'appeler
+          self.sdprods=[]
+          sd_prod= apply(sd_prod,(self,),d)
+        except EOFError:
+          raise
+        except:
+          if CONTEXT.debug: traceback.print_exc()
+          l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+          raise AsException("impossible d affecter un type au resultat\n",string.join(l[2:]))
+
+      # on teste maintenant si la SD est réutilisée ou s'il faut la créer
+      if self.reuse:
+        if AsType(self.reuse) != sd_prod:
+          raise AsException("type de concept reutilise incompatible avec type produit")
+        self.sd=self.reuse
+      else:
+        if sd_prod == None:
+          self.sd=None
+        else:
+          self.sd= sd_prod(etape=self)
+          self.typret=sd_prod
+        if self.definition.reentrant == 'o':
+          self.reuse = self.sd
+      return self.sd
+
+   def get_type_produit(self,force=0):
+      """
+           Retourne le type du concept résultat de l'étape et eventuellement type
+            les concepts produits "à droite" du signe égal (en entrée)
+           Deux cas :
+            cas 1 : sd_prod de oper n'est pas une fonction
+                    il s'agit d'une sous classe de ASSD
+                    on retourne le nom de la classe
+            cas 2 : il s'agit d'une fonction
+                    on l'évalue avec les mots-clés de l'étape (mc_liste)
+                    et on retourne son résultat
+      """
+      if not force and hasattr(self,'typret'): return self.typret
+      if type(self.definition.sd_prod) == types.FunctionType:
+        d=self.cree_dict_valeurs(self.mc_liste)
+        try:
+          # Comme sd_prod peut invoquer la méthode type_sdprod qui ajoute
+          # les concepts produits dans self.sdprods, il faut le mettre à zéro
+          self.sdprods=[]
+          sd_prod= apply(self.definition.sd_prod,(self,),d)
+        except:
+          #traceback.print_exc()
+          return None
+      else:
+        sd_prod=self.definition.sd_prod
+      return sd_prod
+
+   def get_contexte_avant(self,etape):
+      """
+          Retourne le dictionnaire des concepts connus avant etape
+          pour les commandes internes a la macro
+          On tient compte des commandes qui modifient le contexte
+          comme DETRUIRE ou les macros
+      """
+      # L'étape courante pour laquelle le contexte a été calculé est 
+      # mémorisée dans self.index_etape_courante
+      # Si on insère des commandes (par ex, dans EFICAS), il faut
+      # préalablement remettre ce pointeur à 0
+      index_etape=self.etapes.index(etape)
+      if index_etape >= self.index_etape_courante:
+         # On calcule le contexte en partant du contexte existant
+         d=self.current_context
+         liste_etapes=self.etapes[self.index_etape_courante:index_etape]
+      else:
+         d=self.current_context={}
+         liste_etapes=self.etapes
+
+      for e in liste_etapes:
+        if e is etape:
+           break
+        if e.isactif():
+           e.update_context(d)
+      self.index_etape_courante=index_etape
+      return d
+
+   def supprime(self):
+      """
+         Méthode qui supprime toutes les références arrières afin que 
+         l'objet puisse être correctement détruit par le garbage collector
+      """
+      N_MCCOMPO.MCCOMPO.supprime(self)
+      self.jdc=None
+      self.appel=None
+      if self.sd : self.sd.supprime()
+      for concept in self.sdprods:
+         concept.supprime()
+      for etape in self.etapes:
+         etape.supprime()
+
+   def type_sdprod(self,co,t):
+      """
+           Cette methode a pour fonction de typer le concept co avec le type t
+            dans les conditions suivantes
+            1- co est un concept produit de self
+            2- co est un concept libre : on le type et on l attribue à self
+           Elle enregistre egalement les concepts produits (on fait l hypothese
+            que la liste sdprods a été correctement initialisee, vide probablement)
+      """
+      if not hasattr(co,'etape'):
+         # Le concept vaut None probablement. On ignore l'appel
+         return
+
+      if co.etape == None:
+         # le concept est libre
+         co.etape=self
+         co.__class__ = t
+         self.sdprods.append(co)
+      elif co.etape== self:
+         # le concept est produit par self
+         co.__class__ = t
+         self.sdprods.append(co)
+      elif co.etape== self.parent:
+         # le concept est produit par la macro superieure
+         # on transfere la propriete
+         # On verifie que le type du concept existant co.__class__ est un sur type de celui attendu
+         # Cette règle est normalement cohérente avec les règles de vérification des mots-clés
+         if not issubclass(t,co.__class__):
+            raise AsException("Le type du concept produit %s devrait etre une sur classe de %s" %(co.__class__,t))
+         co.etape=self
+         co.__class__ = t
+         self.sdprods.append(co)
+      elif self.issubstep(co.etape):
+         # Le concept est propriété d'une sous etape de self. Il doit etre considere
+         # comme produit par la macro => ajout dans self.sdprods
+         self.sdprods.append(co)
+      else:
+         # le concept est produit par une autre étape
+         return
+
+   def issubstep(self,etape):
+      """ 
+          Cette methode retourne un entier indiquant si etape est une
+          sous etape de la macro self ou non
+          1 = oui
+          0 = non
+      """
+      if etape in self.etapes:return 1
+      for etap in self.etapes:
+        if etap.issubstep(etape):return 1
+      return 0
+
+   def register(self,etape):
+      """ 
+          Enregistrement de etape dans le contexte de la macro : liste etapes 
+          et demande d enregistrement global aupres du JDC
+      """
+      self.etapes.append(etape)
+      idetape=self.jdc.g_register(etape)
+      return idetape
+
+   def reg_sd(self,sd):
+      """ 
+           Methode appelee dans l __init__ d un ASSD a sa creation pour
+           s enregistrer (reserve aux ASSD créés au sein d'une MACRO)
+      """
+      self.sds.append(sd)
+      return self.jdc.o_register(sd)
+
+   def create_sdprod(self,etape,nomsd):
+      """ 
+          Intention : Cette methode doit fabriquer le concept produit retourne
+                  par l'etape etape et le nommer.
+                  Elle est appelée à l'initiative de l'etape
+                  pendant le processus de construction de cette etape : methode __call__
+                  de la classe CMD (OPER ou MACRO)
+                  Ce travail est réalisé par le contexte supérieur (etape.parent)
+                  car dans certains cas, le concept ne doit pas etre fabriqué mais
+                  l'etape doit simplement utiliser un concept préexistant.
+                  Cas 1 : etape.reuse != None : le concept est réutilisé
+                  Cas 2 : l'étape appartient à une macro qui a déclaré un concept
+                          de sortie qui doit etre produit par cette etape.
+      """
+      if self.Outputs.has_key(nomsd):
+         # Il s'agit d'un concept de sortie de la macro. Il ne faut pas le créer
+         # Il faut quand meme appeler la fonction sd_prod si elle existe.
+         # get_type_produit le fait et donne le type attendu par la commande pour verification ultérieure.
+         sdprod=etape.get_type_produit()
+         sd=self.Outputs[nomsd]
+         # On verifie que le type du concept existant sd.__class__ est un sur type de celui attendu
+         # Cette règle est normalement cohérente avec les règles de vérification des mots-clés
+         if not issubclass(sdprod,sd.__class__):
+            raise AsException("Le type du concept produit %s devrait etre une sur classe de %s" %(sd.__class__,sdprod))
+         # La propriete du concept est transferee a l'etape avec le type attendu par l'étape
+         etape.sd=sd
+         #sd.__call__=sdprod
+         #XXX Il semble plus logique que ce soit class et non pas call ???
+         sd.__class__=sdprod
+         sd.etape=etape
+      else:
+         sd= etape.get_sd_prod()
+         if sd != None and etape.reuse == None:
+            # ATTENTION : On ne nomme la SD que dans le cas de non reutilisation d un concept
+            self.NommerSdprod(sd,nomsd)
+      return sd
+
+   def NommerSdprod(self,sd,sdnom):
+      """ 
+          Cette methode est appelee par les etapes internes de la macro
+          La macro appelle le JDC pour valider le nommage
+          On considere que l espace de nom est unique et géré par le JDC
+          Si le nom est deja utilise, l appel leve une exception
+      """
+      #XXX attention inconsistence : prefix et gcncon ne sont pas 
+      # définis dans le package Noyau. La methode NommerSdprod pour
+      # les macros devrait peut etre etre déplacée dans Build ???
+      if CONTEXT.debug : print "MACRO.NommerSdprod: ",sd,sdnom
+      if hasattr(self,'prefix'):
+        # Dans le cas de l'include_materiau on ajoute un prefixe au nom du concept
+        if sdnom != self.prefix:sdnom=self.prefix+sdnom
+      if self.Outputs.has_key(sdnom):
+        # Il s'agit d'un concept de sortie de la macro produit par une sous commande
+        sdnom=self.Outputs[sdnom].nom
+      elif sdnom[0] == '_':
+        # Si le nom du concept commence par le caractere _ on lui attribue
+        # un identificateur JEVEUX construit par gcncon et respectant
+        # la regle gcncon legerement adaptee ici
+        # nom commencant par __ : il s'agit de concepts qui seront detruits
+        # nom commencant par _ : il s'agit de concepts intermediaires qui seront gardes
+        # ATTENTION : il faut traiter différemment les concepts dont le nom
+        # commence par _ mais qui sont des concepts nommés automatiquement par
+        # une éventuelle sous macro.
+        # Le test suivant n'est pas tres rigoureux mais permet de fonctionner pour le moment (a améliorer)
+        if sdnom[1] in string.digits:
+          # Ce concept provient probablement d'une macro appelee par self
+          pass
+        elif sdnom[1] == '_':
+          sdnom=self.gcncon('.')
+        else:
+          sdnom=self.gcncon('_')
+      if self.sd != None and self.sd.nom == sdnom :
+        # Il s'agit du concept produit par la macro, il a deja ete nomme.
+        # On se contente de donner le meme nom au concept produit par la sous commande
+        # sans passer par la routine de nommage
+        sd.nom=sdnom
+      else:
+        # On propage le nommage au contexte superieur
+        self.parent.NommerSdprod(sd,sdnom)
+
+   def delete_concept_after_etape(self,etape,sd):
+      """
+          Met à jour les étapes de la MACRO  qui sont après etape suite à
+          la disparition du concept sd
+      """
+      # Cette methode est définie dans le noyau mais ne sert que pendant la phase de creation
+      # des etapes et des concepts. Il n'y a aucun traitement particulier à réaliser
+      # Dans d'autres conditions, il faudrait surcharger cette méthode.
+      return
+
+   def accept(self,visitor):
+      """
+         Cette methode permet de parcourir l'arborescence des objets
+         en utilisant le pattern VISITEUR
+      """
+      visitor.visitMACRO_ETAPE(self)
+
+   def update_context(self,d):
+      """
+         Met à jour le contexte contenu dans le dictionnaire d
+         Une MACRO_ETAPE peut ajouter plusieurs concepts dans le contexte
+         Une fonction enregistree dans op_init peut egalement modifier le contexte
+      """
+      if type(self.definition.op_init) == types.FunctionType:
+        apply(self.definition.op_init,(self,d))
+      if self.sd != None:d[self.sd.nom]=self.sd
+      for co in self.sdprods:
+        d[co.nom]=co
+
+   def make_include(self,unite=None):
+      """
+          Inclut un fichier dont l'unite logique est unite
+      """
+      if not unite : return
+      f,text=self.get_file(unite=unite,fic_origine=self.parent.nom)
+      self.fichier_init = f
+      if f == None:return
+      self.make_contexte(f,text)
+
+   def make_poursuite(self):
+      """
+          Inclut un fichier poursuite
+      """
+      f,text=self.get_file(fic_origine=self.parent.nom)
+      self.fichier_init=f
+      if f == None:return
+      self.make_contexte(f,text)
+
+   def make_contexte(self,f,text):
+      """
+          Interprete le texte fourni (text) issu du fichier f
+          dans le contexte du parent.
+          Cette methode est utile pour le fonctionnement des
+          INCLUDE
+      """
+      # on execute le texte fourni dans le contexte forme par
+      # le contexte de l etape pere (global au sens Python)
+      # et le contexte de l etape (local au sens Python)
+      code=compile(text,f,'exec')
+      d={}
+      self.g_context = d
+      self.contexte_fichier_init = d
+      exec code in self.parent.g_context,d
+
+
+
+
+
+
+
diff --git a/Noyau/N_MCBLOC.py b/Noyau/N_MCBLOC.py
new file mode 100644 (file)
index 0000000..9792b2c
--- /dev/null
@@ -0,0 +1,85 @@
+""" 
+    Ce module contient la classe MCBLOC qui sert à controler la valeur
+    d'un bloc de mots-clés par rapport à sa définition portée par un objet
+    de type ENTITE
+"""
+
+import types
+
+import N_MCCOMPO
+
+class MCBLOC(N_MCCOMPO.MCCOMPO):
+   """
+      Classe support d'un bloc de mots-clés.
+  
+   """
+
+   nature = "MCBLOC"
+   def __init__(self,val,definition,nom,parent):
+      """
+         Attributs :
+
+          - val : valeur du bloc (dictionnaire dont les clés sont des noms de mots-clés et les valeurs
+                  les valeurs des mots-clés)
+
+          - definition : objet de définition de type BLOC associé au bloc (porte les attributs de définition)
+
+          - nom : nom du bloc. Ce nom lui est donné par celui qui crée le bloc de mot-clé
+
+          - parent : le créateur du bloc. Ce peut etre un mot-clé facteur ou un autre objet composite de type
+                     OBJECT. Si parent vaut None, le bloc ne possède pas de contexte englobant.
+
+          - mc_liste : liste des sous-objets du bloc construite par appel à la méthode build_mc
+
+      """
+      self.definition=definition
+      self.nom=nom
+      self.val = val
+      self.parent = parent
+      self.valeur = val
+      if parent :
+         self.jdc = self.parent.jdc
+         self.niveau = self.parent.niveau
+         self.etape = self.parent.etape
+      else:
+         # Le mot cle a été créé sans parent
+         self.jdc = None
+         self.niveau = None
+         self.etape = None
+      self.mc_liste=self.build_mc()
+         
+   def get_valeur(self):
+      """
+         Retourne la "valeur" de l'objet bloc. Il s'agit d'un dictionnaire dont
+         les clés seront les noms des objets de self.mc_liste et les valeurs
+         les valeurs des objets de self.mc_liste obtenues par application de 
+         la méthode get_valeur.
+
+         Dans le cas particulier d'un objet bloc les éléments du dictionnaire
+         obtenu par appel de la méthode get_valeur sont intégrés au niveau
+         supérieur.
+          
+      """
+      dico={}
+      for v in self.mc_liste:
+        val = v.get_valeur()
+        if type(val)==types.DictionaryType:
+          for i,w in val.items():
+            dico[i]=w
+        else :
+          dico[v.nom]=val
+      return dico
+  
+   def isBLOC(self):
+      """
+          Indique si l'objet est un BLOC
+      """
+      return 1
+
+   def accept(self,visitor):
+      """
+         Cette methode permet de parcourir l'arborescence des objets
+         en utilisant le pattern VISITEUR
+      """
+      visitor.visitMCBLOC(self)
+
diff --git a/Noyau/N_MCCOMPO.py b/Noyau/N_MCCOMPO.py
new file mode 100644 (file)
index 0000000..402c0b3
--- /dev/null
@@ -0,0 +1,293 @@
+""" 
+    Ce module contient la classe MCCOMPO qui sert à factoriser les comportements 
+    des OBJECT composites
+"""
+
+import types
+
+import N_OBJECT
+
+class MCCOMPO(N_OBJECT.OBJECT):
+   """
+      Classe support d'un OBJECT composite
+  
+   """
+
+   def build_mc(self):
+      """ 
+          Construit la liste des sous-entites du MCCOMPO
+          à partir du dictionnaire des arguments (valeur)
+      """
+      if CONTEXT.debug : print "MCCOMPO.build_mc ",self.nom
+      # Dans la phase de reconstruction args peut contenir des mots-clés
+      # qui ne sont pas dans le dictionnaire des entites de definition (self.definition.entites)
+      # de l'objet courant (self)
+      #  mais qui sont malgré tout des descendants de l'objet courant (petits-fils, ...)
+      args = self.valeur
+      if args == None : args ={}
+      mc_liste=[]
+
+      # On recopie le dictionnaire des arguments pour protéger l'original des delete (del args[k])
+      args = args.copy()
+
+      # Phase 1:
+      # On construit les sous entites presentes ou obligatoires
+      # 1- les entites présentes dans les arguments et dans la définition
+      # 2- les entités non présentes dans les arguments, présentes dans la définition avec un défaut
+      for k,v in self.definition.entites.items():
+        if args.has_key(k) or v.statut=='o' :
+          #
+          # Creation par appel de la methode __call__ de la definition de la sous entite k de self
+          # si une valeur existe dans args ou est obligatoire (generique si toutes les
+          # entites ont l attribut statut )
+          #
+          objet=self.definition.entites[k](val=args.get(k,None),nom=k,parent=self)
+          mc_liste.append(objet)
+          # Si l'objet a une position globale on l'ajoute aux listes correspondantes
+          if hasattr(objet.definition,'position'):
+            if objet.definition.position == 'global' :
+              self.append_mc_global(objet)
+            elif objet.definition.position == 'global_jdc' :
+              self.append_mc_global_jdc(objet)
+        if args.has_key(k):
+           del args[k]
+
+      # Phase 2:
+      # On construit les objets (en général, blocs) conditionnés par les mots-clés précédemment créés.
+      # A ce stade, mc_liste ne contient que les fils de l'objet courant
+      # args ne contient plus que des mots-clés qui n'ont pas été attribués car ils sont
+      #      à attribuer à des blocs du niveau inférieur ou bien sont des mots-clés erronés
+      dico_valeurs = self.cree_dict_valeurs(mc_liste)
+      for k,v in self.definition.entites.items():
+         if v.label != 'BLOC':continue
+         if v.verif_presence(dico_valeurs):
+            # Si le bloc existe :
+            #        1- on le construit
+            #        2- on l'ajoute à mc_liste
+            #        3- on récupère les arguments restant
+            #        4- on reconstruit le dictionnaire équivalent à mc_liste
+            bloc = v(nom=k,val=args,parent=self)
+            mc_liste.append(bloc)
+            args=bloc.reste_val
+            dico_valeurs = self.cree_dict_valeurs(mc_liste)
+
+      # On conserve les arguments superflus dans l'attribut reste_val
+      self.reste_val=args
+      # On ordonne la liste ainsi créée suivant l'ordre du catalogue 
+      # (utile seulement pour IHM graphique)
+      mc_liste = self.ordonne_liste(mc_liste)
+      # on retourne la liste ainsi construite
+      return mc_liste
+
+   def ordonne_liste(self,mc_liste):
+      """
+         Ordonne la liste suivant l'ordre du catalogue.
+         Seulement pour IHM graphique
+      """
+      if self.jdc and self.jdc.cata_ordonne_dico != None :
+         liste_noms_mc_ordonnee = self.get_liste_mc_ordonnee_brute(
+                       self.get_genealogie(),self.jdc.cata_ordonne_dico)
+         return self.ordonne_liste_mc(mc_liste,liste_noms_mc_ordonnee)
+      else:
+         return mc_liste
+
+   def cree_dict_valeurs(self,liste=[]):
+      """ 
+        Cette méthode crée le contexte de l'objet courant sous la forme 
+        d'un dictionnaire.
+        L'opération consiste à transformer une liste d'OBJECT en un 
+        dictionnaire.
+        Ce dictionnaire servira de contexte pour évaluer les conditions des 
+        blocs fils.
+
+        Cette méthode réalise les opérations suivantes en plus de transformer 
+        la liste en dictionnaire :
+
+        - ajouter tous les mots-clés non présents avec la valeur None
+
+        - ajouter tous les mots-clés globaux (attribut position = 'global' 
+          et 'global_jdc')
+
+        ATTENTION : -- on ne remonte pas (semble en contradiction avec la 
+                      programmation de la méthode get_valeur du bloc) les 
+                      mots-clé fils d'un bloc au niveau du
+                      contexte car celà peut générer des erreurs.
+
+        L'argument liste est, en général, une mc_liste en cours de 
+        construction, contenant les mots-clés locaux et les blocs déjà créés.
+
+      """
+      dico={}
+      for v in liste:
+        k=v.nom
+        val = v.get_valeur()
+        # Si val est un dictionnaire, on inclut ses items dans le dictionnaire
+        # représentatif du contexte. Les blocs sont retournés par get_valeur
+        # sous la forme d'un dictionnaire : les mots-clés fils de blocs sont
+        # donc remontés au niveau du contexte.
+        if type(val)==types.DictionaryType:
+          for i,w in val.items():
+            dico[i]=w
+        else:
+          dico[k]=val
+      # on rajoute tous les autres mots-clés locaux possibles avec la valeur 
+      # par défaut ou None
+      # Pour les mots-clés facteurs, on ne tient pas compte du défaut 
+      # (toujours None)
+      for k,v in self.definition.entites.items():
+        if not dico.has_key(k):
+           if v.label == 'SIMP':
+              dico[k]=v.defaut
+              # S il est declare global il n est pas necessaire de l ajouter
+              # aux mots cles globaux de l'etape
+              # car la methode recherche_mc_globaux les rajoutera
+           elif v.label == 'FACT' and v.statut in ('c','d') :
+              dico[k]=v(val=None,nom=k,parent=self)
+              # On demande la suppression des pointeurs arrieres
+              # pour briser les eventuels cycles
+              dico[k].supprime()
+           elif v.label != 'BLOC':
+              dico[k]=None
+      # A ce stade on a rajouté tous les mots-clés locaux possibles (fils directs) avec leur
+      # valeur par défaut ou la valeur None
+      # on rajoute les mots-clés globaux ...
+      dico_mc = self.recherche_mc_globaux()
+      for nom,mc in dico_mc.items() :
+        if not dico.has_key(nom) : dico[nom]=mc.valeur
+      # Il nous reste à évaluer la présence des blocs en fonction du contexte qui a changé
+      for k,v in self.definition.entites.items():
+        if v.label != 'BLOC' : continue
+        if v.verif_presence(dico):
+          # le bloc k doit être présent : on crée temporairement l'objet MCBLOC correspondant
+          # on lui passe un parent égal à None pour qu'il ne soit pas enregistré
+          bloc = v(nom=k,val=None,parent=None)
+          dico_bloc = bloc.cree_dict_valeurs()
+          bloc.supprime()
+          # on va updater dico avec dico_bloc en veillant à ne pas écraser
+          # des valeurs déjà présentes
+          for cle in dico_bloc.keys():
+            if not dico.has_key(cle):
+              dico[cle]=dico_bloc[cle]
+      return dico
+
+   def recherche_mc_globaux(self):
+      """ 
+          Retourne la liste des mots-clés globaux de l'étape à laquelle appartient self
+          et des mots-clés globaux du jdc
+      """
+      etape = self.get_etape()
+      if etape :
+        dict_mc_globaux_fac = self.recherche_mc_globaux_facultatifs()
+        dict_mc_globaux_fac.update(etape.mc_globaux)
+        if self.jdc : dict_mc_globaux_fac.update(self.jdc.mc_globaux)
+        return dict_mc_globaux_fac
+      else :
+        return {}
+
+   def recherche_mc_globaux_facultatifs(self):
+      """ 
+          Cette méthode interroge la définition de self et retourne la liste des mots-clés fils
+          directs de self de type 'global'
+      """
+      dico={}
+      etape = self.get_etape()
+      if not etape : return {}
+      for k,v in etape.definition.entites.items():
+         if v.label != 'SIMP' : continue
+         if v.position != 'global' : continue
+         if v.statut == 'o':continue
+         obj = v(val=None,nom=k,parent=etape)
+         dico[k]=obj
+      return dico
+
+   def supprime(self):
+      """ 
+         Méthode qui supprime toutes les références arrières afin que l'objet puisse
+         être correctement détruit par le garbage collector
+      """
+      N_OBJECT.OBJECT.supprime(self)
+      for child in self.mc_liste :
+         child.supprime()
+
+   def __getitem__(self,key):
+      """
+         Cette méthode retourne la valeur d'un sous mot-clé (key)
+      """
+      return self.get_mocle(key)
+
+   def get_mocle(self,key):
+      """
+          Retourne la valeur du sous mot-clé key 
+          Ce sous mot-clé peut exister, avoir une valeur par defaut ou etre 
+          dans un BLOC fils de self
+      """
+      # on cherche dans les mots cles presents, le mot cle de nom key
+      # s'il est là on retourne sa valeur (méthode get_val)
+      for child in self.mc_liste:
+        if child.nom == key : return child.get_val()
+      #  Si on n a pas trouve de mot cle present on retourne le defaut
+      #  eventuel pour les mots cles accessibles dans la definition
+      #  a ce niveau
+      try:
+        d=self.definition.entites[key]
+        if d.label == 'SIMP':
+          return d.defaut
+        elif d.label == 'FACT':
+          # il faut construire les objets necessaires pour
+          # evaluer les conditions des blocs eventuels (a faire)
+          if d.statut == 'o' :return None
+          if d.statut != 'c' and d.statut != 'd' :
+             return None
+          else :
+             return d(val=None,nom=key,parent=self)
+      except KeyError:
+        # le mot cle n est pas defini a ce niveau
+        pass
+      #  Si on a toujours rien trouve, on cherche dans les blocs presents
+      #  On suppose que tous les blocs possibles ont ete crees meme ceux
+      #  induits par un mot cle simple absent avec defaut (???)
+      for mc in self.mc_liste :
+        if not mc.isBLOC() : continue
+        try:
+          return mc.get_mocle(key)
+        except: 
+          # On n a rien trouve dans ce bloc, on passe au suivant
+          pass
+      #  On a rien trouve, le mot cle est absent.
+      #  On leve une exception
+      raise IndexError,"Le mot cle %s n existe pas dans %s" % (key,self)
+
+   def get_child(self,name,restreint = 'non'):
+      """ 
+          Retourne le fils de self de nom name ou None s'il n'existe pas
+          Si restreint vaut oui : ne regarde que dans la mc_liste
+          Si restreint vaut non : regarde aussi dans les entites possibles 
+          avec defaut    
+           (Ce dernier cas n'est utilisé que dans le catalogue)
+      """
+      for v in self.mc_liste:
+        if v.nom == name : return v
+      if restreint == 'non' :
+        for k,v in self.definition.entites.items():
+          if k == name:
+            if v.valeur != None : return v(None,k,None)
+      return None
+
+   def append_mc_global(self,mc):
+      """
+         Ajoute le mot-clé mc à la liste des mots-clés globaux de l'étape
+      """
+      etape = self.get_etape()
+      if etape :
+        nom = mc.nom
+        etape.mc_globaux[nom]=mc
+
+   def append_mc_global_jdc(self,mc):
+      """ 
+          Ajoute le mot-clé mc à la liste des mots-clés globaux du jdc 
+      """
+      nom = mc.nom
+      self.jdc.mc_globaux[nom]=mc
+
+
+
diff --git a/Noyau/N_MCFACT.py b/Noyau/N_MCFACT.py
new file mode 100644 (file)
index 0000000..a312edb
--- /dev/null
@@ -0,0 +1,76 @@
+""" 
+    Ce module contient la classe MCFACT qui sert à controler la valeur
+    d'un mot-clé facteur par rapport à sa définition portée par un objet
+    de type ENTITE
+"""
+
+import N_MCCOMPO
+
+class MCFACT(N_MCCOMPO.MCCOMPO):
+   """
+   """
+   nature = "MCFACT"
+   def __init__(self,val,definition,nom,parent):
+      """
+         Attributs :
+          - val : valeur du mot clé simple
+          - definition
+          - nom
+          - parent
+      """
+      self.definition=definition
+      self.nom=nom
+      self.val = val
+      self.parent = parent
+      self.valeur = self.GETVAL(self.val)
+      if parent :
+         self.jdc = self.parent.jdc
+         self.niveau = self.parent.niveau
+         self.etape = self.parent.etape
+      else:
+         # Le mot cle a été créé sans parent
+         self.jdc = None
+         self.niveau = None
+         self.etape = None
+      self.mc_liste=self.build_mc()
+         
+   def GETVAL(self,val):
+      """ 
+          Retourne la valeur effective du mot-clé en fonction
+          de la valeur donnée. Defaut si val == None
+      """
+      if (val is None and hasattr(self.definition,'defaut')) :
+        return self.definition.defaut
+      else:
+        return val
+
+   def get_valeur(self):
+      """
+          Retourne la "valeur" d'un mot-clé facteur qui est l'objet lui-meme.
+          Cette valeur est utilisée lors de la création d'un contexte 
+          d'évaluation d'expressions à l'aide d'un interpréteur Python
+      """
+      return self
+
+   def get_val(self):
+      """
+          Une autre méthode qui retourne une "autre" valeur du mot clé facteur.
+          Elle est utilisée par la méthode get_mocle
+      """
+      return [self]
+
+   def __getitem__(self,key):
+      """ 
+          Dans le cas d un mot cle facteur unique on simule une liste de 
+          longueur 1
+      """
+      if key == 0:return self
+      return self.get_mocle(key)
+
+   def accept(self,visitor):
+      """
+         Cette methode permet de parcourir l'arborescence des objets
+         en utilisant le pattern VISITEUR
+      """
+      visitor.visitMCFACT(self)
+
diff --git a/Noyau/N_MCLIST.py b/Noyau/N_MCLIST.py
new file mode 100644 (file)
index 0000000..43f267f
--- /dev/null
@@ -0,0 +1,91 @@
+""" 
+    Ce module contient la classe MCList qui sert à controler la valeur
+    d'une liste de mots-clés facteur par rapport à sa définition portée par un objet
+    de type ENTITE
+"""
+
+import UserList
+
+class MCList(UserList.UserList):
+   """ Liste semblable a la liste Python
+       mais avec quelques methodes en plus
+       = liste de MCFACT
+   """
+   nature = 'MCList'
+   def init(self,nom,parent):
+      self.definition = None
+      self.nom = nom
+      self.parent=parent
+      if parent :
+         self.jdc = self.parent.jdc
+         self.niveau = self.parent.niveau
+         self.etape = self.parent.etape
+      else:
+         # Le mot cle a été créé sans parent
+         self.jdc = None
+         self.niveau = None
+         self.etape = None
+
+   def get_valeur(self):
+      """
+         Retourne la "valeur" d'un objet MCList. Sert à construire
+         un contexte d'évaluation pour une expression Python.
+         On retourne l'objet lui-meme.
+      """
+      return self
+
+   def get_val(self):
+      """
+          Une autre méthode qui retourne une "autre" valeur d'une MCList
+          Elle est utilisée par la méthode get_mocle
+      """
+      return self
+
+   def supprime(self):
+      """ 
+         Méthode qui supprime toutes les références arrières afin que l'objet puisse
+         être correctement détruit par le garbage collector 
+      """
+      self.parent = None
+      self.etape = None
+      self.jdc = None
+      self.niveau = None
+      for child in self.data :
+         child.supprime()
+
+   def get_child(self,name):
+      """ 
+          Retourne le fils de nom name s'il est contenu dans self
+          Par défaut retourne le fils du premier de la liste 
+      """
+      obj = self.data[0]
+      # Phase 1 : on cherche dans les fils directs de obj
+      for child in obj.mc_liste :
+        if child.nom == name: return child
+      # Phase 2 : on cherche dans les blocs de self
+      for child in obj.mc_liste:
+        if child.isBLOC() :
+          resu = child.get_child(name)
+          if resu != None : return resu
+      # Phase 3 : on cherche dans les entites possibles pour les défauts
+      for k,v in obj.definition.entites.items():
+        #if k == name: return v.defaut
+        if k == name:
+          if v.defaut != None : return v(None,k,None)
+      # si on passe ici, c'est que l'on demande un fils qui n'est pas possible --> erreur
+      #print "Erreur : %s ne peut être un descendant de %s" %(name,self.nom)
+      return None
+
+   def isBLOC(self):
+      """
+           Indique si l'objet est de type BLOC
+      """
+      return 0
+
+   def accept(self,visitor):
+      """
+         Cette methode permet de parcourir l'arborescence des objets
+         en utilisant le pattern VISITEUR
+      """
+      visitor.visitMCList(self)
+
diff --git a/Noyau/N_MCSIMP.py b/Noyau/N_MCSIMP.py
new file mode 100644 (file)
index 0000000..4816f48
--- /dev/null
@@ -0,0 +1,76 @@
+""" 
+    Ce module contient la classe MCSIMP qui sert à controler la valeur
+    d'un mot-clé simple par rapport à sa définition portée par un objet
+    de type ENTITE
+"""
+
+import N_OBJECT
+
+class MCSIMP(N_OBJECT.OBJECT):
+   """
+   """
+   nature = 'MCSIMP'
+   def __init__(self,val,definition,nom,parent):
+      """
+         Attributs :
+
+          - val : valeur du mot clé simple
+
+          - definition
+
+          - nom
+
+          - parent
+
+        Autres attributs :
+
+          - valeur : valeur du mot-clé simple en tenant compte de la valeur par défaut
+
+      """
+      self.definition=definition
+      self.nom=nom
+      self.val = val
+      self.parent = parent
+      self.valeur = self.GETVAL(self.val)
+      if parent :
+         self.jdc = self.parent.jdc
+         self.niveau = self.parent.niveau
+         self.etape = self.parent.etape
+      else:
+         # Le mot cle simple a été créé sans parent
+         self.jdc = None
+         self.niveau = None
+         self.etape = None
+         
+   def GETVAL(self,val):
+      """ 
+          Retourne la valeur effective du mot-clé en fonction
+          de la valeur donnée. Defaut si val == None
+      """
+      if (val is None and hasattr(self.definition,'defaut')) :
+        return self.definition.defaut
+      else:
+        return val
+
+   def get_valeur(self):
+      """
+          Retourne la "valeur" d'un mot-clé simple.
+          Cette valeur est utilisée lors de la création d'un contexte 
+          d'évaluation d'expressions à l'aide d'un interpréteur Python
+      """
+      return self.valeur
+
+   def get_val(self):
+      """
+          Une autre méthode qui retourne une "autre" valeur du mot clé simple.
+          Elle est utilisée par la méthode get_mocle
+      """
+      return self.valeur
+
+   def accept(self,visitor):
+      """
+         Cette methode permet de parcourir l'arborescence des objets
+         en utilisant le pattern VISITEUR
+      """
+      visitor.visitMCSIMP(self)
+
diff --git a/Noyau/N_OBJECT.py b/Noyau/N_OBJECT.py
new file mode 100644 (file)
index 0000000..fde96fa
--- /dev/null
@@ -0,0 +1,71 @@
+""" 
+    Ce module contient la classe OBJECT classe mère de tous les objets
+    servant à controler les valeurs par rapport aux définitions
+"""
+
+class OBJECT:
+   """
+      Classe OBJECT : cette classe est virtuelle et sert de classe mère
+      aux classes de type ETAPE et MOCLES.
+      Elle ne peut etre instanciée.
+      Une sous classe doit obligatoirement implémenter les méthodes :
+
+      - __init__
+
+   """
+
+   def get_etape(self):
+      """
+         Retourne l'étape à laquelle appartient self
+         Un objet de la catégorie etape doit retourner self pour indiquer que
+         l'étape a été trouvée
+         XXX double emploi avec self.etape ???
+      """
+      if self.parent == None: return None
+      return self.parent.get_etape()
+
+   def supprime(self):
+      """ 
+         Méthode qui supprime les références arrières suffisantes pour
+         que l'objet puisse être correctement détruit par le 
+         garbage collector
+      """
+      self.parent = None
+      self.etape = None
+      self.jdc = None
+      self.niveau = None
+
+   def get_val(self):
+      """
+          Retourne la valeur de l'objet. Cette méthode fournit
+          une valeur par defaut. Elle doit etre dérivée pour chaque 
+          type d'objet
+      """
+      return self
+
+   def isBLOC(self):
+      """
+          Indique si l'objet est un BLOC
+      """
+      return 0
+
+   def get_jdc_root(self):
+      """
+          Cette méthode doit retourner l'objet racine c'est à dire celui qui
+          n'a pas de parent
+      """
+      if self.parent:
+         return self.parent.get_jdc_root()
+      else:
+         return self
+
+   def GETVAL(self,val):
+      """
+          Retourne la valeur effective du mot-clé en fonction
+          de la valeur donnée. Defaut si val == None
+      """
+      if (val is None and hasattr(self.definition,'defaut')) :
+        return self.definition.defaut
+      else:
+        return val
+
diff --git a/Noyau/N_OPER.py b/Noyau/N_OPER.py
new file mode 100644 (file)
index 0000000..f7daa99
--- /dev/null
@@ -0,0 +1,143 @@
+""" 
+    Ce module contient la classe de definition OPER
+    qui permet de spécifier les caractéristiques d'un opérateur
+"""
+
+import types,string,traceback
+
+import N_ENTITE
+import N_ETAPE
+import nommage
+
+class OPER(N_ENTITE.ENTITE):
+   """
+    Classe pour definir un opérateur
+
+    Cette classe a trois attributs de classe 
+
+    - class_instance qui indique la classe qui devra etre utilisée 
+            pour créer l'objet qui servira à controler la conformité d'un 
+            opérateur avec sa définition
+
+    - label qui indique la nature de l'objet de définition (ici, OPER)
+
+    - nommage qui est un module Python qui fournit la fonctionnalité de nommage
+
+    et les attributs d'instance suivants :
+
+    - nom   : son nom
+
+    - op   : le numéro d'opérateur
+
+    - sd_prod : le type de concept produit. C'est une classe ou une fonction qui retourne
+                      une classe
+
+    - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur
+                        réentrant peut modifier un concept d'entrée et le produire comme concept de sortie
+
+    - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur
+                        non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort
+                        de l'objet gérant le contexte d'exécution de vérifier cette contrainte.
+
+    - fr   : commentaire associé en français
+
+    - ang : commentaire associé en anglais
+
+    - docu : clé de documentation associée
+
+    - regles : liste des règles associées
+
+    - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette
+                      fonction est exécutée lors des phases d'initialisation de l'étape associée.
+
+    - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent être
+                     rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement.
+                     Si niveau vaut None, l'opérateur est rangé au niveau global.
+
+    - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit
+                      des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut
+                      est initialisé avec args, c'est à dire les arguments d'appel restants.
+
+
+   """
+   class_instance = N_ETAPE.ETAPE
+   label = 'OPER'
+   nommage = nommage
+
+   def __init__(self,nom,op,sd_prod,reentrant='n',repetable='o',fr="",ang="",
+                docu="",regles=(),op_init=None,niveau = None,**args):
+      """
+         Méthode d'initialisation de l'objet OPER. Les arguments sont utilisés pour initialiser
+         les attributs de meme nom
+      """
+      self.nom=nom
+      self.op=op
+      self.sd_prod=sd_prod
+      self.reentrant=reentrant
+      self.fr=fr
+      self.ang=ang
+      self.repetable = repetable
+      self.docu=docu
+      if type(regles)== types.TupleType:
+          self.regles=regles
+      else:
+          self.regles=(regles,)
+      # Attribut op_init : Fonction a appeler a la construction de l operateur sauf si == None
+      self.op_init=op_init
+      self.entites=args
+      current_cata=CONTEXT.get_current_cata()
+      if niveau == None:
+         self.niveau=None
+         current_cata.enregistre(self)
+      else:
+         self.niveau=current_cata.get_niveau(niveau)
+         self.niveau.enregistre(self)
+      self.affecter_parente()
+
+   def __call__(self,reuse=None,**args):
+      """
+          Construit l'objet ETAPE a partir de sa definition (self),
+          puis demande la construction de ses sous-objets et du concept produit.
+      """
+      nomsd=self.nommage.GetNomConceptResultat(self.nom)
+      etape= self.class_instance(oper=self,reuse=reuse,args=args)
+      etape.McBuild()
+      return etape.Build_sd(nomsd)
+
+   def make_objet(self,mc_list='oui'):
+      """ 
+           Cette méthode crée l'objet ETAPE dont la définition est self sans
+            l'enregistrer ni créer sa sdprod.
+           Si l'argument mc_list vaut 'oui', elle déclenche en plus la construction 
+           des objets MCxxx.
+      """
+      etape= self.class_instance(oper=self,reuse=None,args={})
+      if mc_list == 'oui':etape.McBuild()
+      return etape
+
+   def verif_cata(self):
+      """
+          Méthode de vérification des attributs de définition
+      """
+      if type(self.regles) != types.TupleType :
+        self.cr.fatal("L'attribut 'regles' doit être un tuple : %s" %`self.regles`)
+      if type(self.fr) != types.StringType :
+        self.cr.fatal("L'attribut 'fr' doit être une chaîne de caractères : %s" %`self.fr`)
+      if self.reentrant not in ('o','n','f'):
+        self.cr.fatal("L'attribut 'reentrant' doit valoir 'o','n' ou 'f' : %s" %`self.reentrant`)
+      if type(self.docu) != types.StringType :
+        self.cr.fatal("L'attribut 'docu' doit être une chaîne de caractères : %s" %`self.docu` )
+      if type(self.nom) != types.StringType :
+        self.cr.fatal("L'attribut 'nom' doit être une chaîne de caractères : %s" %`self.nom`)
+      if type(self.op) != types.IntType :
+        self.cr.fatal("L'attribut 'op' doit être un entier signé : %s" %`self.op`)
+      self.verif_cata_regles()
+
+   def supprime(self):
+      """
+          Méthode pour supprimer les références arrières susceptibles de provoquer
+          des cycles de références
+      """
+      self.niveau=None
+
+
diff --git a/Noyau/N_PROC.py b/Noyau/N_PROC.py
new file mode 100644 (file)
index 0000000..3a35d98
--- /dev/null
@@ -0,0 +1,135 @@
+""" 
+    Ce module contient la classe de definition PROC
+    qui permet de spécifier les caractéristiques d'une procédure
+"""
+
+import types,string,traceback
+
+import N_ENTITE
+import N_PROC_ETAPE
+
+class PROC(N_ENTITE.ENTITE):
+   """
+    Classe pour definir un opérateur
+
+    Cette classe a deux attributs de classe 
+
+    - class_instance qui indique la classe qui devra etre utilisée 
+            pour créer l'objet qui servira à controler la conformité d'un 
+            opérateur avec sa définition
+
+    - label qui indique la nature de l'objet de définition (ici, PROC)
+
+
+    et les attributs d'instance suivants :
+
+    - nom   : son nom
+
+    - op   : le numéro d'opérateur
+
+    - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur
+                        réentrant peut modifier un concept d'entrée et le produire comme concept de sortie
+
+    - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur
+                        non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort
+                        de l'objet gérant le contexte d'exécution de vérifier cette contrainte.
+
+    - fr   : commentaire associé en français
+
+    - ang : commentaire associé en anglais
+
+    - docu : clé de documentation associée
+
+    - regles : liste des règles associées
+
+    - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette
+                      fonction est exécutée lors des phases d'initialisation de l'étape associée.
+
+    - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent être
+                     rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement.
+                     Si niveau vaut None, l'opérateur est rangé au niveau global.
+
+    - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit
+                      des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut
+                      est initialisé avec args, c'est à dire les arguments d'appel restants.
+
+
+   """
+   class_instance = N_PROC_ETAPE.PROC_ETAPE
+   label = 'PROC'
+
+   def __init__(self,nom,op,reentrant='n',repetable='o',fr="",ang="",
+                docu="",regles=(),op_init=None,niveau = None,**args):
+      """
+         Méthode d'initialisation de l'objet PROC. Les arguments sont utilisés pour initialiser
+         les attributs de meme nom
+      """
+      self.nom=nom
+      self.op=op
+      self.reentrant=reentrant
+      self.repetable = repetable
+      self.fr=fr
+      self.ang=ang
+      self.docu=docu
+      if type(regles)== types.TupleType:
+          self.regles=regles
+      else:
+          self.regles=(regles,)
+      # Attribut op_init : Fonction a appeler a la construction de l operateur sauf si == None
+      self.op_init=op_init
+      self.entites=args
+      current_cata=CONTEXT.get_current_cata()
+      if niveau == None:
+         self.niveau=None
+         current_cata.enregistre(self)
+      else:
+         self.niveau=current_cata.get_niveau(niveau)
+         self.niveau.enregistre(self)
+      self.affecter_parente()
+
+   def __call__(self,**args):
+      """
+          Construit l'objet PROC_ETAPE a partir de sa definition (self),
+          puis demande la construction de ses sous-objets et du concept produit.
+      """
+      etape= self.class_instance(oper=self,args=args)
+      etape.McBuild()
+      return etape.Build_sd()
+
+   def make_objet(self,mc_list='oui'):
+      """
+           Cette méthode crée l'objet PROC_ETAPE dont la définition est self sans
+            l'enregistrer ni créer sa sdprod.
+           Si l'argument mc_list vaut 'oui', elle déclenche en plus la construction
+           des objets MCxxx.
+      """
+      etape= self.class_instance(oper=self,args={})
+      if mc_list == 'oui':etape.McBuild()
+      return etape
+
+   def verif_cata(self):
+      """
+          Méthode de vérification des attributs de définition
+      """
+      if type(self.regles) != types.TupleType :
+        self.cr.fatal("L'attribut 'regles' doit être un tuple : %s" %`self.regles`)
+      if type(self.fr) != types.StringType :
+        self.cr.fatal("L'attribut 'fr' doit être une chaîne de caractères : %s" %`self.fr`)
+      if self.reentrant not in ('o','n','f'):
+        self.cr.fatal("L'attribut 'reentrant' doit valoir 'o','n' ou 'f' : %s" %`self.reentrant`)
+      if type(self.docu) != types.StringType :
+        self.cr.fatal("L'attribut 'docu' doit être une chaîne de caractères : %s" %`self.docu` )
+      if type(self.nom) != types.StringType :
+        self.cr.fatal("L'attribut 'nom' doit être une chaîne de caractères : %s" %`self.nom`)
+      if type(self.op) != types.IntType :
+        self.cr.fatal("L'attribut 'op' doit être un entier signé : %s" %`self.op`)
+      self.verif_cata_regles()
+
+   def supprime(self):
+      """
+          Méthode pour supprimer les références arrières susceptibles de provoquer
+          des cycles de références
+      """
+      self.niveau=None
+
+
diff --git a/Noyau/N_PROC_ETAPE.py b/Noyau/N_PROC_ETAPE.py
new file mode 100644 (file)
index 0000000..3ebc123
--- /dev/null
@@ -0,0 +1,120 @@
+""" 
+    Ce module contient la classe PROC_ETAPE qui sert à vérifier et à exécuter
+    une procédure
+"""
+
+# Modules Python
+import types,sys,string
+import traceback
+
+# Modules EFICAS
+import N_MCCOMPO, N_ETAPE
+from N_Exception import AsException
+import N_utils
+
+class PROC_ETAPE(N_ETAPE.ETAPE):
+   """
+      Cette classe hérite de ETAPE. La seule différence porte sur le fait
+      qu'une procédure n'a pas de concept produit
+
+   """
+   nature = "PROCEDURE"
+   def __init__(self,oper=None,args={}):
+      """
+         Attributs :
+
+          - definition : objet portant les attributs de définition d'une étape de type opérateur. Il
+                         est initialisé par l'argument oper.
+
+          - valeur : arguments d'entrée de type mot-clé=valeur. Initialisé avec l'argument args.
+
+      """
+      self.definition=oper
+      self.valeur=args
+      self.nettoiargs()
+      self.parent=CONTEXT.get_current_step()
+      self.etape = self
+      self.nom=oper.nom
+      self.idracine=oper.label
+      self.appel=N_utils.callee_where()
+      self.mc_globaux={}
+      self.sd=None
+      self.actif=1
+      self.make_register()
+
+   def make_register(self):
+      """
+         Initialise les attributs jdc, id, niveau et réalise les enregistrements
+         nécessaires
+      """
+      if self.parent :
+         self.jdc = self.parent.get_jdc_root()
+         self.id=self.parent.register(self)
+         self.niveau=None
+      else:
+         self.jdc = self.parent =None
+         self.id=None
+         self.niveau=None
+
+   def McBuild(self):
+      """
+         Demande la construction des sous-objets et les stocke dans l'attribut
+         mc_liste.
+      """
+      self.mc_liste=self.build_mc()
+
+   def Build_sd(self):
+      """
+          Cette methode applique la fonction op_init au contexte du parent
+          et lance l'exécution en cas de traitement commande par commande
+          Elle doit retourner le concept produit qui pour une PROC est toujours None
+          En cas d'erreur, elle leve une exception : AsException ou EOFError
+      """
+      if not self.isactif():return
+      try:
+         if self.parent:
+            if type(self.definition.op_init) == types.FunctionType: 
+               apply(self.definition.op_init,(self,self.parent.g_context))
+         else:
+            pass
+         if self.jdc.par_lot == "NON" :
+            self.Execute()
+      except AsException,e:
+        raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
+                              'fichier : ',self.appel[1],e)
+      except EOFError:
+        self.reset_current_step()
+        raise
+      except :
+        l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+        raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
+                          'fichier : ',self.appel[1]+'\n',
+                          string.join(l))
+
+   def supprime(self):
+      """
+         Méthode qui supprime toutes les références arrières afin que l'objet puisse
+         être correctement détruit par le garbage collector
+      """
+      N_MCCOMPO.MCCOMPO.supprime(self)
+      self.jdc=None
+      self.appel=None
+
+   def accept(self,visitor):
+      """
+         Cette methode permet de parcourir l'arborescence des objets
+         en utilisant le pattern VISITEUR
+      """
+      visitor.visitPROC_ETAPE(self)
+
+   def update_context(self,d):
+      """
+         Met à jour le contexte de l'appelant passé en argument (d)
+         Une PROC_ETAPE n ajoute pas directement de concept dans le contexte
+         Seule une fonction enregistree dans op_init pourrait le faire
+      """
+      if type(self.definition.op_init) == types.FunctionType:
+        apply(self.definition.op_init,(self,d))
+
+
+
diff --git a/Noyau/N_REGLE.py b/Noyau/N_REGLE.py
new file mode 100644 (file)
index 0000000..c1e6473
--- /dev/null
@@ -0,0 +1,62 @@
+"""
+    Ce module contient la classe mere pour les classes de definition des regles d exclusion.
+
+    La classe REGLE est la classe de base : elle est virtuelle, elle ne doit pas etre instanciee.
+
+    Les classes regles dérivées qui seront instanciées doivent implementer la methode verif
+    dont l argument est le dictionnaire des mots cles effectivement presents
+    sur lesquels sera operee la verification de la regle
+
+    A la creation de l'objet regle on lui passe la liste des noms de mots cles concernes
+
+    Exemple ::
+
+    # Création de l'objet règle UNPARMI
+    r=UNPARMI("INFO","AFFE")
+    # Vérification de la règle r sur le dictionnaire passé en argument
+    r.verif({"INFO":v1,"AFFE":v2)
+"""
+
+import types
+
+class REGLE:
+   def __init__(self,*args):
+      """
+          Les classes dérivées peuvent utiliser cet initialiseur par défaut ou
+          le surcharger
+      """
+      self.mcs=args
+
+   def verif(self,args):
+      """
+         Les classes dérivées doivent implémenter cette méthode
+         qui doit retourner une paire dont le premier élément est une chaine de caractère
+         et le deuxième un entier.
+         L'entier peut valoir 0 ou 1. -- s'il vaut 1, la règle est vérifiée
+          s'il vaut 0, la règle n'est pas vérifiée et le texte joint contient
+         un commentaire de la non validité.
+      """
+      raise "NotImplemented : class REGLE should be derived"
+
+   def liste_to_dico(self,args):
+      """
+         Cette méthode est utilitaire pour les seuls besoins
+         des classes dérivées. 
+
+         Elle transforme une liste de noms de mots clés en un 
+         dictionnaire équivalent dont les clés sont les noms des mts-clés
+
+         Ceci permet d'avoir un traitement identique pour les listes et les dictionnaires
+      """
+      if type(args) == types.DictionaryType:
+        return args
+      elif type(args) == types.ListType:
+        dico={}
+        for arg in args :
+          dico[arg]=0
+        return dico
+      else :
+        raise "Erreur ce n'est ni un dictionnaire ni une liste",args
+
+
diff --git a/Noyau/N_SIMP.py b/Noyau/N_SIMP.py
new file mode 100644 (file)
index 0000000..f605ebb
--- /dev/null
@@ -0,0 +1,115 @@
+""" Ce module contient la classe de definition SIMP
+    qui permet de spécifier les caractéristiques des mots clés simples
+"""
+
+import types
+
+import N_ENTITE
+import N_MCSIMP
+
+class SIMP(N_ENTITE.ENTITE):
+   """
+    Classe pour definir un mot cle simple 
+
+    Cette classe a deux attributs de classe 
+
+    - class_instance qui indique la classe qui devra etre utilisée 
+            pour créer l'objet qui servira à controler la conformité d'un 
+            mot-clé simple avec sa définition
+
+    - label qui indique la nature de l'objet de définition (ici, SIMP)
+
+   """
+   class_instance = N_MCSIMP.MCSIMP
+   label = 'SIMP'
+
+   def __init__(self,typ,fr="",ang="",statut='f',into=None,defaut=None,
+                     min=1,max=1,homo=1,position ='local',
+                     val_min = '**',val_max='**',docu=""):
+     
+      """
+          Un mot-clé simple est caractérisé par les attributs suivants :
+
+          - type : cet attribut est obligatoire et indique le type de valeur attendue 
+
+          - fr   :
+
+          - ang :
+
+          - statut :
+
+          - into   :
+
+          - defaut :
+
+          - min
+
+          - max
+
+          - homo
+
+          - position
+
+          - val_min
+
+          - val_max
+
+          - docu
+      """
+      N_ENTITE.ENTITE.__init__(self)
+      # Initialisation des attributs
+      if type(typ) == types.TupleType :
+          self.type=typ
+      else :
+          self.type=(typ,)
+      self.fr=fr
+      self.ang=ang
+      self.statut=statut
+      self.into=into
+      self.defaut=defaut
+      self.min=min
+      self.max=max
+      self.homo=homo
+      self.position = position
+      self.val_min=val_min
+      self.val_max=val_max
+      self.docu = docu
+
+   def verif_cata(self):
+      """
+          Cette methode sert à valider les attributs de l'objet de définition 
+          de la classe SIMP
+      """
+      if type(self.min) != types.IntType :
+         if self.min != '**':
+            self.cr.fatal("L'attribut 'min' doit être un entier : "+`self.min`)
+      if type(self.max) != types.IntType :
+         if self.max != '**' :
+            self.cr.fatal("L'attribut 'max' doit être un entier : "+`self.max`)
+      if self.min > self.max :
+         self.cr.fatal("Nombres d'occurrence min et max invalides : %s %s" %(`self.min`,`self.max`))
+      if type(self.fr) != types.StringType :
+         self.cr.fatal("L'attribut 'fr' doit être une chaîne de caractères : %s" +`self.fr`)
+      if self.statut not in ['o','f','c','d']:
+         self.cr.fatal("L'attribut 'statut' doit valoir 'o','f','c' ou 'd' : %s" %`self.statut`)
+      if self.homo != 0 and self.homo != 1 :
+         self.cr.fatal("L'attribut 'homo' doit valoir 0 ou 1 : %s" %`self.homo`)
+      if self.into != None :
+         if type(self.into) != types.TupleType :
+            self.cr.fatal("L'attribut 'into' doit être un tuple : %s" %`self.into`)
+      if self.position not in ['local','global','global_jdc']:
+         self.cr.fatal("L'attribut 'position' doit valoir 'local','global' ou 'global_jdc' : %s" %`self.position`)
+
+
+   def __call__(self,val,nom,parent=None):
+      """
+          Construit un objet mot cle simple (MCSIMP) a partir de sa definition (self)
+          de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent)
+      """
+      return self.class_instance(nom=nom,definition=self,val=val,parent=parent)
+
+
+
+
+
+
diff --git a/Noyau/N__F.py b/Noyau/N__F.py
new file mode 100644 (file)
index 0000000..4833ced
--- /dev/null
@@ -0,0 +1,32 @@
+import UserDict
+
+class _F(UserDict.UserDict):
+   """
+       Cette classe a un comportement semblable à un 
+       dictionnaire Python et permet de donner
+       la valeur d'un mot-clé facteur avec pour les sous 
+       mots-clés la syntaxe motcle=valeur
+   """
+
+   def __init__(self,**args):
+      self.data=args
+
+   def supprime(self):
+      self.data={}
+
+   def __cmp__(self, dict):
+      if type(dict) == type(self.data):
+        return cmp(self.data, dict)
+      elif hasattr(dict,"data"):
+        return cmp(self.data, dict.data)
+      else:
+        return cmp(self.data, dict)
+
+   def copy(self):
+      import copy
+      c= copy.copy(self)
+      c.data=self.data.copy()
+      return c
+
+
+   
diff --git a/Noyau/N_utils.py b/Noyau/N_utils.py
new file mode 100644 (file)
index 0000000..dab93ba
--- /dev/null
@@ -0,0 +1,126 @@
+"""
+   Ce module contient des fonctions utilitaires
+"""
+
+# Modules Python
+import sys,types
+import string
+
+# Modules EFICAS
+from N_Exception import AsException
+
+SEP='_'
+
+try:
+   # Si la version de Python possède la fonction _getframe
+   # on l'utilise.
+   cur_frame=sys._getframe
+except:
+   # Sinon on l'émule
+   def cur_frame(offset=0):
+     """ Retourne la frame d execution effective eventuellement en remontant
+         de offset niveaux dans la pile d execution
+         Si il y a moins de offset niveaux retourne None
+     """
+     try:1/0
+     except:
+       frame=sys.exc_info()[2].tb_frame.f_back
+     while offset > 0:
+       if frame == None:return None
+       frame=frame.f_back
+       offset=offset-1
+     return frame
+
+
+def callee_where(niveau=4):
+   """ 
+      recupere la position de l appel 
+   """
+   frame=cur_frame(niveau)
+   if frame == None: return 0,"inconnu",0,{}
+   try:
+     return frame.f_lineno,frame.f_code.co_filename,frame.f_code.co_firstlineno,frame.f_locals
+   except:
+     return 0,"inconnu",0,{}
+
+def AsType(a):
+   """
+      Retourne le type d'un concept (a) à partir
+      des caractéristiques de l'objet Python
+   """
+   if type(a) in (types.TupleType,types.ListType):return AsType(a[0])
+   if type(a) == types.InstanceType:return a.__class__
+   if type(a) == types.FloatType:return "R"
+   if type(a) == types.IntType:return "I"
+   if type(a) == types.StringType:return "TXM"
+   if a == None : return None
+   print 'a=',a,type(a)
+   raise AsException("type inconnu")
+
+def prbanner(s):
+   print "*"*(len(s)+10)
+   print "*"*5 + s + "*"*5
+   print "*"*(len(s)+10)
+
+def repr_float(valeur):
+  """ 
+      Cette fonction représente le réel valeur comme une chaîne de caractères
+      sous forme mantisse exposant si nécessaire cad si le nombre contient plus de
+      5 caractères
+      NB : valeur est un réel au format Python ou une chaîne de caractères représentant un réel
+  """
+  if type(valeur) == types.StringType : valeur = eval(valeur)
+  if valeur == 0. : return '0.0'
+  if abs(valeur) > 1. :
+    if abs(valeur) < 10000. : return repr(valeur)
+  else :
+    if abs(valeur) > 0.01 : return repr(valeur)
+  t=repr(valeur)
+  if string.find(t,'e') != -1 or string.find(t,'E') != -1 :
+    # le réel est déjà sous forme mantisse exposant !
+    # --> on remplace e par E
+    t=string.replace(t,'e','E')
+    # --> on doit encore vérifier que la mantisse contient bien un '.'
+    if string.find(t,'.')!= -1:
+      return t
+    else:
+      # -->il faut rajouter le point avant le E
+      t=string.replace(t,'E','.E')
+      return t
+  s=''
+  neg = 0
+  if t[0]=='-':
+    s=s+t[0]
+    t=t[1:]
+  cpt = 0
+  if string.atof(t[0]) == 0.:
+    # réel plus petit que 1
+    neg = 1
+    t=t[2:]
+    cpt=1
+    while string.atof(t[0]) == 0. :
+      cpt = cpt+1
+      t=t[1:]
+    s=s+t[0]+'.'
+    for c in t[1:]:
+      s=s+c
+  else:
+    # réel plus grand que 1
+    s=s+t[0]+'.'
+    if string.atof(t[1:]) == 0.:
+      l=string.split(t[1:],'.')
+      cpt = len(l[0])
+    else:
+      r=0
+      pt=0
+      for c in t[1:]:
+        r=r+1
+        if c != '.' :
+          if pt != 1 : cpt = cpt + 1
+          s=s+c
+        else:
+          pt = 1
+          if r+1 == len(t) or string.atof(t[r+1:]) == 0.:break
+  s=s+'E'+neg*'-'+repr(cpt)
+  return s
+
diff --git a/Noyau/__init__.py b/Noyau/__init__.py
new file mode 100644 (file)
index 0000000..13f30aa
--- /dev/null
@@ -0,0 +1,20 @@
+""" 
+    Ce package fournit les classes de base d'EFICAS.
+    Ces classes permettent d'effectuer quelques opérations basiques :
+
+      - la création
+
+      - la vérification des définitions
+
+      - la création d'objets de type OBJECT à partir d'une définition de type ENTITE
+"""
+# Avant toutes choses, on met le module context dans le global de l'interpreteur (__builtin__)
+# sous le nom CONTEXT afin d'avoir accès aux fonctions
+# get_current_step, set_current_step et unset_current_step de n'importe où
+import context
+import __builtin__
+__builtin__.CONTEXT=context
+
+# Classes de base
+from N_SIMP import SIMP
+from N_FACT import FACT
diff --git a/Noyau/context.py b/Noyau/context.py
new file mode 100644 (file)
index 0000000..8c5006b
--- /dev/null
@@ -0,0 +1,46 @@
+_root=None
+_cata=None
+debug=0
+
+def set_current_step(step):
+   """
+      Fonction qui permet de changer la valeur de l'étape courante
+   """
+   global _root
+   if _root : raise "Impossible d'affecter _root. Il devrait valoir None"
+   _root=step
+
+def get_current_step():
+   """
+      Fonction qui permet d'obtenir la valeur de l'étape courante
+   """
+   return _root
+
+def unset_current_step():
+   """
+      Fonction qui permet de remettre à None l'étape courante
+   """
+   global _root
+   _root=None
+
+def set_current_cata(cata):
+   """
+      Fonction qui permet de changer l'objet catalogue courant
+   """
+   global _cata
+   if _cata : raise "Impossible d'affecter _cata. Il devrait valoir None"
+   _cata=cata
+
+def get_current_cata():
+   """
+      Fonction qui retourne l'objet catalogue courant
+   """
+   return _cata
+
+def unset_current_cata():
+   """
+      Fonction qui permet de remettre à None le catalogue courant
+   """
+   global _cata
+   _cata=None
+
diff --git a/Noyau/nommage.py b/Noyau/nommage.py
new file mode 100644 (file)
index 0000000..566a52f
--- /dev/null
@@ -0,0 +1,123 @@
+"""
+   Ce module sert à nommer les concepts produits par les commandes.
+   Le nom du concept est obtenu en appelant la fonction GetNomConceptResultat
+   du module avec le nom de la commande en argument.
+   
+   Cette fonction parcourt le source dans lequel la commande se trouve, parse le
+   fichier et retrouve le nom du concept qui se trouve à gauche du signe = précédant
+   le nom de la commande.
+
+   Cette fonction utilise la fonction cur_frame du module N_utils qui retourne la frame
+   d'exécution Python située 2 niveaux au-dessus. C'est à partir de cette frame que
+   l'on retrouve le fichier source et le numéro de ligne où se trouve l'appel à la commande.
+
+"""
+
+# Modules Python
+import re,string
+import linecache
+
+# Modules EFICAS
+import N_utils
+
+regex1='=\s*%s\s*\('
+
+def GetNomConceptResultat(ope):
+  """
+     Cette fonction recherche dans la pile des appels, l'appel à la commande
+     qui doit etre situé à 2 niveaux au-dessus (cur_frame(2)).
+     On retrouve d'abord la frame d'exécution f. Puis le numéro de la ligne
+     dans le source f.f_lineno et le nom du fichier source (f.f_code.co_filename).
+     A partir de là, on récupère la ligne de source avec linecache.getline
+     et on vérifie que cette ligne correspond véritablement à l'appel.
+
+     En effet, lorsque les commandes tiennent sur plusieurs lignes, on retrouve
+     la dernière ligne. Il faut donc remonter dans le source jusqu'à la première 
+     ligne.
+
+     Enfin la fonction evalnom forme un nom acceptable lorsque le concept est un
+     élément d'une liste, par exemple.
+
+  """
+  f=N_utils.cur_frame(2)
+  lineno = f.f_lineno     # XXX Too bad if -O is used
+  #lineno = f_lineno(f)  # Ne marche pas toujours
+  co = f.f_code
+  filename = co.co_filename
+  name = co.co_name
+  #print "NOMOP,FICHIER, LIGNE ",ope,filename,lineno
+  line = linecache.getline(filename, lineno)
+  if not line: line = None
+
+  list=[]
+  list.append(line)
+  while lineno > 0:
+    #print "LIGNE ",line
+    if re.search(regex1 % ope,line):
+      l=re.split(regex1 % ope,line)
+      list.reverse()
+      #print "COMMANDE ",string.join(list)
+      #print "SPLIT ",l
+      # On suppose que le concept resultat a bien ete
+      # isole en tete de la ligne de source
+      m=evalnom(string.strip(l[0]),f.f_locals)
+      #print "NOMS ",m
+      return m[-1]
+    lineno=lineno-1
+    line = linecache.getline(filename, lineno)
+    list.append(line)
+  #print "appel inconnu"
+  return ""
+
+def evalnom(text,d):
+  """
+   Retourne un nom pour le concept resultat identifie par text
+   Pour obtenir ce nom il y a plusieurs possibilites :
+    1-text est un identificateur python c est le nom du concept
+    2-text est un element d une liste on construit le nom en
+      evaluant la partie indice dans le contexte de l appelant d
+  """
+  l=re.split('([\[\]]+)',text)
+  #print l
+  if l[-1] == '' :l=l[:-1]
+  lll=[]
+  i=0
+  while i<len(l):
+    s=l[i]
+    ll=string.split(s,',')
+    ll=re.split('[ ,]+',s)
+    if ll[0] == '' :ll=ll[1:]
+    if len(ll) == 1:
+      id0=ll[0]
+    else:
+      lll=lll+ll[0:-1]
+      id0=ll[-1]
+    if i+1<len(l) and l[i+1] == '[': # le nom est suivi d un subscript
+      sub=l[i+2]
+      nom=id0+'_'+str(eval(sub,d))
+      i=i+4
+    else:
+      nom=id0
+      i=i+1
+    lll.append(nom)
+  return lll
+
+def f_lineno(f):
+   """
+      Calcule le numero de ligne courant
+      Devrait marcher meme avec -O
+      Semble ne pas marcher en présence de tuples longs
+   """
+   c=f.f_code
+   if not hasattr(c, 'co_lnotab'):return f.f_lineno
+   tab=c.co_lnotab
+   line = c.co_firstlineno
+   stopat = f.f_lasti
+   addr = 0
+   for i in range(0, len(tab), 2):
+       addr = addr + ord(tab[i])
+       if addr > stopat:
+           break
+       line = line + ord(tab[i+1])
+   return line
+
diff --git a/Noyau/properties.py b/Noyau/properties.py
new file mode 100644 (file)
index 0000000..d57cca8
--- /dev/null
@@ -0,0 +1,3 @@
+version = "6.2.24"
+date = "15/03/2002"
+
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..4bd7cc4
--- /dev/null
+++ b/README
@@ -0,0 +1,79 @@
+
+EFICAS est constitué de plusieurs packages Python qui sont
+décrits rapidement ci-dessous.
+
+Noyau:
+   est le package de base d'Eficas et du superviseur Aster.
+   Il contient les foonctionnalités nécessaires à la création des
+   objets MCxxx, ETAPE, etc.
+   Ce package est commun à Eficas et au superviseur Aster
+
+Validation:
+   est le package qui contient les fonctionnalités de validation :
+   report et isvalid principalement. 
+   Ce package est commun à Eficas et au superviseur Aster
+
+Ihm:
+   est le package qui contient les fonctionnalités liées à l'interfacage
+   entre les objets du Noyau et l'interface graphique.
+   Ce package est spécifique Eficas.
+
+Extensions:
+   est le package qui contient les objets qui ne sont pas utilisés
+   par le superviseur Aster et ne sont donc pas dans le Noyau.
+   On y trouve les niveaux, les commentaires, les parametres, etc.
+   Ce package est spécifique Eficas.
+
+Accas:
+   est le package dans lequel on réunit les fonctionnalités des
+   packages précédents par héritage multiple. Ce sont les 
+   classes d'Accas qui sont utilisées dans le catalogue. Ce mécanisme
+   permet d'avoir un comportement différent en fonction du contexte
+   avec un meme catalogue.
+
+Editeur:
+   est le package qui contient la partie IHM proprement dite : widgets,
+   composants (item,panel), différentes parties de l'IHM : appli, bureau,
+   menubar, toolbar, statusbar, readercata, faq, splash, etc.
+   Ce package est spécifique Eficas.
+
+convert:
+   est le package qui contient les parseurs d'Eficas sous forme de plugins :
+   convert_asterv5.py et convert_python.py
+   Ce package est spécifique Eficas.
+
+generator:
+   est le package qui contient les generateurs de sortie d'Eficas sous
+   forme de plugins : generator_asterv5.py, generator_python.py,
+   generator_aplat.py
+
+Misc:
+   est le package qui contient des modules utilitaires de profiling et autres.
+
+Exemples:
+   est un répertoire qui contient quelques exemples d'utilisation
+   des packages précédents.
+
+Tools:
+   contient le package externe foztools
+
+Aster:
+   est le répertoire qui contient le script exécutable pour Aster :
+   eficas_aster.py
+   Cet executable est configuré avec les fichiers prefs.py et editeur.ini
+   du meme répertoire.
+   Les catalogues se trouvent dans le sous répertoire Cata.
+   Pour executer, aller dans le répertoire et taper ./eficas_aster.py
+
+Saturne:
+   idem pour Saturne : eficas_saturne.py, prefs.py, editeur.ini
+   Les catalogues se trouvent dans le répertoire.
+   Pour executer, aller dans le répertoire et taper ./eficas_saturne.py
+
+Minicode:
+   idem pour un code de demo : eficas_mini.py, prefs.py, editeur.ini
+   Les catalogues se trouvent dans le répertoire.
+   Pour executer, aller dans le répertoire et taper ./eficas_mini.py
+
+
+
diff --git a/Saturne/cata_saturne.py b/Saturne/cata_saturne.py
new file mode 100755 (executable)
index 0000000..15dcd76
--- /dev/null
@@ -0,0 +1,1065 @@
+# debut entete
+import Accas
+from Accas import AU_MOINS_UN,UN_PARMI,EXCLUS,PRESENT_PRESENT
+from Accas import ENSEMBLE,PRESENT_ABSENT
+from Accas import JDC_CATA,NIVEAU
+from Accas import OPER,PROC,MACRO
+from Accas import SIMP,FACT,BLOC
+from Accas import ASSD 
+#
+__version__="$Name:  $"
+__Id__="$Id: cata_saturne.py,v 1.10 2000/10/24 10:32:56 iliade Exp $"
+#
+
+JdC = JDC_CATA(code='SATURNE',
+               execmodul=None,
+               regles = (AU_MOINS_UN('CALCUL_SATURNE'),),
+               niveaux=(NIVEAU(nom='SONDES',label='Définition des sondes'),
+                     NIVEAU(nom='EQUATIONS',label='Définition des équations'),
+                     NIVEAU(nom='CALCUL',label ='Données du calcul')))
+
+# P. RASCLE MMN
+# remarques diverses sur le catalogue Saturne
+# - dans les blocs, il faut au moins un mot clé de statut obligatoire
+# probleme de rafraichissement des blocs dépendants quand la valeur d'un mot cle global (ITURB) passe de 1 à 0
+
+class sonde(ASSD):pass
+class varsca(ASSD):pass
+class flusca(ASSD):pass
+class varpre(ASSD):pass
+class varvitx(ASSD):pass
+class varvity(ASSD):pass
+class varvitz(ASSD):pass
+class eturb(ASSD):pass
+class dturb(ASSD):pass
+class tsr11(ASSD):pass
+class tsr22(ASSD):pass
+class tsr33(ASSD):pass
+class tsr12(ASSD):pass
+class tsr13(ASSD):pass
+class tsr23(ASSD):pass
+class resti(ASSD):pass
+
+# fin entete
+
+DEFI_SONDE = OPER(nom="DEFI_SONDE",op= 1,sd_prod=sonde,fr="définition d'une sonde historique avec ses coordonnées",
+                  niveau = 'SONDES',
+                  X = SIMP(statut ='o',typ='R',
+                           fr="coordonnée X de la sonde"),
+                  Y = SIMP(statut ='o',typ='R',
+                           fr="coordonnée Y de la sonde"),
+                  Z = SIMP(statut ='o',typ='R',
+                           fr="coordonnée Z de la sonde")
+                 );
+
+DEFI_SCALA = OPER(nom="DEFI_SCALA",op=2,sd_prod=varsca,fr="définition d'une inconnue scalaire avec ses paramètres physico numériques",
+                  niveau = 'EQUATIONS',
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_FLUSCA = OPER(nom="DEFI_FLUSCA",op=2,sd_prod=flusca,fr="définition des fluctuations d'une inconnue scalaire avec ses paramètres physico numériques",
+                   niveau = 'EQUATIONS',
+                  VARFL  = SIMP(statut='o',typ=varsca,fr="scalaire associé au calcul de la variance des fluctuations"),
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable"),
+                                RVARFL = SIMP(statut='o',typ='R',val_min=0,defaut=0.8,
+                                                       fr="nombre de Prandtl pour la variance des fluctuations du scalaire")
+                                )
+                  );
+
+DEFI_PRESSION = OPER(nom="DEFI_PRESSION",op=2,sd_prod=varpre,fr="définition del'inconnue pression avec ses paramètres physico numériques",
+                     niveau = 'EQUATIONS',
+                   NUMERIC = FACT(statut='o',max=01,
+                                  fr="propriétés de l'équation de pression",
+                                  ICONV  = SIMP(statut='o',typ='I',defaut=0,into=(0,1),
+                                                fr="indicateur de convection"),
+                                  ISTAT  = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                fr="présence terme instationnaire dans les matrices"),
+                                  IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="diffusion"),
+                                  IDIRCL = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                  SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                          BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                        fr="pourcentage schéma convectif au second ordre"),
+                                                          ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                        fr ="type schéma convectif au second ordre 1 : centré")
+                                                          ),
+                                  NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                  EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                fr="précision relative pour la résolution des systèmes linéaires"),
+                                  IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                fr="type de limitation des gradients"),
+                                  NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                fr="reconstruction des gradients"),
+                                  NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                  CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                fr="facteur de limitation des gradients"),
+                                  EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                fr="précision relative pour la reconstruction itérative des gradients")
+                                  ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée",
+                                                defaut="Pression"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour la grandeur"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour la grandeur"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour la grandeur"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée à la grandeur"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                    );
+
+DEFI_VITX = OPER(nom="DEFI_VITX",op=2,sd_prod=varvitx,fr="définition de l'inconnue vitesse X avec ses paramètres physico numériques",
+                 niveau = 'EQUATIONS',
+                   NUMERIC = FACT(statut='o',max=01,
+                                  fr="propriétés de l'équation de vitesse X",
+                                  ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                fr="indicateur de convection"),
+                                  ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="présence terme instationnaire dans les matrices"),
+                                  IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="diffusion"),
+                                  IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                  SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                          BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                        fr="pourcentage schéma convectif au second ordre"),
+                                                          ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                        fr ="type schéma convectif au second ordre 1 : centré")
+                                                          ),
+                                  NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                  EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                fr="précision relative pour la résolution des systèmes linéaires"),
+                                  IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                fr="type de limitation des gradients"),
+                                  NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                fr="reconstruction des gradients"),
+                                  NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                  CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                fr="facteur de limitation des gradients"),
+                                  EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                fr="précision relative pour la reconstruction itérative des gradients")
+                                  ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée",
+                                                defaut="vitesse_u1"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour la grandeur"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour la grandeur"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour la grandeur"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée à la grandeur"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                );
+
+DEFI_VITY = OPER(nom="DEFI_VITY",op=2,sd_prod=varvity,fr="définition de l'inconnue vitesse Y avec ses paramètres physico numériques",
+                 niveau = 'EQUATIONS',
+                   NUMERIC = FACT(statut='o',max=01,
+                                  fr="propriétés de l'équation de vitesse Y",
+                                  ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                fr="indicateur de convection"),
+                                  ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="présence terme instationnaire dans les matrices"),
+                                  IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="diffusion"),
+                                  IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                  SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                          BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                        fr="pourcentage schéma convectif au second ordre"),
+                                                          ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                        fr ="type schéma convectif au second ordre 1 : centré")
+                                                          ),
+                                  NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                  EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                fr="précision relative pour la résolution des systèmes linéaires"),
+                                  IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                fr="type de limitation des gradients"),
+                                  NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                fr="reconstruction des gradients"),
+                                  NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                  CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                fr="facteur de limitation des gradients"),
+                                  EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                fr="précision relative pour la reconstruction itérative des gradients")
+                                  ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée",
+                                                defaut="vitesse_v1"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour la grandeur"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour la grandeur"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour la grandeur"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée à la grandeur"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                );
+
+DEFI_VITZ = OPER(nom="DEFI_VITZ",op=2,sd_prod=varvitz,fr="définition de l'inconnue vitesse Z avec ses paramètres physico numériques",
+                 niveau = 'EQUATIONS',
+                   NUMERIC = FACT(statut='o',max=01,
+                                  fr="propriétés de l'équation de vitesse Z",
+                                  ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                fr="indicateur de convection"),
+                                  ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="présence terme instationnaire dans les matrices"),
+                                  IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="diffusion"),
+                                  IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                  SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                          BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                        fr="pourcentage schéma convectif au second ordre"),
+                                                          ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                        fr ="type schéma convectif au second ordre 1 : centré")
+                                                          ),
+                                  NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                  EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                fr="précision relative pour la résolution des systèmes linéaires"),
+                                  IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                fr="type de limitation des gradients"),
+                                  NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                fr="reconstruction des gradients"),
+                                  NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                  CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                fr="facteur de limitation des gradients"),
+                                  EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                fr="précision relative pour la reconstruction itérative des gradients")
+                                  ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée",
+                                                defaut="vitesse_w1"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour la grandeur"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour la grandeur"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour la grandeur"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée à la grandeur"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable"),
+                                )
+                );
+
+
+DEFI_ETURB = OPER(nom="DEFI_ETURB",op=2,sd_prod=eturb,fr="définition de l'inconnue energie turbulente k-eps avec ses paramètres physico numériques",
+                  niveau = 'EQUATIONS',
+                  NUMERIC = FACT(statut='o',max=01,
+                                    fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_DTURB = OPER(nom="DEFI_DTURB",op=2,sd_prod=dturb,fr="définition de l'inconnue dissipation turbulente k-eps avec ses paramètres physico numériques",
+                  niveau = 'EQUATIONS',
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR11 = OPER(nom="DEFI_TSR11",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R11 Rij-eps avec ses paramètres physico numériques",
+                  niveau = 'EQUATIONS',
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR22 = OPER(nom="DEFI_TSR22",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R22 Rij-eps avec ses paramètres physico numériques",
+                  niveau = 'EQUATIONS',
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR33 = OPER(nom="DEFI_TSR33",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R33 Rij-eps avec ses paramètres physico numériques",
+                  niveau = 'EQUATIONS',
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR12 = OPER(nom="DEFI_TSR12",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R12 Rij-eps avec ses paramètres physico numériques",
+                  niveau = 'EQUATIONS',
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR13 = OPER(nom="DEFI_TSR13",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R13 Rij-eps avec ses paramètres physico numériques",
+                  niveau = 'EQUATIONS',
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+DEFI_TSR23 = OPER(nom="DEFI_TSR23",op=2,sd_prod=tsr11,fr="définition de l'inconnue tension Reynolds R23 Rij-eps avec ses paramètres physico numériques",
+                  niveau = 'EQUATIONS',
+                  NUMERIC = FACT(statut='o',max=01,
+                                fr="propriétés numériques liées à l'inconnue",
+                                    ICONV  = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                  fr="indicateur de convection"),
+                                    ISTAT  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="présence terme instationnaire dans les matrices"),
+                                    IDIFF  = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="diffusion"),
+                                    IDIRCL = SIMP(statut='f',typ='I',defaut=1,into=(0,1),
+                                                  fr="décalage du spectre des valeurs propres en l'absence de Dirichlet"),
+                                    SCHEMA_CONVECTIF = BLOC(condition="ICONV == 1", fr ="ordre du schéma convectif",
+                                                            BLENCV = SIMP(statut='o',typ='R',defaut=0,val_min=0,val_max=1,
+                                                                          fr="pourcentage schéma convectif au second ordre"),
+                                                            ISCHCV = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
+                                                                          fr ="type schéma convectif au second ordre 1 : centré")
+                                                            ),
+                                    NITMAX = SIMP(statut='f',typ='I',defaut=10000,val_min=0,
+                                                  fr="nombre max d'itération pour la résolution des systèmes linéaires"),
+                                    EPSILO = SIMP(statut='f',typ='R',defaut=1.e-4,val_min=0,
+                                                  fr="précision relative pour la résolution des systèmes linéaires"),
+                                    IMLIGR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,-1,0,1),
+                                                  fr="type de limitation des gradients"),
+                                    NSWRGR = SIMP(statut='f',typ='I',defaut=100,val_min=0,
+                                                  fr="reconstruction des gradients"),
+                                    NSWRSM = SIMP(statut='f',typ='I',defaut=2,val_min=0,
+                                                  fr="nombre d'itérations pour la reconstruction des seconds membres"),
+                                    CLIMGR = SIMP(statut='f',typ='R',defaut=1.5,val_min=0,
+                                                  fr="facteur de limitation des gradients"),
+                                    EPSRGR = SIMP(statut='f',typ='R',defaut=1.e-5,val_min=0,
+                                                  fr="précision relative pour la reconstruction itérative des gradients")
+                                 ),
+                  RESTITUE = FACT(statut='o',max=01,
+                                  fr = "Description de la grandeur restituée",
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                                  ),
+                  MODELE = FACT(statut='o',max=01,
+                                fr="modélisation",
+                                VALREF = SIMP(statut='o',typ='R',fr="valeur de référence (température, masse volumique...)"),
+                                SCAMIN = SIMP(statut='f',typ='R',defaut=1.e12,fr="valeur minimale pour le scalaire"),
+                                SCAMAX = SIMP(statut='f',typ='R',defaut=-1.e12,fr="valeur maximale pour le scalaire"),
+                                SIGMAS = SIMP(statut='f',typ='R',val_min=0,defaut=1,fr="nombre de Prandtl pour le scalaire"),
+                                VISLS0 = SIMP(statut='o',typ='R',fr="valeur de référence de la viscosité associée au scalaire"),
+                                IVISLS = SIMP(statut='f',typ='I',defaut=0,into=(0,1),fr="viscosité variable")
+                                )
+                 );
+
+
+DEFI_RESTI = OPER(nom="DEFI_RESTI",op=2,sd_prod=resti,fr = "Description de la grandeur restituée",
+                  niveau = 'CALCUL',
+                                  NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur restituée"),
+                                  ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                  IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                fr = "inventaire des sondes utilisées pour la grandeur scalaire")
+                  );
+
+CALCUL_SATURNE = PROC(nom = "CALCUL_SATURNE",op = 1,
+                      fr = "définition des paramètres généraux pour un calcul Saturne",
+                      docu = "néant",reentrant = 'n',
+                      niveau = 'CALCUL',
+        ENVELOPPE = FACT(statut='o',max=01,fr = "gestion de l'enveloppe",
+                         IFOENV = SIMP(statut='o',typ='I',defaut=2,into=(0,1,2),position='global',
+                                       fr = "mode de communication enveloppe solveur"),
+                         ENVTOSOLV = BLOC(condition="IFOENV > 0",
+                                          fr = "liaison enveloppe vers solveur",
+                                          IMPEVI = SIMP(statut='o',typ='I',defaut=13,val_min=0,val_max=99,
+                                                        fr = "numéro de fichier enveloppe vers solveur"),
+                                          FICEVI = SIMP(statut='o',typ='TXM',defaut="enveloppe_vers_solveur          ",
+                                                        fr = "nom de fichier enveloppe vers solveur")
+                                         ),
+                         SOLVTOENV = BLOC(condition="IFOENV > 0",
+                                          fr = "liaison solveur vers enveloppe",
+                                          IMPEVO = SIMP(statut='o',typ='I',defaut=14,val_min=0,val_max=99,
+                                                        fr = "numéro de fichier solveur vers enveloppe"),
+                                          FICEVO = SIMP(statut='o',typ='TXM',defaut="solveur_vers_enveloppe          ",
+                                                        fr = "nom de fichier solveur vers enveloppe")
+                                         )
+                        ),
+        FICHIERS_CALCUL = FACT(statut='f',max=01,
+                               fr ="définition des fichiers géométrie, suite, stop",
+                               GEOMETRIE = BLOC(condition="IFOENV == 0",
+                                                fr = "fichier géométrique (pas d'enveloppe)",
+                                                IMPGEO = SIMP(statut='o',typ='I',defaut=10,val_min=0,val_max=99,
+                                                              fr = "numéro de fichier géométrique"),
+                                                FICGEO = SIMP(statut='o',typ='TXM',defaut="geomet",
+                                                              fr = "nom de fichier géométrique")
+                                               ),
+                               SUITE_AMONT = BLOC(condition="ISUITE == 1",
+                                                  fr = "fichier suite amont",
+                                                  IMPAMO = SIMP(statut='o',typ='I',defaut=11,val_min=0,val_max=99,
+                                                              fr = "numéro de fichier suite amont"),
+                                                  FICGEO = SIMP(statut='o',typ='TXM',defaut="suiamo",
+                                                              fr = "nom de fichier suite amont"),
+                                                  IFOAMO = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                              fr = "format du fichier suite amont, 0 = binaire")
+                                                 ),
+                               FICHIER_STOP = FACT(fr = "fichier stop",
+                                                   IMPSTP = SIMP(statut='o',typ='I',defaut=12,val_min=0,val_max=99,
+                                                                 fr = "numéro de fichier stop"),
+                                                   FICSTP = SIMP(statut='o',typ='TXM',defaut="ficstp",
+                                                                 fr = "nom de fichier stop")
+                                                  ),
+                               SUITE_AVAL = FACT(fr = "fichier suite aval",
+                                                 IMPAVA = SIMP(statut='o',typ='I',defaut=20,val_min=0,val_max=99,
+                                                             fr = "numéro de fichier suite aval"),
+                                                 FICAVA = SIMP(statut='o',typ='TXM',defaut="suiamo",
+                                                             fr = "nom de fichier suite aval"),
+                                                 IFOAVA = SIMP(statut='o',typ='I',defaut=1,into=(0,1),
+                                                             fr = "format du fichier suite aval, 0 = binaire")
+                                                )
+                              ),
+        POST_PROC_ENSIGHT = FACT(statut='f',max=01,
+                                 fr = "options de post processing par Ensight",
+                                 IFOENS = SIMP(statut='f',typ='I',defaut=-2,into=(-2,-1,0,1),
+                                               fr = "option type de fichier et processus générateur"),
+                                 NTCHR  = SIMP(statut='f',typ='I',defaut=-1,
+                                               fr = "périodicité de sortie des fichiers Ensight"),
+                                 ITCHR  = SIMP(statut='f',typ='I',defaut=0,val_min=0,
+                                               fr = "compteur des sorties des fichiers Ensight"),
+                                 N3S_ASCII_NOY = BLOC(condition="(IFOENS == -1) and (IFOENV == 0)",
+                                                      fr = "format Ensight N3S ASCII généré par le noyau",
+                                                      IMPPST = SIMP(statut='o',typ='I',defaut=21,val_min=0,val_max=99,
+                                                                    fr = "numéro de fichier Ensight"),
+                                                      FICPST = SIMP(statut='o',typ='TXM',defaut="dessin",
+                                                                    fr = "nom de fichier Ensight")
+                                                      ),
+                                 P0_NOY =        BLOC(condition="((IFOENS == 0) or (IFOENS == 1)) and (IFOENV == 0)",
+                                                      fr = "format Ensight P0 généré par le noyau",
+                                                      IMPEP0 = SIMP(statut='o',typ='I',defaut=22,val_min=0,val_max=99,
+                                                                    fr = "numéro de fichier Ensight"),
+                                                      EMPCHR = SIMP(statut='o',typ='TXM',defaut="./",
+                                                                    fr = "répertoire de fichier Ensight"),
+                                                      ENTCHR = SIMP(statut='o',typ='TXM',defaut="chr",
+                                                                    fr = "préfixe nom de fichier Ensight")
+                                                      )
+                                ),
+        HISTORIQUE_PONCTUEL = FACT(statut='o',max=01,
+                                   fr = "Sondes historiques",
+                                   FICHIERS_HISTORIQUES = FACT(statut='f',max=01,
+                                                               fr = "description des fichiers historiques",
+                                                               EMPHIS = SIMP(statut='o',typ='TXM',defaut="./",
+                                                                             fr="répertoire fichiers historiques"),
+                                                               EXTHIS = SIMP(statut='o',typ='TXM',defaut="hst",
+                                                                             fr="extension fichiers historiques")
+                                                               ),
+                                   NTHIST = SIMP(statut='f',typ='I',defaut=-999,
+                                                 fr="fréquence de sortie des historiques en pas de temps"),
+                                   NTHSAV = SIMP(statut='f',typ='I',defaut=-999,
+                                                 fr="fréquence de sauvegarde des historiques en pas de temps")
+                                  ),
+        OPTIONS_TURBULENCE = FACT(statut='o',max=01,
+                                  fr="modèle de turbulence",
+                                  ITURB  = SIMP(statut='f',fr="laminaire : 0, k-epsilon :1,Rij-epsilon :2",
+                                                typ='I',into=(0,1,2),defaut=1,position='global'),
+                                  MODTURB = BLOC(condition="ITURB == 1",
+                                                 fr = "option k-epsilon",
+                                                 IGRAKE = SIMP(statut='o',typ='I',
+                                                               fr="prise en compte gravité dans k-epsilon",
+                                                               into=(0,1),defaut=0),
+                                                 IDEUCH = SIMP(statut='f',typ='I',
+                                                               fr="prise en compte k-epsilon deux échelles",
+                                                               into=(0,1),defaut=1),
+                                                 IKEKOU = SIMP(statut='f',typ='I',
+                                                               fr="prise en compte couplage en incréments sur k-epsilon",
+                                                               into=(0,1),defaut=1)
+                                                 ),
+                                  TEMPTURB = BLOC(condition="ITURB == 1",
+                                                  fr = "option k-epsilon",
+                                                  ISCALT = SIMP(statut='o',typ=varsca,
+                                                                fr=" identificateur inconnue scalaire température ")
+                                                  )
+                                  ),
+        MARCHE_TEMPS = FACT(statut='o',max=01,
+                            fr = "définition de la marche en temps",
+                            DTREF  = SIMP(statut='o',fr="pas de temps de référence",
+                                                        typ='R',val_min=0),
+                            IDTVAR = SIMP(statut='f',fr="pas de temps constant : 0, variable temps espace : 1, variable temps : 2",
+                                          typ='I',into=(0,1,2),defaut=0,position='global'),
+                                  # probleme trace eficas quand un mot cle position global change
+                            PASVAR = BLOC(condition="IDTVAR != 0",fr="options pas de temps variable",
+                                          XCFMAX = SIMP(statut='o',fr="nombre de Courant-Fourier cible",
+                                                        typ='R',defaut=0.5,val_min=0),
+                                          FMIN =   SIMP(statut='f',fr="rapport min pas calculé DTREF",
+                                                        typ='R',defaut=0.1,val_min=0),
+                                          FMAX =   SIMP(statut='f',fr="rapport max pas calculé DTREF",
+                                                        typ='R',defaut=1000,val_min=0),
+                                          VARRDT = SIMP(statut='f',fr="variation relative max pas calculé entre deux instants",
+                                                        typ='R',defaut=0.1,val_min=0)
+                                          )
+                            ),
+        OPTIONS_EQUATIONS = FACT(statut='o',max=01,
+                                   fr = "propriétés des équations, inconnues principales",
+                                   IMGR   = SIMP(statut='f',fr="utilisation du multigrille pour la résolution des systèmes linéaires",
+                                                 typ='I',into=(0,1),defaut=0),
+                                   IMRGRA = SIMP(statut='f',fr="type de reconstruction des gradients 1 : moindres carrés",
+                                                 typ='I',into=(0,1),defaut=0),
+                                   ),
+        VARIABLES = FACT(statut='o',max=01,
+                         fr = "Restitution des grandeurs principales",
+                         NTLIST = SIMP(statut='f',typ='I',defaut=1,val_min=1,val_max='**',
+                                       fr = "fréquence de sortie (en pas de temps) dans le compte rendu d'éxécution"),
+                         IWARNI = SIMP(statut='f',typ='I',defaut=2,val_min=0,val_max='**',
+                                       fr = "niveau de détail des impressions dans le compte rendu d'éxécution"),
+                         MASVOL1 = FACT(statut='o',max=01,
+                                         fr = "Description de la grandeur restituée : masse volumique",
+                                         NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur : masse volumique",
+                                                       defaut="Masse_vol1"),
+                                         ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                       fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                         ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                       fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                         IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                       fr = "inventaire des sondes utilisées pour la grandeur masse volumique")
+                                        ),
+                        TURB_KE = BLOC(condition="ITURB == 1",
+                                       E_TURB = FACT(statut='o',max=01,
+                                                     fr = "Description de la grandeur restituée : énergie turbulente",
+                                                     NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur : energie turbulente",
+                                                                   defaut="Energie_1"),
+                                                     ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                                   fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                                     ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                                   fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                                     IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                                   fr = "inventaire des sondes utilisées pour la grandeur énergie turbulente")
+                                                    ),
+                                       D_TURB = FACT(statut='o',max=01,
+                                                     fr = "Description de la grandeur restituée : dissipation turbulente",
+                                                     NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur : dissipation turbulente",
+                                                                   defaut="Dissipation"),
+                                                     ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                                   fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                                     ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                                   fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                                     IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                                   fr = "inventaire des sondes utilisées pour la grandeur dissipation turbulente")
+                                                    ),
+                                       V_TURB = FACT(statut='o',max=01,
+                                                     fr = "Description de la grandeur restituée : viscosité turbulente",
+                                                     NOMVAR = SIMP(statut='o',typ='TXM',fr = "nom de la grandeur : viscosité turbulente",
+                                                                   defaut="Visc_turb1"),
+                                                     ICHRVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                                   fr = "post-traitement (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                                     ILISVR = SIMP(statut='f',typ='I',defaut=-999,into=(-999,0,1),
+                                                                   fr = "impression dans CR exécution (-999 : le code décide ; 0 : non ; 1 : oui)"),
+                                                     IHISVR = SIMP(statut='f',typ=sonde,min=0,max='**',
+                                                                   fr = "inventaire des sondes utilisées pour la grandeur viscosité turbulente")
+                                                    ),
+                                      )
+                        ),
+        GESTION_CALCUL = FACT(statut='o',max=01,
+                              fr = "calcul suite et numéros de pas de temps début et fin",
+                              ISUITE = SIMP(statut='o',typ='I',defaut=0,into=(0,1),position='global',
+                                            fr = "indicateur calcul suite (1 = suite)"),
+                              NTPABS = SIMP(statut='f',typ='I',defaut=0,
+                                            fr = "numéro dernier pas de temps calcul précédent (initialisation automatique)"),
+                              NTMABS = SIMP(statut='o',typ='I',
+                                            fr = "numéro dernier pas de temps visé (absolu)"),
+                              TTPABS = SIMP(statut='f',typ='R',defaut=0,
+                                            fr = "temps simulation au dernier pas de temps précédent (initialisation automatique)")
+                             ),
+        CONSTANTES_PHYSIQUES=FACT(statut='o',max=01,
+                                  fr = "Grandeurs physiques et modélisation",
+                                  GRAVITE = FACT(statut='o',max=01,
+                                                 fr = "composantes de la gravité",
+                                                 GX = SIMP(statut ='o',typ='R',defaut=0, fr = "gravité selon X"),
+                                                 GY = SIMP(statut ='o',typ='R',defaut=0, fr = "gravité selon Y"),
+                                                 GZ = SIMP(statut ='o',typ='R',defaut=0, fr = "gravité selon Z")
+                                                 ),
+                                  FLUIDE = FACT(statut='o',max=01,
+                                                fr = "propriétés du fluide",
+                                                RO0 = SIMP(statut ='o',typ='R',val_min=0,fr="masse volumique de référence"),
+                                                VISCL0 = SIMP(statut ='o',typ='R',val_min=0,fr="viscosité dynamique de référence"),
+                                                P0 = SIMP(statut ='o',typ='R',val_min=0,fr="pression de référence")
+                                                ),
+                                  TURBULENCE = BLOC(condition="ITURB >= 0",
+                                                    XKAPPA = SIMP(statut ='o',typ='R',defaut=0.42,val_min=0,fr="constante de Karman"),
+                                                    CSTLOG = SIMP(statut ='f',typ='R',defaut=5.2,val_min=0,fr="constante de la loi log"),
+                                                    YPLULI = SIMP(statut ='f',typ='R',defaut=2/0.42,val_min=0,fr="valeur limite de y+ pour la sous couche visqueuse"),
+                                                    CMU = SIMP(statut ='f',typ='R',defaut=0.009,val_min=0,fr="constante C mu"),
+                                                    CE1 = SIMP(statut ='f',typ='R',defaut=1.44,val_min=0,fr="constante C epsilon 1"),
+                                                    CE2 = SIMP(statut ='f',typ='R',defaut=1.92,val_min=0,fr="constante C epsilon 2"),
+                                                    CE3 = SIMP(statut ='f',typ='R',defaut=1.0,val_min=0,fr="constante C epsilon 3"),
+                                                    SIGMAK = SIMP(statut ='f',typ='R',defaut=1.0,val_min=0,fr="nombre de Prandtl pour k en k-epsilon"),
+                                                    SIGMAE = SIMP(statut ='f',typ='R',defaut=1.3,val_min=0,fr="nombre de Prandtl pour epsilon en k-epsilon"),
+                                                    ALMAX = SIMP(statut ='f',typ='R',val_min=0,fr="longueur macroscopique caractéristique du domaine"),
+                                                    UREF = SIMP(statut ='f',typ='R',val_min=0,fr="vitesse caractéristique de l'écoulement pour l'initialisation du k-epsilon")
+                                                    )
+                                  )
+                                 );
+
diff --git a/Saturne/editeur.ini b/Saturne/editeur.ini
new file mode 100644 (file)
index 0000000..8d77961
--- /dev/null
@@ -0,0 +1,22 @@
+import os
+
+import prefs
+
+rep_cata = prefs.REPINI
+
+# Accès à la documentation 
+path_doc              = os.path.join(rep_cata,'..','Doc')
+exec_acrobat    =       "/usr/bin/acroread"
+# Utilisateur/Développeur
+isdeveloppeur   =       "NON"
+path_cata_dev   =       "/tmp/cata"
+# Répertoire temporaire
+rep_travail     =   "/tmp"
+
+# Choix des catalogues
+rep_mat="bidon"
+
+catalogues = (
+              ('SATURNE','v1',os.path.join(rep_cata,'cata_saturne.py'),'python','defaut'),
+             )
+
diff --git a/Saturne/eficas_saturne.py b/Saturne/eficas_saturne.py
new file mode 100755 (executable)
index 0000000..f6ddbe9
--- /dev/null
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+"""
+    Ce module sert à lancer EFICAS configuré pour Code_Saturne
+"""
+# Modules Python
+import sys
+
+# Modules Eficas
+import prefs
+sys.path[:0]=[prefs.INSTALLDIR]
+
+import Editeur
+from Editeur import eficas_go
+
+if len(sys.argv) > 1 :
+    # on veut ouvrir un fichier directement au lancement d'Eficas
+    eficas_go.lance_eficas(code='SATURNE',fichier = sys.argv[1])
+else:
+    # on veut ouvrir Eficas 'vide'
+    eficas_go.lance_eficas(code='SATURNE')
+
diff --git a/Saturne/essai_saturne.py b/Saturne/essai_saturne.py
new file mode 100755 (executable)
index 0000000..001712a
--- /dev/null
@@ -0,0 +1,54 @@
+
+sansnom=DEFI_SONDE(Z=45,
+                   X=None,
+                   Y=None,);
+SD_1=DEFI_SONDE(Z=None,
+                X=None,
+                Y=None,);
+sd1=DEFI_SONDE(Z=1.1,
+               X=1.2,
+               Y=1.3,);
+sd2=DEFI_SONDE(Z=2.2,
+               X=2.1,
+               Y=2.3,);
+sd3=DEFI_SONDE(Z=3.1,
+               X=3.2,
+               Y=3.3,);
+temperature=DEFI_SCALA(RESTITUE=_F(NOMVAR='temperature',),
+                       MODELE=_F(VALREF=300,
+                                 VISLS0=0.1,),
+                       NUMERIC=_F(ICONV=1,
+                                  BLENCV=0,),);
+cb=DEFI_SCALA(RESTITUE=_F(NOMVAR='bore',),
+              MODELE=_F(VALREF=1000,
+                        VISLS0=0.12,),
+              NUMERIC=_F(ICONV=1,
+                         BLENCV=0,),);
+CALCUL_SATURNE(ENVELOPPE=_F(IFOENV=2,
+                            FICEVI='enveloppe_vers_solveur          ',
+                            IMPEVI=13,
+                            IMPEVO=14,FICEVO='solveur_vers_enveloppe          ',),
+               CONSTANTES_PHYSIQUES=_F(FLUIDE=_F(VISCL0=0.12,
+                                                 P0=1000000.0,
+                                                 RO0=995.3,),
+                                       GRAVITE=_F(GX=0,GY=0,GZ=0,),),
+               HISTORIQUE_PONCTUEL=_F(),
+               EQUATIONS=_F(TURBULENCE=_F(ITURB=1,ISCALT=temperature,IGRAKE=0,),),
+               DEFINITION_EQUATION=_F(INC_PRESSION=_F(ICONV=0,),
+                                      INC_VITESSEZ=_F(ICONV=1,BLENCV=0,),
+                                      INC_VITESSEY=_F(ICONV=1,BLENCV=0,),
+                                      INC_VITESSEX=_F(ICONV=1,BLENCV=0,),
+                                      INC_K=_F(ICONV=1,BLENCV=0,),
+                                      INC_EPS=_F(ICONV=1,BLENCV=0,),),
+               VARIABLES=_F(VITESSE_Z=_F(NOMVAR='Vitesse_w1',IHISVR=(sd2,sd3),),
+                            VITESSE_X=_F(NOMVAR='Vitesse_u1',),
+                            VITESSE_Y=_F(NOMVAR='Vitesse_v1',),
+                            PRESSION=_F(NOMVAR='Pression',),
+                            MASVOL1=_F(NOMVAR='Masse_vol1',),
+                            E_TURB=_F(NOMVAR='Energie_1',IHISVR=sd1,),
+                            V_TURB=_F(NOMVAR='Visc_turb1',),
+                            D_TURB=_F(NOMVAR='Dissipation',),),
+               FICHIERS_CALCUL=_F(),
+               GESTION_CALCUL=_F(NTMABS=1000,ISUITE=0,),
+               MARCHE_TEMPS=_F(DTREF=0.01,XCFMAX=0.5,),
+               );
diff --git a/Saturne/essai_saturne2.py b/Saturne/essai_saturne2.py
new file mode 100755 (executable)
index 0000000..d78d8a4
--- /dev/null
@@ -0,0 +1,82 @@
+
+SD1=DEFI_SONDE(Z=1,
+               X=2,
+               Y=3,);
+SD2=DEFI_SONDE(Z=1,
+               X=2,
+               Y=3,);
+SD3=DEFI_SONDE(Z=3,
+               X=4,
+               Y=5,);
+SD4=DEFI_SONDE(Z=12,
+               X=11,
+               Y=10,);
+SD5=DEFI_SONDE(Z=21,
+               X=21,
+               Y=21,);
+temperature=DEFI_SCALA(RESTITUE=_F(NOMVAR='temperature',
+                                   ILISVR=1,
+                                   ICHRVR=1,
+                                   IHISVR=SD1,),
+                       MODELE=_F(SIGMAS=0.9,
+                                 SCAMAX=1000,
+                                 VALREF=300.0,
+                                 SCAMIN=270,
+                                 VISLS0=0.05,
+                                 IVISLS=1,
+                                 ),
+                       NUMERIC=_F(IMLIGR=1,
+                                  CLIMGR=1.7,
+                                  EPSRGR=0.0001,
+                                  NITMAX=1000,
+                                  IDIRCL=0,
+                                  IDIFF=1,
+                                  NSWRGR=2,
+                                  NSWRSM=10,
+                                  EPSILO=1e-05,
+                                  ISTAT=1,
+                                  ICONV=1,
+                                  BLENCV=0.5,
+                                  ISCHCV=1,),);
+cb=DEFI_SCALA(RESTITUE=_F(NOMVAR='bore',),
+              MODELE=_F(VALREF=1000.0,
+                        VISLS0=0.3,),
+              NUMERIC=_F(ICONV=1,
+                         BLENCV=0,),);
+CALCUL_SATURNE(ENVELOPPE=_F(IFOENV=2,
+                            FICEVI='Enveloppe_vers_solveur          ',
+                            IMPEVI=83,
+                            IMPEVO=84,
+                            FICEVO='Solveur_vers_enveloppe          ',),
+               OPTIONS_TURBULENCE=_F(ISCALT=temperature),
+               CONSTANTES_PHYSIQUES=_F(FLUIDE=_F(VISCL0=0.1,
+                                                 P0=10000.0,
+                                                 RO0=1000.0,),
+                                       GRAVITE=_F(GX=0,
+                                                  GY=0,
+                                                  GZ=0,),),
+               HISTORIQUE_PONCTUEL=_F(FICHIERS_HISTORIQUES=_F(EXTHIS='histo',
+                                                              EMPHIS='./',),
+                                      NTHIST=1,
+                                      NTHSAV=20,),
+               VARIABLES=_F( MASVOL1=_F(NOMVAR='Masse_vol1',
+                                       IHISVR=SD2,
+                                       ICHRVR=0,
+                                       ILISVR=1,),
+                            NTLIST=2,
+                            IWARNI=3,),
+               GESTION_CALCUL=_F(NTMABS=1000,
+                                 ISUITE=0,
+                                 NTPABS=100,
+                                 TTPABS=10.5,),
+               MARCHE_TEMPS=_F(DTREF=0.001,
+                               IDTVAR=2,),
+               FICHIERS_CALCUL=_F(FICHIER_STOP=_F(FICSTP='ficstop',
+                                                  IMPSTP=82,),
+                                  SUITE_AVAL=_F(FICAVA='sui_amo',
+                                                IMPAVA=70,
+                                                IFOAVA=1,),),
+               POST_PROC_ENSIGHT=_F(IFOENS=1,
+                                    NTCHR=3,
+                                    ITCHR=10,),);
+
diff --git a/Saturne/essai_saturne4.py b/Saturne/essai_saturne4.py
new file mode 100755 (executable)
index 0000000..5c35bf0
--- /dev/null
@@ -0,0 +1,9 @@
+
+sansnom=DEFI_SONDE(Z=None,
+                   X=None,
+                   Y=None,);
+sansnom=DEFI_DTURB(RESTITUE=_F(NOMVAR=None,),
+                   MODELE=_F(VALREF=None,
+                             VISLS0=None,),
+                   NUMERIC=_F(ICONV=1,
+                              BLENCV=0,),);
\ No newline at end of file
diff --git a/Saturne/prefs.py b/Saturne/prefs.py
new file mode 100644 (file)
index 0000000..ed24d3c
--- /dev/null
@@ -0,0 +1,22 @@
+import os
+
+# REPINI sert à localiser le fichier editeur.ini
+# Obligatoire
+REPINI=os.path.dirname(os.path.abspath(__file__))
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+# Obligatoire
+INSTALLDIR=os.path.join(REPINI,'..')
+
+# CODE_PATH sert à localiser Noyau et Validation éventuellement
+# non contenus dans la distribution EFICAS
+# Par défaut on utilise les modules de INSTALLDIR
+# Peut valoir None (defaut)
+CODE_PATH = None
+#CODE_PATH = os.path.join(REPINI,'../../Superv')
+
+# ICONDIR sert à localiser le répertoire contenant les icones
+# Par défaut on utilise le répertoire icons dans Editeur
+ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
+
+
diff --git a/Tools/__init__.py b/Tools/__init__.py
new file mode 100644 (file)
index 0000000..0366cee
--- /dev/null
@@ -0,0 +1,8 @@
+#@ MODIF __init__ Tools DATE 15/02/2001    AUTEUR YESSAYAN A.YESSAYAN
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+__all__=['foztools']
diff --git a/Tools/foztools/__init__.py b/Tools/foztools/__init__.py
new file mode 100755 (executable)
index 0000000..6171ba6
--- /dev/null
@@ -0,0 +1 @@
+__all__=['foztools']
diff --git a/Tools/foztools/foztools.py b/Tools/foztools/foztools.py
new file mode 100755 (executable)
index 0000000..227f9f8
--- /dev/null
@@ -0,0 +1,150 @@
+# $Header: /home/eficas/CVSROOT/EficasV1/Tools/foztools/foztools.py,v 1.1.1.1 2001/12/04 15:38:23 eficas Exp $
+
+###########################################################################
+# This is a set of Python widgets, built on top of pythonTk.  They are
+# designed to be highly customizable, flexible, and useful.  They are
+# also all built from the base PythonTk widgets so no other external
+# libraries are needed.
+#
+# Use it in good health.  It's hereby released under the GPL, if you
+#  have questions about the GPL contact the Free Software Foundation.
+#
+# Author: Gary D. Foster <Gary.Foster@corp.sun.com>
+#  with some ideas stolen from Mitch Chapman's stuff.
+#
+###########################################################################
+
+__version__ = "$Revision: 1.1.1.1 $"
+
+import Tkinter
+Tk=Tkinter
+
+class Slider:
+    def __init__(self, master=None, orientation="horizontal", min=0, max=100,
+                width=100, height=25, autoLabel="true", appearance="sunken",
+                fillColor="blue", background="black", labelColor="yellow",
+                labelText="", labelFormat="%d%%", value=50, bd=2):
+       # preserve various values
+       self.master=master
+       self.orientation=orientation
+       self.min=min
+       self.max=max
+       self.width=width
+       self.height=height
+       self.autoLabel=autoLabel
+       self.fillColor=fillColor
+       self.labelColor=labelColor
+       self.background=background
+       self.labelText=labelText
+       self.labelFormat=labelFormat
+       self.value=value
+       self.frame=Tk.Frame(master, relief=appearance, bd=bd)
+       self.canvas=Tk.Canvas(self.frame, height=height, width=width, bd=0,
+                             highlightthickness=0, background=background)
+       self.scale=self.canvas.create_rectangle(0, 0, width, height,
+                                               fill=fillColor)
+       self.label=self.canvas.create_text(self.canvas.winfo_reqwidth() / 2,
+                                          height / 2, text=labelText,
+                                          anchor="c", fill=labelColor)
+       self.update()
+       self.canvas.pack(side='top', fill='x', expand='no')
+
+    def update(self):
+       # Trim the values to be between min and max
+       value=self.value
+       if value > self.max:
+           value = self.max
+       if value < self.min:
+           value = self.min
+       # Preserve the new value
+       c=self.canvas
+       # Adjust the rectangle
+       if self.orientation == "horizontal":
+           c.coords(self.scale,
+                    0, 0,
+                    float(value) / self.max * self.width, self.height)
+       else:
+           c.coords(self.scale,
+                    0, self.height - (float(value) / self.max*self.height),
+                    self.width, self.height)
+       # Now update the colors
+       c.itemconfig(self.scale, fill=self.fillColor)
+       c.itemconfig(self.label, fill=self.labelColor)
+       # And update the label
+       if self.autoLabel=="true":
+           c.itemconfig(self.label, text=self.labelFormat % value)
+       else:
+           c.itemconfig(self.label, text=self.labelFormat % self.labelText)
+       c.update_idletasks()
+
+class Indicator:
+    def __init__(self, master=None, width=25, height=25, appearance="sunken",
+                onColor="green", offColor="black", onLabelColor="black",
+                offLabelColor="green", onLabelText="", offLabelText="",
+                on=1, bd=2):
+       # preserve various values
+       self.master=master
+       self.onColor=onColor
+       self.offColor=offColor
+       self.onLabelColor=onLabelColor
+       self.offLabelColor=offLabelColor
+       self.onLabelText=onLabelText
+       self.offLabelText=offLabelText
+       self.on=on
+       self.frame=Tk.Frame(master, relief=appearance, bd=bd)
+       self.canvas=Tk.Canvas(self.frame, height=height, width=width, bd=0,
+                             highlightthickness=0)
+       self.light=self.canvas.create_rectangle(0, 0, width, height,
+                                               fill=onLabelColor)
+       self.label=self.canvas.create_text(self.canvas.winfo_reqwidth() / 2,
+                                          height / 2, text=onLabelText,
+                                          anchor="c", fill=onLabelColor)
+       self.update()
+       self.canvas.pack(side="top", fill='x', expand='no')
+
+    def update(self):
+       c=self.canvas
+       # now update the status
+       if self.on:
+           c.itemconfig(self.light, fill=self.onColor)
+           c.itemconfig(self.label, fill=self.onLabelColor)
+           c.itemconfig(self.label, text=self.onLabelText)
+       else:
+           c.itemconfig(self.light, fill=self.offColor)
+           c.itemconfig(self.label, fill=self.offLabelColor)
+            c.itemconfig(self.label, text=self.offLabelText)
+       c.update_idletasks()
+
+    def toggle(self):
+       self.on=not self.on
+       self.update()
+
+    def turnon(self):
+       self.on=1
+       self.update()
+
+    def turnoff(self):
+       self.on=0
+       self.update()
+
+class Blinker(Indicator):
+    def __init__(self, master=None, blinkrate=1, enabled=1, width=25,
+                height=25, appearance="sunken", onColor="green",
+                offColor="black", onLabelColor="black", offLabelColor="green",
+                onLabelText="", offLabelText="", on=1, bd=2):
+       self.blinkrate=blinkrate
+       self.enabled=enabled
+       Indicator.__init__(self, master, width=width, height=height,
+                            appearance=appearance, onColor=onColor,
+                            offColor=offColor, onLabelColor=onLabelColor,
+                            offLabelColor=offLabelColor,
+                            onLabelText=onLabelText,
+                            offLabelText=offLabelText, on=on, bd=bd)
+
+    def update(self):
+       if self.enabled:
+           self.on=not self.on
+        Indicator.update(self)
+       self.frame.after(self.blinkrate * 1000, self.update)
+
+    
diff --git a/Tools/foztools/slider.py b/Tools/foztools/slider.py
new file mode 100755 (executable)
index 0000000..2fa1a83
--- /dev/null
@@ -0,0 +1,56 @@
+#!/usr/local/bin/python
+import Tkinter
+from foztools import Slider
+
+Tk=Tkinter
+
+def main():
+    class Test:
+       def __init__(self):
+           win = Tk.Frame()
+           win.master.title("Slider Demo")
+           self.progress1=Slider(win, fillColor="red", labelColor="yellow",
+                                 value=0, width=200, height=15,
+                                 appearance="sunken", autoLabel="false",
+                                 labelFormat="%s",
+                                 labelText="Gary.Foster@corp.sun.com",
+                                 orientation="horizontal", bd=3)
+           self.progress2=Slider(win, fillColor="blue", labelColor="black",
+                                 background="white", value=250, width=50,
+                                 height=200, appearance="raised", max=250,
+                                 labelFormat="%d", orientation="vertical", bd=4)
+           self.progress1.frame.pack()
+           self.progress2.frame.pack()
+           win.pack()
+           self.progress1.frame.after(1000, self.update)
+           self.increment1=1
+           self.increment2=-1
+
+       def update(self, event=None):
+           bar1=self.progress1
+           bar2=self.progress2
+
+           bar1.value=bar1.value+self.increment1
+           if bar1.value > bar1.max:
+               self.increment1=-1
+               bar1.fillColor="green"
+               bar1.labelColor="red"
+           if bar1.value < bar1.min:
+               self.increment1=1
+               bar1.fillColor="red"
+               bar1.labelColor="yellow"
+           bar1.update()
+           bar1.frame.after(100, self.update)
+
+           bar2.value=bar2.value+self.increment2
+           if bar2.value > bar2.max:
+               self.increment2=-1
+           if bar2.value < bar2.min:
+               self.increment2=1
+           bar2.update()
+
+    t = Test()
+    Tk.mainloop()
+
+if __name__=="__main__":
+    main()
diff --git a/Validation/V_AU_MOINS_UN.py b/Validation/V_AU_MOINS_UN.py
new file mode 100644 (file)
index 0000000..fb40419
--- /dev/null
@@ -0,0 +1,29 @@
+
+class AU_MOINS_UN:
+   """
+      La règle AU_MOINS_UN vérifie que l'on trouve au moins un des mots-clés
+      de la règle parmi les arguments d'un OBJECT.
+
+      Ces arguments sont transmis à la règle pour validation sous la forme 
+      d'une liste de noms de mots-clés ou d'un dictionnaire dont 
+      les clés sont des noms de mots-clés.
+   """
+   def verif(self,args):
+      """
+          La méthode verif vérifie que l'on trouve au moins un des mos-clés
+          de la liste self.mcs parmi les éléments de args
+
+          args peut etre un dictionnaire ou une liste. Les éléments de args
+          sont soit les éléments de la liste soit les clés du dictionnaire.
+      """
+      #  on compte le nombre de mots cles presents
+      text =''
+      count=0
+      args = self.liste_to_dico(args)
+      for mc in self.mcs:
+        if args.has_key(mc):count=count+1
+      if count == 0:
+          text =  "- Il faut au moins un mot-clé parmi : "+`self.mcs`+'\n'
+          return text,0
+      return text,1
+
diff --git a/Validation/V_A_CLASSER.py b/Validation/V_A_CLASSER.py
new file mode 100644 (file)
index 0000000..6c7439a
--- /dev/null
@@ -0,0 +1,94 @@
+
+import types
+
+class A_CLASSER:
+   """
+      La règle A_CLASSER vérifie que ...
+
+   """
+   def __init__(self,*args):
+      if len(args) > 2 :
+        print "Erreur à la création de la règle A_CLASSER(",args,")"
+        return
+      self.args=args
+      if type(args[0]) == types.TupleType:
+        self.args0 = args[0]
+      elif type(args[0]) == types.StringType:
+        self.args0 = (args[0],)
+      else :
+        print "Le premier argument de :",args," doit être un tuple ou une string"
+      if type(args[1]) == types.TupleType:
+        self.args1 = args[1]
+      elif type(args[1]) == types.StringType:
+        self.args1 = (args[1],)
+      else :
+        print "Le deuxième argument de :",args," doit être un tuple ou une string"
+      # création de la liste des mcs
+      liste = []
+      for arg0 in self.args0:
+        liste.append(arg0)
+      for arg1 in self.args1:
+        liste.append(arg1)
+      self.mcs = liste
+      self.init_couples_permis()
+
+   def init_couples_permis(self):
+      """ Crée la liste des couples permis parmi les self.args, càd pour chaque élément
+          de self.args0 crée tous les couples possibles avec un élément de self.args1"""
+      liste = []
+      for arg0 in self.args0:
+        for arg1 in self.args1:
+          liste.append((arg0,arg1))
+      self.liste_couples = liste
+
+   def verif(self,args):
+      """
+
+          args peut etre un dictionnaire ou une liste. Les éléments de args
+          sont soit les éléments de la liste soit les clés du dictionnaire.
+      """
+      # création de la liste des couples présents dans le fichier de commandes
+      l_couples = []
+      couple = []
+      text = ''
+      test = 1
+      for nom in args:
+        if nom in self.mcs :
+          couple.append(nom)
+          if len(couple) == 2 :
+            l_couples.append(tuple(couple))
+            couple=[]
+            if nom not in self.args1:
+              couple.append(nom)
+      if len(couple) > 0 :
+        l_couples.append(tuple(couple))
+      # l_couples peut être vide si l'on n'a pas réussi à trouver au moins un
+      # élément de self.mcs
+      if len(l_couples) == 0 :
+        message = "- Il faut qu'au moins un objet de la liste : "+`self.args0`+\
+                  " soit suivi d'au moins un objet de la liste : "+`self.args1`
+        return message,0
+      # A ce stade, on a trouvé des couples : il faut vérifier qu'ils sont
+      # tous licites
+      num = 0
+      for couple in l_couples :
+        num = num+1
+        if len(couple) == 1 :
+          # on a un 'faux' couple
+          if couple[0] not in self.args1:
+            text = text+"- L'objet : "+couple[0]+" doit être suivi d'un objet de la liste : "+\
+                   `self.args1`+'\n'
+            test = 0
+          else :
+            if num > 1 :
+              # ce n'est pas le seul couple --> licite
+              break
+            else :
+              text = text+"- L'objet : "+couple[0]+" doit être précédé d'un objet de la liste : "+\
+                   `self.args0`+'\n'
+              test = 0
+        elif couple not in self.liste_couples :
+          text = text+"- L'objet : "+couple[0]+" ne peut être suivi de : "+couple[1]+'\n'
+          test = 0
+      return text,test
+
diff --git a/Validation/V_ENSEMBLE.py b/Validation/V_ENSEMBLE.py
new file mode 100644 (file)
index 0000000..d672232
--- /dev/null
@@ -0,0 +1,36 @@
+
+class ENSEMBLE:
+   """
+      La règle vérifie que si un mot-clé de self.mcs est present 
+          parmi les elements de args tous les autres doivent etre presents.
+
+      Ces arguments sont transmis à la règle pour validation sous la forme 
+      d'une liste de noms de mots-clés ou d'un dictionnaire dont 
+      les clés sont des noms de mots-clés.
+   """
+   def verif(self,args):
+      """
+          La methode verif effectue la verification specifique à la règle.
+          args peut etre un dictionnaire ou une liste. Les éléments de args
+          sont soit les éléments de la liste soit les clés du dictionnaire.
+      """
+      #  on compte le nombre de mots cles presents, il doit etre egal a la liste
+      #  figurant dans la regle
+      text = ''
+      test = 1
+      args = self.liste_to_dico(args)
+      pivot = None
+      for mc in self.mcs:
+        if args.has_key(mc):
+          pivot = mc
+          break
+      if pivot :
+        for mc in self.mcs:
+          if mc != pivot :
+            if not args.has_key(mc):
+              text = text + "- "+ pivot + " étant présent, "+mc+" doit être présent"+'\n'
+              test = 0
+      return text,test
+
+
+
diff --git a/Validation/V_ETAPE.py b/Validation/V_ETAPE.py
new file mode 100644 (file)
index 0000000..1152f81
--- /dev/null
@@ -0,0 +1,166 @@
+"""
+   Ce module contient la classe mixin ETAPE qui porte les méthodes
+   nécessaires pour réaliser la validation d'un objet de type ETAPE
+   dérivé de OBJECT.
+
+   Une classe mixin porte principalement des traitements et est
+   utilisée par héritage multiple pour composer les traitements.
+"""
+# Modules Python
+import string,types
+import traceback
+
+# Modules EFICAS
+import V_MCCOMPO
+from Noyau.N_Exception import AsException
+from Noyau.N_utils import AsType
+
+class ETAPE(V_MCCOMPO.MCCOMPO):
+   """
+   """
+
+   def isvalid(self,sd='oui',cr='non'):
+      """ 
+         Methode pour verifier la validité de l'objet ETAPE. Cette méthode
+         peut etre appelée selon plusieurs modes en fonction de la valeur
+         de sd et de cr.
+
+         Si cr vaut oui elle crée en plus un compte-rendu.
+
+         Cette méthode a plusieurs fonctions :
+
+          - mettre à jour l'état de self (update)
+
+          - retourner un indicateur de validité 0=non, 1=oui
+
+          - produire un compte-rendu : self.cr
+
+      """
+      if CONTEXT.debug : print "ETAPE.isvalid ",self.nom
+      if self.state == 'unchanged' :
+        return self.valid
+      else:
+        valid = 1
+        if hasattr(self,'valid'):
+          old_valid = self.valid
+        else:
+          old_valid = None
+        # on teste si demandé la structure de donnée (par défaut)
+        if sd == 'oui':
+          if self.sd != None :pass
+            # Ce test parait superflu. Il est sur que si sd existe il s'agit du concept produit
+            # Quelle pourrait etre la raison qui ferait que sd n existe pas ???
+            #if self.jdc.get_sdprod(self.sd.nom) == None :
+            #  if cr == 'oui' :
+            #    self.cr.fatal('Le concept '+self.sd.nom+" n'existe pas")
+            #  valid = 0
+          else :
+            if cr == 'oui' : self.cr.fatal("Concept retourné non défini")
+            valid = 0
+        # on teste, si elle existe, le nom de la sd (sa longueur doit être <= 8 caractères)
+        if self.sd != None :
+          # la SD existe déjà : on regarde son nom
+          if self.sd.nom != None :
+            if len(self.sd.nom) > 8 and self.jdc.definition.code == 'ASTER' :
+              if cr == 'oui' :
+                self.cr.fatal("Le nom de concept %s est trop long (8 caractères maxi)" %self.sd.nom)
+              valid = 0
+            if string.find(self.sd.nom,'sansnom') != -1 :
+              # la SD est 'sansnom' : --> erreur
+              if cr == 'oui' :
+                self.cr.fatal("Pas de nom pour le concept retourné")
+              valid = 0
+            elif string.find(self.sd.nom,'SD_') != -1 :
+              # la SD est 'SD_' cad son nom = son id donc pas de nom donné par utilisateur : --> erreur
+              if cr == 'oui' :
+                self.cr.fatal("Pas de nom pour le concept retourné")
+              valid = 0
+        # on teste les enfants
+        for child in self.mc_liste :
+          if not child.isvalid():
+            valid = 0
+            break
+        # on teste les règles de self
+        text_erreurs,test_regles = self.verif_regles()
+        if not test_regles :
+          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
+          valid = 0
+        if self.reste_val != {}:
+          if cr == 'oui' :
+            self.cr.fatal("Mots cles inconnus :" + string.join(self.reste_val.keys(),','))
+          valid=0
+        if sd == 'oui' and valid:
+          valid = self.update_sdprod(cr)
+        self.valid = valid
+        self.state = 'unchanged'
+        if old_valid:
+          if old_valid != self.valid : self.init_modif_up()
+        return self.valid
+
+   def update_sdprod(self,cr='non'):
+      """ 
+           Cette méthode met à jour le concept produit en fonction des conditions initiales :
+
+            1- Il n'y a pas de concept retourné (self.definition.sd_prod == None)
+
+            2- Le concept retourné n existait pas (self.sd == None)
+
+            3- Le concept retourné existait. On change alors son type ou on le supprime
+
+           En cas d'erreur (exception) on retourne un indicateur de validité de 0 sinon de 1
+      """
+      sd_prod=self.definition.sd_prod
+      if type(sd_prod) == types.FunctionType: # Type de concept retourné calculé
+        d=self.cree_dict_valeurs(self.mc_liste)
+        try:
+          sd_prod= apply(sd_prod,(),d)
+        except:
+          # Erreur pendant le calcul du type retourné
+          if CONTEXT.debug:traceback.print_exc()
+          self.sd=None
+          if cr == 'oui' : self.cr.fatal('Impossible d affecter un type au résultat')
+          return 0
+      # on teste maintenant si la SD est r\351utilis\351e ou s'il faut la cr\351er
+      if self.reuse:
+        if AsType(self.reuse) != sd_prod:
+          if cr == 'oui' : self.cr.fatal('Type de concept reutilise incompatible avec type produit')
+          return 0
+        self.sd=self.reuse
+        return 1
+      else:
+        if sd_prod == None:# Pas de concept retourné
+          # Que faut il faire de l eventuel ancien sd ?
+          self.sd = None
+        else:
+          if self.sd: 
+             # Un sd existe deja, on change son type
+             self.sd.__class__=sd_prod
+          else: 
+             # Le sd n existait pas , on ne le crée pas
+             if cr == 'oui' : self.cr.fatal("Concept retourné non défini")
+             return 0
+        if self.definition.reentrant == 'o':
+          self.reuse = self.sd
+        return 1
+
+
+   def report(self):
+      """ 
+          Methode pour generation d un rapport de validite
+      """
+      self.cr=self.CR(debut='Etape : '+self.nom \
+                + '    ligne : '+`self.appel[0]`\
+                + '    fichier : '+`self.appel[1]`,
+                 fin = 'Fin Etape : '+self.nom)
+      self.state = 'modified'
+      try:
+        self.isvalid(cr='oui')
+      except AsException,e:
+        if CONTEXT.debug : traceback.print_exc()
+        self.cr.fatal(string.join(('Etape :',self.nom,
+                              'ligne :',`self.appel[0]`,
+                              'fichier :',`self.appel[1]`,str(e))))
+      for child in self.mc_liste:
+        self.cr.add(child.report())
+      return self.cr
+
diff --git a/Validation/V_EXCLUS.py b/Validation/V_EXCLUS.py
new file mode 100644 (file)
index 0000000..fa72016
--- /dev/null
@@ -0,0 +1,28 @@
+
+class EXCLUS:
+   """
+      La règle vérifie qu'un seul mot-clé de self.mcs est present 
+          parmi les elements de args.
+
+      Ces arguments sont transmis à la règle pour validation sous la forme 
+      d'une liste de noms de mots-clés ou d'un dictionnaire dont 
+      les clés sont des noms de mots-clés.
+   """
+   def verif(self,args):
+      """
+          La methode verif effectue la verification specifique à la règle.
+          args peut etre un dictionnaire ou une liste. Les éléments de args
+          sont soit les éléments de la liste soit les clés du dictionnaire.
+      """
+      #  on compte le nombre de mots cles presents
+      text =''
+      count=0
+      args = self.liste_to_dico(args)
+      for mc in self.mcs:
+        if args.has_key(mc):count=count+1
+      if count > 1:
+          text= "- Il ne faut qu un mot cle parmi : "+`self.mcs`+'\n'
+          return text,0
+      return text,1
+
+
diff --git a/Validation/V_JDC.py b/Validation/V_JDC.py
new file mode 100644 (file)
index 0000000..1f4edea
--- /dev/null
@@ -0,0 +1,79 @@
+"""
+   Ce module contient la classe mixin JDC qui porte les méthodes
+   nécessaires pour réaliser la validation d'un objet de type JDC
+   dérivé de OBJECT.
+
+   Une classe mixin porte principalement des traitements et est
+   utilisée par héritage multiple pour composer les traitements.
+"""
+# Modules Python
+import string,types
+
+# Modules EFICAS
+import V_MCCOMPO
+from Noyau.N_Exception import AsException
+from Noyau.N_utils import AsType
+
+class JDC(V_MCCOMPO.MCCOMPO):
+   """
+   """
+
+   def report(self):
+      """ 
+          Methode pour generation d un rapport de validite
+      """
+      self.cr.purge()
+      self.cr.debut="DEBUT CR validation : "+self.nom
+      self.cr.fin="FIN CR validation :"+self.nom
+      self.state = 'modified'
+      self.isvalid(cr='oui')
+      for e in self.etapes :
+        if e.isactif():
+          self.cr.add(e.report())
+      return self.cr
+
+   def isvalid(self,cr='non'):
+      """
+        Méthode booléenne qui retourne 0 si le JDC est invalide, 1 sinon
+      """
+      # FR : on prend en compte l'état du JDC ('unchanged','modified','undetermined')
+      # afin d'accélérer le test de validité du JDC 
+      if self.state == 'unchanged':
+        return self.valid
+      else:
+        valid = 1
+        texte,test = self.verif_regles()
+        if test == 0:
+          if cr == 'oui': self.cr.fatal(string.strip(texte))
+          valid = 0
+        if valid :
+          for e in self.etapes:
+            if not e.isactif() : continue
+            if not e.isvalid():
+              valid = 0
+              break
+        self.valid = valid
+        return self.valid
+
+   def verif_regles(self):
+      """ 
+         Effectue la vérification de validité des règles du jeu de commandes 
+      """
+      l_noms_etapes=self.get_l_noms_etapes()
+      texte_global = ''
+      test_global = 1
+      for regle in self.regles :
+        texte,test = regle.verif(l_noms_etapes)
+        texte_global = texte_global + texte
+        test_global = test_global*test
+      return texte_global,test_global
+
+   def get_l_noms_etapes(self):
+      """ 
+          Retourne la liste des noms des étapes de self 
+      """
+      l=[]
+      for etape in self.etapes:
+        l.append(etape.nom)
+      return l
+
diff --git a/Validation/V_MACRO_ETAPE.py b/Validation/V_MACRO_ETAPE.py
new file mode 100644 (file)
index 0000000..b0531a1
--- /dev/null
@@ -0,0 +1,158 @@
+"""
+   Ce module contient la classe mixin MACRO_ETAPE qui porte les méthodes
+   nécessaires pour réaliser la validation d'un objet de type MACRO_ETAPE
+   dérivé de OBJECT.
+
+   Une classe mixin porte principalement des traitements et est
+   utilisée par héritage multiple pour composer les traitements.
+"""
+# Modules Python
+import string,types
+import traceback
+
+# Modules EFICAS
+import V_MCCOMPO
+import V_ETAPE
+from Noyau.N_Exception import AsException
+from Noyau.N_utils import AsType
+
+class MACRO_ETAPE(V_ETAPE.ETAPE):
+   """
+   """
+
+   def isvalid(self,sd='oui',cr='non'):
+      """ 
+         Methode pour verifier la validité de l'objet ETAPE. Cette méthode
+         peut etre appelée selon plusieurs modes en fonction de la valeur
+         de sd et de cr.
+
+         Si cr vaut oui elle crée en plus un compte-rendu.
+
+         Cette méthode a plusieurs fonctions :
+
+          - mettre à jour l'état de self (update)
+
+          - retourner un indicateur de validité 0=non, 1=oui
+
+          - produire un compte-rendu : self.cr
+
+      """
+      if CONTEXT.debug : print "ETAPE.isvalid ",self.nom
+      if self.state == 'unchanged' :
+        return self.valid
+      else:
+        valid = 1
+        if hasattr(self,'valid'):
+          old_valid = self.valid
+        else:
+          old_valid = None
+        # on teste, si elle existe, le nom de la sd (sa longueur doit être <= 8 caractères)
+        if self.sd != None :
+          # la SD existe déjà : on regarde son nom
+          if self.sd.get_name() != None :
+            if len(self.sd.nom) > 8 :
+              if cr == 'oui' :
+                self.cr.fatal("Le nom de concept %s est trop long (8 caractères maxi)" %self.sd.nom)
+              valid = 0
+          if string.find(self.sd.nom,'sansnom') != -1 :
+              # la SD est 'sansnom' : --> erreur
+              if cr == 'oui' :
+                self.cr.fatal("Pas de nom pour le concept retourné")
+              valid = 0
+          elif string.find(self.sd.nom,'SD_') != -1 :
+              # la SD est 'SD_' cad son nom = son id donc pas de nom donné par utilisateur : --> erreur
+              if cr == 'oui' :
+                self.cr.fatal("Pas de nom pour le concept retourné")
+              valid = 0
+        # on teste les enfants
+        for child in self.mc_liste :
+          if not child.isvalid():
+            valid = 0
+            break
+        # on teste les règles de self
+        text_erreurs,test_regles = self.verif_regles()
+        if not test_regles :
+          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
+          valid = 0
+        if self.reste_val != {}:
+          if cr == 'oui' :
+            self.cr.fatal("Mots cles inconnus :" + string.join(self.reste_val.keys(),','))
+          valid=0
+        if sd == 'oui' and valid:
+          valid = self.update_sdprod(cr)
+        # Si la macro comprend des etapes internes, on teste leur validite
+        for e in self.etapes:
+          if not e.isvalid():
+            valid=0
+            break
+        self.valid = valid
+        self.state = 'unchanged'
+        if old_valid:
+          if old_valid != self.valid : self.init_modif_up()
+        return self.valid
+
+   def update_sdprod(self,cr='non'):
+      """ 
+           Cette méthode met à jour le concept produit en fonction des conditions initiales :
+
+            1- Il n'y a pas de concept retourné (self.definition.sd_prod == None)
+
+            2- Le concept retourné n existait pas (self.sd == None)
+
+            3- Le concept retourné existait. On change alors son type ou on le supprime
+
+           En cas d'erreur (exception) on retourne un indicateur de validité de 0 sinon de 1
+      """
+      sd_prod=self.definition.sd_prod
+      # On memorise le type retourné dans l attribut typret
+      self.typret=None 
+      if type(sd_prod) == types.FunctionType: 
+        # Type de concept retourné calculé
+        d=self.cree_dict_valeurs(self.mc_liste)
+        try:
+          # la sd_prod d'une macro a l'objet lui meme en premier argument
+          # contrairement à une ETAPE ou PROC_ETAPE
+          # Comme sd_prod peut invoquer la méthode type_sdprod qui ajoute
+          # les concepts produits dans self.sdprods, il faut le mettre à zéro
+          self.sdprods=[]
+          sd_prod= apply(sd_prod,(self,),d)
+        except:
+          # Erreur pendant le calcul du type retourné
+          if CONTEXT.debug:traceback.print_exc()
+          self.sd=None
+          if cr == 'oui' : self.cr.fatal('Impossible d affecter un type au résultat')
+          return 0
+      # on teste maintenant si la SD est r\351utilis\351e ou s'il faut la cr\351er
+      if self.reuse:
+        if AsType(self.reuse) != sd_prod:
+          if cr == 'oui' : self.cr.fatal('Type de concept reutilise incompatible avec type produit')
+          return 0
+        self.sd=self.reuse
+        return 1
+      else:
+        if sd_prod == None:# Pas de concept retourné
+          # Que faut il faire de l eventuel ancien sd ?
+          self.sd = None
+        else:
+          if self.sd: 
+            # Un sd existe deja, on change son type
+            self.sd.__class__=sd_prod
+            self.typret=sd_prod
+          else: 
+            # Le sd n existait pas , on ne le crée pas
+            self.typret=sd_prod
+            if cr == 'oui' : self.cr.fatal("Concept retourné non défini")
+            return 0
+        if self.definition.reentrant == 'o':
+          self.reuse = self.sd
+        return 1
+
+   def report(self):
+      """ 
+          Methode pour la generation d un rapport de validation
+      """
+      V_ETAPE.ETAPE.report(self)
+      for e in self.etapes :
+        self.cr.add(e.report())
+      return self.cr
+
diff --git a/Validation/V_MCBLOC.py b/Validation/V_MCBLOC.py
new file mode 100644 (file)
index 0000000..09a6723
--- /dev/null
@@ -0,0 +1,56 @@
+"""
+   Ce module contient la classe mixin MCBLOC qui porte les méthodes
+   nécessaires pour réaliser la validation d'un objet de type MCBLOC
+   dérivé de OBJECT.
+
+   Une classe mixin porte principalement des traitements et est
+   utilisée par héritage multiple pour composer les traitements.
+"""
+# Modules Python
+import string
+
+# Modules EFICAS
+import V_MCCOMPO
+
+class MCBLOC(V_MCCOMPO.MCCOMPO):
+   """
+      Cette classe a un attribut de classe :
+
+      - txt_nat qui sert pour les comptes-rendus liés à cette classe
+   """
+
+   txt_nat="Bloc :"
+
+   def isvalid(self,sd='oui',cr='non'):
+      """ 
+         Methode pour verifier la validité du MCBLOC. Cette méthode
+         peut etre appelée selon plusieurs modes en fonction de la valeur
+         de sd et de cr.
+
+         Si cr vaut oui elle crée en plus un compte-rendu
+         sd est présent pour compatibilité de l'interface mais ne sert pas
+      """
+      if self.state == 'unchanged' :
+        return self.valid
+      else:
+        valid = 1
+        if hasattr(self,'valid'):
+          old_valid = self.valid
+        else:
+          old_valid = None
+        for child in self.mc_liste :
+          if not child.isvalid():
+            valid = 0
+            break
+        # Après avoir vérifié la validité de tous les sous-objets, on vérifie
+        # la validité des règles
+        text_erreurs,test_regles = self.verif_regles()
+        if not test_regles :
+          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
+          valid = 0
+        self.valid = valid
+        self.state = 'unchanged'
+        if old_valid:
+          if old_valid != self.valid : self.init_modif_up()
+        return self.valid
+
diff --git a/Validation/V_MCCOMPO.py b/Validation/V_MCCOMPO.py
new file mode 100644 (file)
index 0000000..4913e48
--- /dev/null
@@ -0,0 +1,99 @@
+"""
+   Ce module contient la classe  de base MCCOMPO qui sert à factoriser
+   les traitements des objets composites de type OBJECT
+"""
+# Modules Python
+import string,types
+import traceback
+
+# Modules EFICAS
+from Noyau import N_CR
+from Noyau.N_Exception import AsException
+
+class MCCOMPO:
+   """
+       L'attribut mc_liste a été créé par une classe dérivée de la 
+       classe MCCOMPO du Noyau
+   """
+
+   CR=N_CR.CR
+
+   def __init__(self):
+      self.state='undetermined'
+
+   def init_modif_up(self):
+      """
+         Propage l'état modifié au parent s'il existe et n'est pas l'objet
+         lui-meme
+      """
+      if self.parent and self.parent != self :
+        self.parent.state = 'modified'
+
+   def report(self):
+      """ 
+          Génère le rapport de validation de self 
+      """
+      self.cr=self.CR()
+      self.cr.debut = self.txt_nat+self.nom
+      self.cr.fin = "Fin "+self.txt_nat+self.nom
+      self.state = 'modified'
+      try:
+        self.isvalid(cr='oui')
+      except AsException,e:
+        if CONTEXT.debug : traceback.print_exc()
+        self.cr.fatal(string.join((self.txt_nat,self.nom,str(e))))
+      for child in self.mc_liste:
+        self.cr.add(child.report())
+      return self.cr
+
+   def verif_regles(self):
+      """ 
+         A partir du dictionnaire des mots-clés présents, vérifie si les règles 
+         de self sont valides ou non.
+
+         Retourne une string et un booléen :
+
+           - texte = la string contient le message d'erreur de la (les) règle(s) violée(s) ('' si aucune)
+
+           - testglob = booléen 1 si toutes les règles OK, 0 sinon 
+      """
+      dictionnaire=self.dict_mc_presents(restreint='oui')
+      texte=''
+      testglob = 1
+      for r in self.definition.regles:
+        erreurs,test=r.verif(dictionnaire)
+        testglob = testglob*test
+        if erreurs != '':
+          if len(texte) > 1 :
+            texte=texte+'\n'+erreurs
+          else :
+            texte = texte + erreurs
+      return texte,testglob
+
+   def dict_mc_presents(self,restreint='non'):
+      """ 
+          Retourne le dictionnaire {mocle : objet} construit à partir de self.mc_liste
+          Si restreint == 'non' : on ajoute tous les mots-clés simples du catalogue qui ont
+          une valeur par défaut
+          Si restreint == 'oui' : on ne prend que les mots-clés effectivement entrés par
+          l'utilisateur (cas de la vérification des règles)
+      """
+      dico={}
+      # on ajoute les couples {nom mot-clé:objet mot-clé} effectivement présents
+      for v in self.mc_liste:
+        if v == None : continue
+        k=v.nom
+        dico[k]=v
+      if restreint == 'oui' : return dico
+      # Si restreint != 'oui',
+      # on ajoute les couples {nom mot-clé:objet mot-clé} des mots-clés simples
+      # possibles pour peu qu'ils aient une valeur par défaut
+      for k,v in self.definition.entites.items():
+        if v.label != 'SIMP' : continue
+        if not v.defaut : continue
+        if not dico.has_key(k):
+          dico[k]=v(nom=k,val=None,parent=self)
+      return dico
+
+
+
diff --git a/Validation/V_MCFACT.py b/Validation/V_MCFACT.py
new file mode 100644 (file)
index 0000000..858e53f
--- /dev/null
@@ -0,0 +1,60 @@
+"""
+   Ce module contient la classe mixin MCFACT qui porte les méthodes
+   nécessaires pour réaliser la validation d'un objet de type MCFACT
+   dérivé de OBJECT.
+
+   Une classe mixin porte principalement des traitements et est
+   utilisée par héritage multiple pour composer les traitements.
+"""
+# Modules Python
+import string
+
+# Modules EFICAS
+import V_MCCOMPO
+
+class MCFACT(V_MCCOMPO.MCCOMPO):
+   """
+      Cette classe a un attribut de classe :
+
+      - txt_nat qui sert pour les comptes-rendus liés à cette classe
+   """
+
+   txt_nat="Mot cle Facteur :"
+
+   def isvalid(self,sd='oui',cr='non'):
+      """ 
+         Methode pour verifier la validité du MCFACT. Cette méthode
+         peut etre appelée selon plusieurs modes en fonction de la valeur
+         de sd et de cr.
+
+         Si cr vaut oui elle crée en plus un compte-rendu
+         sd est présent pour compatibilité de l'interface mais ne sert pas
+      """
+      if self.state == 'unchanged' :
+        return self.valid
+      else:
+        valid = 1
+        if hasattr(self,'valid'):
+          old_valid = self.valid
+        else:
+          old_valid = None
+        for child in self.mc_liste :
+          if not child.isvalid():
+            valid = 0
+            break
+        # Après avoir vérifié la validité de tous les sous-objets, on vérifie
+        # la validité des règles
+        text_erreurs,test_regles = self.verif_regles()
+        if not test_regles :
+          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
+          valid = 0
+        if self.reste_val != {}:
+          if cr == 'oui' :
+            self.cr.fatal("Mots cles inconnus :" + string.join(self.reste_val.keys(),','))
+          valid=0
+        self.valid = valid
+        self.state = 'unchanged'
+        if old_valid:
+          if old_valid != self.valid : self.init_modif_up()
+        return self.valid
+
diff --git a/Validation/V_MCLIST.py b/Validation/V_MCLIST.py
new file mode 100644 (file)
index 0000000..0dcc38f
--- /dev/null
@@ -0,0 +1,67 @@
+"""
+   Ce module contient la classe mixin MCList qui porte les méthodes
+   nécessaires pour réaliser la validation d'un objet de type MCList
+   dérivé de OBJECT.
+
+   Une classe mixin porte principalement des traitements et est
+   utilisée par héritage multiple pour composer les traitements.
+"""
+# Modules Python
+import string
+import traceback
+
+# Modules EFICAS
+from Noyau import N_CR
+from Noyau.N_Exception import AsException
+
+class MCList:
+   """
+      Cette classe a deux attributs de classe :
+
+      - CR qui sert à construire l'objet compte-rendu
+
+      - txt_nat qui sert pour les comptes-rendus liés à cette classe
+   """
+
+   CR=N_CR.CR
+   txt_nat="Mot cle Facteur Multiple :"
+
+   def isvalid(self,cr='non'):
+      """ 
+         Methode pour verifier la validité du MCList. Cette méthode
+         peut etre appelée selon plusieurs modes en fonction de la valeur
+         de cr.
+
+         Si cr vaut oui elle crée en plus un compte-rendu.
+
+         On n'utilise pas d'attribut pour stocker l'état et on ne remonte pas 
+         le changement d'état au parent (pourquoi ??)
+      """
+      if len(self.data) == 0 : return 0
+      num = 0
+      test = 1
+      for i in self.data:
+        num = num+1
+        if not i.isvalid():
+          if cr=='oui':
+            self.cr.fatal(string.join(["L'occurrence n°",`num`," du mot-clé facteur :",self.nom," n'est pas valide"]))
+          test = 0
+      return test
+
+   def report(self):
+      """ 
+          Génère le rapport de validation de self 
+      """
+      self.cr=self.CR( debut = "Mot-clé facteur multiple : "+self.nom,
+                  fin = "Fin Mot-clé facteur multiple : "+self.nom)
+      # XXX j'ai mis l'état en commentaire car il n'est utilisé ensuite
+      #self.state = 'modified'
+      try :
+        self.isvalid(cr='oui')
+      except AsException,e:
+        if CONTEXT.debug : traceback.print_exc()
+        self.cr.fatal(string.join(["Mot-clé facteur multiple : ",self.nom,str(e)]))
+      for i in self.data:
+        self.cr.add(i.report())
+      return self.cr
+
diff --git a/Validation/V_MCSIMP.py b/Validation/V_MCSIMP.py
new file mode 100644 (file)
index 0000000..74af972
--- /dev/null
@@ -0,0 +1,406 @@
+"""
+   Ce module contient la classe mixin MCSIMP qui porte les méthodes
+   nécessaires pour réaliser la validation d'un objet de type MCSIMP
+   dérivé de OBJECT.
+
+   Une classe mixin porte principalement des traitements et est
+   utilisée par héritage multiple pour composer les traitements.
+"""
+# Modules Python
+import string,types
+import traceback
+
+# Modules EFICAS
+from Noyau import N_CR
+from Noyau.N_Exception import AsException
+
+class MCSIMP:
+   """
+      COMMENTAIRE CCAR
+        Cette classe est quasiment identique à la classe originale d'EFICAS
+        a part quelques changements cosmétiques et des chagements pour la
+        faire fonctionner de facon plus autonome par rapport à l'environnement
+        EFICAS
+        A mon avis, il faudrait aller plus loin et réduire les dépendances
+        amont au strict nécessaire.
+
+        - Est il indispensable de faire l'évaluation de la valeur dans le contexte
+          du jdc dans cette classe.
+
+        - Ne pourrait on pas doter les objets en présence des méthodes suffisantes
+          pour éviter les tests un peu particuliers sur GEOM, PARAMETRE et autres. J'ai
+          d'ailleurs modifié la classe pour éviter l'import de GEOM
+   """
+
+   CR=N_CR.CR
+   
+   def __init__(self):
+      self.state='undetermined'
+
+   def isvalid(self,cr='non'):
+      """
+         Cette méthode retourne un indicateur de validité de l'objet
+         de type MCSIMP 
+         
+         - 0 si l'objet est invalide
+         - 1 si l'objet est valide
+
+         Le pramètre cr permet de paramétrer le traitement. Si cr == 'oui'
+         la méthode construit également un comte-rendu de validation
+         dans self.cr qui doit avoir été créé préalablement.
+      """
+      if self.state == 'unchanged':
+        return self.valid
+      else:
+        valid = 1
+        if hasattr(self,'valid'):
+          old_valid = self.valid
+        else:
+          old_valid = None
+        v=self.valeur
+        #  presence
+        if self.isoblig() and v == None :
+          if cr == 'oui' :
+            self.cr.fatal(string.join(("Mot-clé : ",self.nom," obligatoire non valorisé")))
+          valid = 0
+        # type,into ...
+        valid = self.verif_type(cr=cr)*self.verif_into(cr=cr)*self.verif_card(cr=cr)
+        self.valid = valid
+        self.state = 'unchanged'
+        # Si la validité du mot clé a changé, on le signale à l'objet parent
+        if old_valid:
+          if old_valid != self.valid : self.init_modif_up()
+        return self.valid
+
+   def isoblig(self):
+      """ indique si le mot-clé est obligatoire
+      """
+      return self.definition.statut=='o'
+
+   def verif_card(self,cr='non'):
+      """ 
+         un mot-clé simple ne peut être répété :
+          la cardinalité ici s'entend par la vérification que le nombre d'arguments de self.valeur
+          est bien compris entre self.min et self.max dans le cas où il s'agit d'une liste
+      """
+      card = 1
+      min=self.definition.min
+      max=self.definition.max
+      if type(self.valeur) in (types.ListType,types.TupleType) and 'C' not in self.definition.type :
+       if len(self.valeur) < min or len(self.valeur)>max:
+          if cr == 'oui':
+            self.cr.fatal("Nombre d'arguments %s incorrects pour %s (min = %s, max = %s)" %(`self.valeur`,self.nom,min,max))
+          card = 0
+      else:
+       if self.valeur == None :
+          if min >= 1 :
+            # on n'a pas d'objet et on en attend au moins un
+            card=0
+       else :
+          if min > 1:
+            # on n'a qu'un objet et on en attend plus d'1
+            card = 0
+      return card
+
+   def verif_type(self,val=None,cr='non'):
+      """
+        FONCTION :
+         Cette méthode a plusieurs modes de fonctionnement liés à la valeur de val et de cr.
+         Si cr ne vaut pas 'oui' : elle ne remplit pas le compte-rendu self.cr
+         Si val vaut None, elle vérifie le type de self.valeur
+         Si val ne vaut pas None, elle vérifie le type de val
+        PARAMETRE DE RETOUR :
+         Cette méthode retourne une valeur booléenne qui vaut 1 si le type est correct ou 0 sinon
+         
+      """
+      if val != None:
+       valeur = val
+      else:
+       valeur = self.valeur
+      if valeur == None :
+       if cr == 'oui':
+          self.cr.fatal("None n'est pas une valeur autorisée")
+       return 0
+      if type(valeur) == types.TupleType:
+       # on peut avoir à faire à un complexe ou une liste de valeurs ...
+       if self.is_complexe(valeur) : return 1
+       else:
+          for val in valeur:
+            if not self.verif_type(val=val,cr=cr) : return 0
+          return 1
+      elif type(valeur) == types.ListType:
+        for val in valeur:
+            if not self.verif_type(val=val,cr=cr) : return 0
+        return 1
+      else:
+       # on n'a pas de tuple ...il faut tester sur tous les types ou les valeurs possibles
+        # XXX Pourquoi into est il traité ici et pas seulement dans verif_into ???
+       if self.definition.into != None :
+          try:
+            if valeur in self.definition.into :
+              return 1
+            else:
+              if cr == 'oui':
+               self.cr.fatal("%s n'est pas une valeur autorisée" %valeur)
+              return 0
+          except:
+            print "problème avec :",self.nom
+            print 'valeur =',valeur
+            return 0
+       for type_permis in self.definition.type:
+          if self.compare_type(valeur,type_permis) : return 1
+       # si on sort de la boucle précédente par ici c'est que l'on n'a trouvé aucun type valable --> valeur refusée
+       if cr =='oui':
+          self.cr.fatal("%s n'est pas d'un type autorisé" %`valeur`)
+       return 0
+
+   def verif_into(self,cr='non'):
+      """
+      Vérifie si la valeur de self est bien dans l'ensemble discret de valeurs
+      donné dans le catalogue derrière l'attribut into ou vérifie que valeur est bien compris
+      entre val_min et val_max
+      """
+      if self.definition.into == None :
+       #on est dans le cas d'un ensemble continu de valeurs possibles (intervalle)
+       if type(self.valeur)==types.TupleType :
+          test = 1
+          for val in self.valeur :
+            if type(val)!=types.StringType and type(val)!=types.InstanceType:
+              test = test*self.isinintervalle(val,cr=cr)
+          return test
+       else :
+          val = self.valeur
+          if type(val)!=types.StringType and type(val)!=types.InstanceType:
+            return self.isinintervalle(self.valeur,cr=cr)
+          else :
+            return 1
+      else :
+       # on est dans le cas d'un ensemble discret de valeurs possibles (into)
+       if type(self.valeur) == types.TupleType :
+          for e in self.valeur:
+            if e not in self.definition.into:
+              if cr=='oui':
+               self.cr.fatal(string.join(("La valeur :",`e`," n'est pas permise pour le mot-clé :",self.nom)))
+              return 0
+       else:
+          if self.valeur == None or self.valeur not in self.definition.into:
+            if cr=='oui':
+              self.cr.fatal(string.join(("La valeur :",`self.valeur`," n'est pas permise pour le mot-clé :",self.nom)))
+            return 0
+       return 1
+
+   def is_complexe(self,valeur):
+      """ Retourne 1 si valeur est un complexe, 0 sinon """
+      if type(valeur) == types.StringType :
+       # on teste une valeur issue d'une entry (valeur saisie depuis EFICAS)
+        #XXX Il serait peut etre plus judicieux d'appeler une méthode de self.jdc
+        #XXX qui retournerait l'objet résultat de l'évaluation
+        #XXX ou meme de faire cette evaluation a l'exterieur de cette classe ??
+        if not self.jdc :return 0
+       try :
+          valeur = eval(valeur,self.jdc.g_context)
+       except:
+          return 0
+      if type(valeur) == types.InstanceType :
+        #XXX je n'y touche pas pour ne pas tout casser mais il serait
+        #XXX préférable d'appeler une méthode de valeur : return valeur.is_type('C'), par exemple
+       if valeur.__class__.__name__ in ('EVAL','complexe'):
+          return 1
+       elif valeur.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
+          # il faut tester si la valeur du parametre est un entier
+          #XXX ne serait ce pas plutot complexe ???? sinon expliquer
+          return self.is_entier(valeur.valeur)
+       else:
+          print "Objet non reconnu dans is_complexe %s" %`valeur`
+          return 0
+      elif type(valeur) != types.TupleType :
+       return 0
+      else:
+       if len(valeur) != 3 :
+          return 0
+       else:
+          if type(valeur[0]) != types.StringType : return 0
+          if string.strip(valeur[0]) not in ('RI','MP'):
+            return 0
+          else:
+            if not self.is_reel(valeur[1]) or not self.is_reel(valeur[2]) : return 0
+            else: return 1
+
+   def is_reel(self,valeur):
+      """
+      Retourne 1 si valeur est un reel, 0 sinon
+      """
+      if type(valeur) == types.StringType :
+       # on teste une valeur issue d'une entry (valeur saisie depuis EFICAS)
+        if not self.jdc :return 0
+       try :
+          valeur = eval(valeur,self.jdc.g_context)
+       except:
+          return 0
+      if type(valeur) == types.InstanceType :
+        #XXX je n'y touche pas pour ne pas tout casser mais il serait
+        #XXX préférable d'appeler une méthode de valeur : return valeur.is_type('R'), par exemple
+        #XXX ou valeur.is_reel()
+        #XXX ou encore valeur.compare(self.is_reel)
+       if valeur.__class__.__name__ in ('EVAL','reel') :
+          return 1
+       elif valeur.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
+          # il faut tester si la valeur du parametre est un réel
+          return self.is_reel(valeur.valeur)
+       else:
+          print "Objet non reconnu dans is_reel %s" %`valeur`
+          return 0
+      elif type(valeur) not in (types.IntType,types.FloatType,types.LongType):
+       # ce n'est pas un réel
+       return 0
+      else:
+       return 1
+
+   def is_entier(self,valeur):
+      """ Retourne 1 si valeur est un entier, 0 sinon """
+      if type(valeur) == types.StringType :
+       # on teste une valeur issue d'une entry (valeur saisie depuis EFICAS)
+        if not self.jdc :return 0
+       try :
+          valeur = eval(valeur,self.jdc.g_context)
+       except:
+          return 0
+      if type(valeur) == types.InstanceType :
+        #XXX je n'y touche pas pour ne pas tout casser mais il serait
+        #XXX préférable d'appeler une méthode de valeur : return valeur.is_type('I'), par exemple
+       if valeur.__class__.__name__ in ('EVAL','entier') :
+          return 1
+       elif valeur.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
+          # il faut tester si la valeur du parametre est un entier
+          return self.is_entier(valeur.valeur)
+       else:
+          print "Objet non reconnu dans is_reel %s" %`valeur`
+          return 0
+      elif type(valeur) not in (types.IntType,types.LongType):
+       # ce n'est pas un entier
+       return 0
+      else:
+       return 1
+       
+   def is_shell(self,valeur):
+      """ 
+          Retourne 1 si valeur est un shell, 0 sinon
+          Pour l'instant aucune vérification n'est faite
+          On impose juste que valeur soit une string
+      """
+      if type(valeur) != types.StringType:
+       return 0
+      else:
+       return 1
+
+   def is_object_from(self,objet,classe):
+      """ 
+           Retourne 1 si valeur est un objet de la classe classe ou d'une sous-classe de classe,
+           0 sinon 
+      """
+      if type(objet) != types.InstanceType :
+       if type(objet) == types.StringType:
+          if not self.jdc :return 0
+          try :
+            objet = eval(objet,self.jdc.g_context)
+            if type(objet) != types.InstanceType : return 0
+          except:
+            return 0
+       else:
+          return 0
+      if not objet.__class__ == classe and not issubclass(objet.__class__,classe):
+       return 0
+      else:
+       return 1
+
+   def compare_type(self,valeur,type_permis):
+      """
+          Fonction booléenne qui retourne 1 si valeur est du type type_permis, 0 sinon
+      """
+      if type(valeur) == types.InstanceType and valeur.__class__.__name__ == 'PARAMETRE':
+       if type(valeur.valeur) == types.TupleType :
+          # on a à faire à un PARAMETRE qui définit une liste d'items
+          # --> on teste sur la première car on n'accepte que les liste homogènes
+          valeur = valeur.valeur[0]
+      if type_permis == 'R':
+       return self.is_reel(valeur)
+      elif type_permis == 'I':
+       return self.is_entier(valeur)
+      elif type_permis == 'C':
+       return self.is_complexe(valeur)
+      elif type_permis == 'shell':
+       return self.is_shell(valeur)
+      elif type_permis == 'TXM':
+       if type(valeur) != types.InstanceType:
+          return type(valeur)==types.StringType
+       else:
+          #XXX je n'y touche pas pour ne pas tout casser mais il serait
+          #XXX préférable d'appeler une méthode de valeur : return valeur.is_type('TXM'), par exemple
+          if valeur.__class__.__name__ == 'chaine' :
+            return 1
+          elif valeur.__class__.__name__ == 'PARAMETRE':
+            # il faut tester si la valeur du parametre est une string
+            return type(valeur.valeur)==types.StringType
+          else:
+            return 0
+      elif type(type_permis) == types.ClassType:
+       # on ne teste pas certains objets de type GEOM , assd, ...
+        # On appelle la méthode de classe is_object de type_permis.
+        # Comme valeur peut etre de n'importe quel type on utilise la fonction (is_object.im_func)
+        # et non pas la methode (is_object) ce qui risquerait de provoquer des erreurs
+        if type_permis.is_object.im_func(valeur):
+          return 1
+       else :
+          return self.is_object_from(valeur,type_permis)
+      else:
+       print "Type non encore géré %s" %`type_permis`
+       print self.nom,self.parent.nom,self.jdc.fichier
+
+   def isinintervalle(self,valeur,cr='non'):
+      """
+      Booléenne qui retourne 1 si la valeur passée en argument est comprise dans
+      le domaine de définition donné dans le catalogue, 0 sinon.
+      """
+      if type(valeur) not in (types.IntType,types.FloatType,types.LongType) :
+       return 1
+      else :
+       min = self.definition.val_min
+       max = self.definition.val_max
+       if min == '**': min = valeur -1
+       if max == '**': max = valeur +1
+       if valeur < min or valeur > max :
+          if cr=='oui':
+            self.cr.fatal(string.join(("La valeur :",`valeur`," du mot-clé ",self.nom,\
+                                       " est en dehors du domaine de validité [",`min`,",",`max`,"]")))
+          return 0
+       else :
+          return 1
+
+   def init_modif_up(self):
+      """
+         Propage l'état modifié au parent s'il existe et n'est l'objet 
+        lui-meme
+      """
+      if self.parent and self.parent != self :
+       self.parent.state = 'modified'
+
+   def report(self):
+      """ génère le rapport de validation de self """
+      self.cr=self.CR()
+      self.cr.debut = "Mot-clé simple : "+self.nom
+      self.cr.fin = "Fin Mot-clé simple : "+self.nom
+      self.state = 'modified'
+      try:
+       self.isvalid(cr='oui')
+      except AsException,e:
+       if CONTEXT.debug : traceback.print_exc()
+       self.cr.fatal(string.join(("Mot-clé simple : ",self.nom,str(e))))
+      return self.cr
+
+
+
+
+
+
diff --git a/Validation/V_PRESENT_ABSENT.py b/Validation/V_PRESENT_ABSENT.py
new file mode 100644 (file)
index 0000000..b6f01ae
--- /dev/null
@@ -0,0 +1,32 @@
+
+class PRESENT_ABSENT: 
+   """
+      La règle vérifie que si le premier mot-clé de self.mcs est present 
+          parmi les elements de args les autres mots clés de self.mcs
+           doivent etre absents
+
+      Ces arguments sont transmis à la règle pour validation sous la forme 
+      d'une liste de noms de mots-clés ou d'un dictionnaire dont 
+      les clés sont des noms de mots-clés.
+   """
+   def verif(self,args):
+      """
+          La methode verif effectue la verification specifique à la règle.
+          args peut etre un dictionnaire ou une liste. Les éléments de args
+          sont soit les éléments de la liste soit les clés du dictionnaire.
+      """
+      #  on verifie que si le premier de la liste est present, 
+      #   les autres sont absents
+      text=''
+      test = 1
+      args = self.liste_to_dico(args)
+      mc0=self.mcs[0]
+      if args.has_key(mc0):
+        for mc in self.mcs[1:len(self.mcs)]:
+          if args.has_key(mc):
+            text = text + "- Le mot cle "+`mc0`+" etant present, il faut que : "+\
+                 mc+" soit absent"+'\n'
+            test = 0
+      return text,test
+
+
diff --git a/Validation/V_PRESENT_PRESENT.py b/Validation/V_PRESENT_PRESENT.py
new file mode 100644 (file)
index 0000000..2216e93
--- /dev/null
@@ -0,0 +1,29 @@
+
+class PRESENT_PRESENT:
+   """
+      La règle vérifie que si le premier mot-clé de self.mcs est present 
+          parmi les elements de args les autres doivent l'etre aussi
+
+      Ces arguments sont transmis à la règle pour validation sous la forme 
+      d'une liste de noms de mots-clés ou d'un dictionnaire dont 
+      les clés sont des noms de mots-clés.
+   """
+   def verif(self,args):
+      """
+          La methode verif effectue la verification specifique à la règle.
+          args peut etre un dictionnaire ou une liste. Les éléments de args
+          sont soit les éléments de la liste soit les clés du dictionnaire.
+      """
+      #  on verifie que si le premier de la liste est present, 
+      #    les autres le sont aussi
+      mc0=self.mcs[0]
+      text=''
+      test = 1
+      args = self.liste_to_dico(args)
+      if args.has_key(mc0):
+        for mc in self.mcs[1:len(self.mcs)]:
+          if not args.has_key(mc):
+            text = text + "- Le mot cle "+`mc0`+" etant present, il faut que : "+mc+" soit present"+'\n'
+            test = 0
+      return text,test
+
diff --git a/Validation/V_PROC_ETAPE.py b/Validation/V_PROC_ETAPE.py
new file mode 100644 (file)
index 0000000..4120de8
--- /dev/null
@@ -0,0 +1,69 @@
+"""
+   Ce module contient la classe mixin PROC_ETAPE qui porte les méthodes
+   nécessaires pour réaliser la validation d'un objet de type PROC_ETAPE
+   dérivé de OBJECT.
+
+   Une classe mixin porte principalement des traitements et est
+   utilisée par héritage multiple pour composer les traitements.
+"""
+# Modules Python
+import string,types
+
+# Modules EFICAS
+import V_ETAPE
+from Noyau.N_Exception import AsException
+from Noyau.N_utils import AsType
+
+class PROC_ETAPE(V_ETAPE.ETAPE):
+   """
+      On réutilise les méthodes report,verif_regles 
+      de ETAPE par héritage.
+   """
+
+   def isvalid(self,sd='oui',cr='non'):
+      """ 
+         Methode pour verifier la validité de l'objet PROC_ETAPE. Cette méthode
+         peut etre appelée selon plusieurs modes en fonction de la valeur
+         de sd et de cr (sd n'est pas utilisé).
+
+         Si cr vaut oui elle crée en plus un compte-rendu.
+
+         Cette méthode a plusieurs fonctions :
+
+          - retourner un indicateur de validité 0=non, 1=oui
+
+          - produire un compte-rendu : self.cr
+
+          - propager l'éventuel changement d'état au parent
+
+      """
+      if CONTEXT.debug : print "ETAPE.isvalid ",self.nom
+      if self.state == 'unchanged' :
+        return self.valid
+      else:
+        valid = 1
+        if hasattr(self,'valid'):
+          old_valid = self.valid
+        else:
+          old_valid = None
+        # on teste les enfants
+        for child in self.mc_liste :
+          if not child.isvalid():
+            valid = 0
+            break
+        # on teste les règles de self
+        text_erreurs,test_regles = self.verif_regles()
+        if not test_regles :
+          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
+          valid = 0
+        if self.reste_val != {}:
+          if cr == 'oui' :
+            self.cr.fatal("Mots cles inconnus :" + string.join(self.reste_val.keys(),','))
+          valid=0
+        self.valid = valid
+        self.state = 'unchanged'
+        if old_valid:
+          if old_valid != self.valid : self.init_modif_up()
+        return self.valid
+
+
diff --git a/Validation/V_UN_PARMI.py b/Validation/V_UN_PARMI.py
new file mode 100644 (file)
index 0000000..93846ab
--- /dev/null
@@ -0,0 +1,29 @@
+
+class UN_PARMI:
+   """
+      La règle vérifie que l'on trouve un des mots-clés
+      de la règle parmi les arguments d'un OBJECT.
+
+      Ces arguments sont transmis à la règle pour validation sous la forme 
+      d'une liste de noms de mots-clés ou d'un dictionnaire dont 
+      les clés sont des noms de mots-clés.
+   """
+   def verif(self,args):
+      """
+          La méthode verif vérifie que l'on trouve un des mos-clés
+          de la liste self.mcs parmi les éléments de args
+
+          args peut etre un dictionnaire ou une liste. Les éléments de args
+          sont soit les éléments de la liste soit les clés du dictionnaire.
+      """
+      #  on compte le nombre de mots cles presents
+      text =''
+      count=0
+      args = self.liste_to_dico(args)
+      for mc in self.mcs:
+        if args.has_key(mc):count=count+1
+      if count != 1:
+          text = "- Il ne faut qu'un mot-clé parmi : "+`self.mcs`+'\n'
+          return text,0
+      return text,1
+
diff --git a/Validation/__init__.py b/Validation/__init__.py
new file mode 100644 (file)
index 0000000..bb26b85
--- /dev/null
@@ -0,0 +1,6 @@
+"""
+   Ce package contient la fonctionnalité de validation des objets de type OBJECT. 
+   Cette fonctionnalité est implémentée sous la forme de classes de type MIXIN qui
+   doivent etre combinées aux classes de bases de Noyau par héritage multiple dans 
+   un troisième package, en général, Accas.
+"""
diff --git a/convert/Parserv5/Makefile b/convert/Parserv5/Makefile
new file mode 100644 (file)
index 0000000..d75ca64
--- /dev/null
@@ -0,0 +1,2 @@
+tables.py:tables.tag
+       python Translate.py -force tables.tag
diff --git a/convert/Parserv5/README b/convert/Parserv5/README
new file mode 100644 (file)
index 0000000..57294e3
--- /dev/null
@@ -0,0 +1,3 @@
+Pour mettre à jour le parser de fichier au format Asterv5, il faut
+recompiler le fichier tables.tag en faisant :
+   make
diff --git a/convert/Parserv5/Translate.py b/convert/Parserv5/Translate.py
new file mode 100644 (file)
index 0000000..66ddd27
--- /dev/null
@@ -0,0 +1,2477 @@
+#!/bin/env python -d
+#!/tools/net/app/Python-1.5.2/bin/python1.5
+
+"""Translate - a first attempt at parsing my little language
+
+Usage: Translate [switches] <infile> [<outfile>]
+
+        -stdout         -- write to standard output instead of a file
+        -force          -- write to the <outfile> even if it already
+                           exists (overwrite any existing file)
+
+        -import         -- import tag table from Translate_tags.py,
+                           instead of using the internal table
+
+        -compare        -- compare the imported and internal tag tables
+                           (development option!)
+
+        -test           -- use our internal test data and write to stdout
+        -pytag          -- use the interpreted tagging engine
+        -debug          -- if -pytag, enable its debugger
+        -diag           -- enable general debugging
+                           Beware that this currently also writes line
+                           numbers to the start of each line in the output,
+                           so it doesn't emit legal Python...
+
+        -help           -- show this text
+        -history        -- show the module history
+        -version        -- show the module version
+
+If <outfile> is not specified, <infile> will be used with its extension
+replaced by ".py".
+"""
+
+__author__  = """Tibs (Tony J Ibbs)
+tony@lsl.co.uk or tibs@tibsnjoan.demon.co.uk or tibs@bigfoot.com
+http://www.tibsnjoan.demon.co.uk/
+"""
+__version__ = "0.3 (tiepin) of 1999-11-15"
+__history__ = """\
+Originally created 1999-08-13
+
+First released version is 0.2 (bootstrap)/1999-09-09, which gave
+an idea of how the thing would work, and nearly did.
+
+Second released version is 0.3 (tiepin)/1999-11-15, which is sufficient
+to allow the parser used within this utility to be written in the little
+language, translated and then used as such.
+"""
+
+import sys
+import os
+import string
+
+# ............................................................
+# How we want to work things - this is fudge for me in initial development
+if os.name == "posix":
+    # Unix at work
+    DEFAULT_DEBUG = 0
+    DEFAULT_PYTAG = 0
+else:
+    # Windows 95 at home
+    TEXTTOOLS_PATH = "C:\\Program Files\\Python"
+    PYTAG_PATH  = "C:\\Program Files\\Python\\TextTools\\Examples"
+    DEFAULT_DEBUG = 0
+    DEFAULT_PYTAG = 0
+
+    if TEXTTOOLS_PATH not in sys.path:
+        print "Adding",TEXTTOOLS_PATH
+        sys.path.append(TEXTTOOLS_PATH)
+
+    if PYTAG_PATH not in sys.path:
+        print "Adding",PYTAG_PATH
+        sys.path.append(PYTAG_PATH)
+# ............................................................
+
+# Import the TextTools themselves
+# - I'm not personally too keen on import *, but it seems to be
+#   the recommended thing, so I'll leave it for now...
+try:
+    from TextTools import *
+except:
+    from mx.TextTools import *
+    #from TextTools.Constants.TagTables import *
+    #from TextTools.Constants.Sets import *
+
+\f
+# ------------------------------------------------------------
+# Useful little constants for unpicking the parsed tuples
+OBJECT  = 0
+LEFT    = 1
+RIGHT   = 2
+SUBLIST = 3
+
+# We want to align inline comments when possible - so this is
+# the column at which we will try to place their "#" marks...
+COMMENT_COLUMN = 40
+
+# Are we (generally) debugging?
+DEBUGGING = 0
+
+# Do we want a comma after the last tuple (or item) in a table?
+WANT_LAST_COMMA = 1
+
+\f
+# ------------------------------------------------------------
+def define_tagtable():
+    """Returns our tag table, if we're not importing it."""
+
+    # We are not, initially, going to try for anything very sophisticated
+    # - just something that will get us bootstrapped, so that I can use the
+    #   "little language" to write more sophisticated stuff (without having
+    #   to worry about dropped commas between tuples, and so on!)
+
+
+    # Whitespace is always useful
+    t_whitespace = (None,AllIn,' \t')
+    t_opt_whitespace = t_whitespace + (+1,)
+
+    # Comments are fairly simple
+    t_comment = ('comment',Table,
+                 ((None,Is,'#'),
+                  (None,AllNotIn,'\n\r',MatchOk))
+                 )
+
+    # We care about the "content" of the indentation at the start of a line,
+    # but note that it is optional
+    t_indent = ('indent',AllIn,' \t')
+    t_indentation = t_indent + (+1,)        # zero indentation doesn't show
+
+    # A string is text within single or double quotes
+    # (of course, this is an oversimplification, because we should also
+    #  deal with things like "This is a \"substring\"", and it would be
+    #  nice to be able to cope with triple-quoted strings too, but it
+    #  will do for a start)
+
+    # Major bug - doesn't recognised zero length strings...
+    # (since "AllNotIn" must match at least one character)
+    t_string = ('str',Table,
+                ((None,Is,"'",+3,+1),
+                 ('text',AllNotIn,"'"),
+                 (None,Is,"'",MatchFail,MatchOk),
+                 (None,Is,'"'),
+                 ('text',AllNotIn,'"'),
+                 (None,Is,'"'),
+                 ))
+
+    # An integer is a series of digits...
+    t_integer = ('int',AllIn,number)
+    
+    t_signed_integer = ('signed_int',Table,
+                        (('sign',Is,"+",+1,+2),
+                         ('sign',Is,"-",+1,+1),
+                         t_integer
+                         ))
+
+    # Remember to be careful to specify the LONGEST possible match first,
+    # so that we try for "IsIn" before we try for "Is" (because "IsIn"
+    # would *match* "Is", leaving us with a spurious "In" hanging around...)
+    t_operation = ('op',Table,
+                   (('op',Word,"AllInSet",   +1,MatchOk),
+                    ('op',Word,"AllIn",      +1,MatchOk),
+                    ('op',Word,"AllNotIn",   +1,MatchOk),
+                    ('op',Word,"CallArg",    +1,MatchOk),
+                    ('op',Word,"Call",       +1,MatchOk),
+                    ('op',Word,"EOF",        +1,MatchOk),
+                    ('op',Word,"Fail",       +1,MatchOk),
+                    ('op',Word,"IsInSet",    +1,MatchOk),
+                    ('op',Word,"IsIn",       +1,MatchOk),
+                    ('op',Word,"IsNotIn",    +1,MatchOk),
+                    ('op',Word,"IsNot",      +1,MatchOk),
+                    ('op',Word,"Is",         +1,MatchOk),
+                    ('op',Word,"Jump",       +1,MatchOk),
+                    ('op',Word,"LoopControl",+1,MatchOk),
+                    ('op',Word,"Loop",       +1,MatchOk),
+                    ('op',Word,"Move",       +1,MatchOk),
+                    ('op',Word,"NoWord",     +1,MatchOk), # alias for WordStart
+                    ('op',Word,"Skip",       +1,MatchOk),
+                    ('op',Word,"SubTableInList",+1,MatchOk),
+                    ('op',Word,"SubTable",   +1,MatchOk),
+                    ('op',Word,"sFindWord",  +1,MatchOk),
+                    ('op',Word,"sWordStart", +1,MatchOk),
+                    ('op',Word,"sWordEnd",   +1,MatchOk),
+                    ('op',Word,"TableInList",+1,MatchOk),
+                    ('op',Word,"Table",      +1,MatchOk),
+                    ('op',Word,"WordStart",  +1,MatchOk),
+                    ('op',Word,"WordEnd",    +1,MatchOk),
+                    ('op',Word,"Word",       MatchFail,MatchOk),
+                    ))
+
+    # Python keywords
+    t_keyword = ('keyword',Table,
+                 ((None,Word,"and",     +1,+28),
+                  (None,Word,"assert",  +1,+27),
+                  (None,Word,"break",   +1,+26),
+                  (None,Word,"class",   +1,+25),
+                  (None,Word,"continue",+1,+24),
+                  (None,Word,"def",     +1,+23),
+                  (None,Word,"del",     +1,+22),
+                  (None,Word,"elif",    +1,+21),
+                  (None,Word,"else",    +1,+20),
+                  (None,Word,"except",  +1,+19),
+                  (None,Word,"exec",    +1,+18),
+                  (None,Word,"finally", +1,+17),
+                  (None,Word,"for",     +1,+16),
+                  (None,Word,"from",    +1,+15),
+                  (None,Word,"global",  +1,+14),
+                  (None,Word,"if",      +1,+13),
+                  (None,Word,"import",  +1,+12),
+                  (None,Word,"in",      +1,+11),
+                  (None,Word,"is",      +1,+10),
+                  (None,Word,"lambda",  +1,+9),
+                  (None,Word,"not",     +1,+8),
+                  (None,Word,"or",      +1,+7),
+                  (None,Word,"pass",    +1,+6),
+                  (None,Word,"print",   +1,+5),
+                  (None,Word,"raise",   +1,+4),
+                  (None,Word,"return",  +1,+3),
+                  (None,Word,"try",     +1,+2),
+                  (None,Word,"while",   MatchFail,+1),
+                  # In order to not recognise things like "in_THIS_CASE"
+                  # we must check that the next character is not legitimate
+                  # within an identifier
+                  (None,IsIn,alpha+'_'+number,+1,MatchFail),
+                  # If it wasn't another identifier character, we need to
+                  # unread it so that it can be recognised as something else
+                  # (so that, for instance, "else:" is seen as "else" followed
+                  #  by ":")
+                  (None,Skip,-1)
+                  ))
+
+    # Do the same for mxText commands
+    t_mxkeyword = ('mxKeyword',Table,
+                   (t_operation,
+                    (None,IsIn,alpha+'_'+number,+1,MatchFail),
+                    (None,Skip,-1)
+                    ))
+
+    # Traditional identifiers
+    t_identifier = ('identifier',Table,
+                    (t_keyword   + (+1,MatchFail), # don't allow Python keywords
+                     t_mxkeyword + (+1,MatchFail), # don't allow mxText commands
+                     (None,IsIn,alpha+'_'),        # can't start with a digit
+                     (None,AllIn,alpha+'_'+number,MatchOk))
+                    )
+
+    # We don't yet deal with the following with anything in parentheses,
+    # which means we can't handle functions or command lists, or other
+    # things which "look like" a tuple
+    t_argument = ('arg',Table,
+                  (('arg',Word,"Here",     +1,MatchOk), # EOF Here, Fail Here
+                   ('arg',Word,"ToEOF",    +1,MatchOk), # Move ToEOF
+                   ('arg',Word,"To",       +1,MatchOk), # Jump To
+                   ('arg',Word,"ThisTable",+1,MatchOk), # [Sub]Table ThisTable
+                   ('arg',Word,"back",     +1,MatchOk), # Skip back
+                   ('arg',Word,"Break",    +1,MatchOk), # LoopControl Break
+                   ('arg',Word,"Reset",    +1,MatchOk), # LoopControl Reset
+                   t_string             + (+1,MatchOk), # e.g., Word "Fred"
+                   t_signed_integer     + (+1,MatchOk), # e.g., Skip -4, Move 3
+                   t_identifier                         # e.g., Table Fred
+                   ))
+
+    t_plus = ('plus',Table,
+              (t_opt_whitespace,
+               (None,Is,"+"),
+               t_opt_whitespace
+               ))
+
+    # Arguments can contain "+"
+    t_plus_arg = ('plusarg',Table,
+                  (t_argument,              # start with a single argument
+                   t_plus + (MatchOk,),     # if we have a "+"
+                   t_argument,              # then we expect another argument
+                   (None,Jump,To,-2),       # then look for another "+"
+                   ))
+
+    # Match, for example:
+    #        <fred>
+    t_label = ('label',Table,
+               ((None,Is,"<"),
+                t_identifier,
+                (None,Is,">")
+                ))
+
+    # Targets for Jump and F:/T:
+    t_target = ('target',Table,
+                (('tgt',Word,"next",     +1,MatchOk),
+                 ('tgt',Word,"previous", +1,MatchOk),
+                 ('tgt',Word,"repeat",   +1,MatchOk),
+                 ('tgt',Word,"MatchOk",  +1,MatchOk),
+                 ('tgt',Word,"MatchOK",  +1,MatchOk), # For kindness sake
+                 ('tgt',Word,"MatchFail",+1,MatchOk),
+                 t_label
+                 ))
+
+    # A value is either an identifier, or a string, or an integer
+    t_value = ('val',Table,
+               (t_identifier +(+1,MatchOk),
+                t_string     +(+1,MatchOk),
+                t_integer
+                ))
+
+    # An assignment is (optionally) used in Tuple and Table definitions...
+    t_assignment = ('assignment',Table,
+                    (t_value,
+                     t_opt_whitespace,
+                     (None,Is,'='),
+                     ))
+
+    # A common error when writing tuples is to miss off the "=" sign
+    # - the following is used in diagnosing that (see t_bad_tuple below)
+    # (it's useful to have something with identical structure to the
+    #  "real thing")
+    t_bad_tagobj = ('tagobj',Table,
+                    (t_string,
+                     ))
+
+    t_bad_assignment = ('assignment',Table,
+                        (t_value,
+                         ))
+
+    # This is the line that starts the definition of a single tuple.
+    # For the moment, restrict what it gets assigned to to a simple identifier.
+    # Match, for example:
+    #        Fred is:
+    t_tupleblock = ('tupleblock',Table,
+                    (t_identifier,
+                     t_whitespace,
+                     (None,Word,"is:")
+                     ))
+
+    # This is the line that starts a new table or sub-table.
+    # For the moment, we only cope with full Tables.
+    # NOTE that this is used for the "outer" declaration of a tag table,
+    # and also for the "inner" declaration of an inner table or sub-table.
+    # The discrimination between these is done after initial parsing.
+    # Match, for example:
+    #        'keyword' = Table is:      (inner)
+    #        tagtable = Table is:       (outer)
+    t_tableblock = ('tableblock',Table,
+                    (t_assignment + (+2,+1),  # left hand side is optional
+                     t_opt_whitespace,
+                     ('type',Word,"Table",+1,+2),  # Either "Table"
+                     ('type',Word,"SubTable"),     # or "SubTable" is required
+                     t_whitespace,            # whitespace is required
+                     (None,Word,"is:")        # "is:" is required
+                     ))
+
+    # This is the line that starts an "if" block
+    # Match, for example:
+    #        Is "Fred":
+    #        controlsymbol:
+    t_ifblock = ('ifblock',Table,
+                 (t_assignment + (+2,+1),      # left hand side is optional
+                  t_opt_whitespace,
+                  t_operation + (+4,+1),
+                  t_whitespace,
+                  t_plus_arg,
+                  (None,Is,":",MatchFail,MatchOk),
+                  t_identifier,
+                  (None,Is,":")
+                  ))
+
+    # Note that we don't allow spaces WITHIN our false and true thingies
+
+    t_onfalse = ('onfalse',Table,
+                 (t_whitespace,
+                  (None,Word,"F:"),
+                  t_target
+                  ))
+
+    t_ontrue = ('ontrue',Table,
+                (t_whitespace,
+                 (None,Word,"T:"),
+                 t_target
+                 ))
+
+    # Valid examples are things like:
+    #        'fred' = Is "xxx" F:<wow> T:MatchOk
+    #       AllIn jim T:<foundJim>
+    #
+    # For the moment, we're not trying to recognise things in any detail
+    t_tuple = ('tuple',Table,
+               (t_assignment + (+2,+1),  # left hand side is optional
+                t_opt_whitespace,
+                t_operation,         # operation is required
+                t_whitespace,        # for the moment, we always require space here
+                t_plus_arg,          # argument is required
+                t_onfalse + (+1,+1),          # F:target is optional
+                t_ontrue  + (MatchOk,MatchOk) # T:target is also optional
+                ))
+
+    # If the user has defined a "partial" tuple, they might use something
+    # of the form:
+    #       match_fred  F:MatchFalse T:MatchOk
+    t_tupleplus = ('tupleplus',Table,
+                   (t_identifier,
+                    t_onfalse + (+1,+1),          # F:target is optional
+                    t_ontrue  + (MatchOk,MatchOk) # T:target is also optional
+                    ))
+
+    # Treat Jump To specially - for example:
+    #       Jump To <top>
+    # so that they don't have to do the less obvious "Jump To F:<label>"
+    # (although that will still be recognised, of course, for people who
+    # are used to the tag tuple format itself)
+    t_jumpto = ('jumpto',Table,
+                ((None,Word,"Jump"),
+                 t_whitespace,
+                 (None,Word,"To"),
+                 t_whitespace,
+                 t_target
+                 ))
+
+    # Is it worth coping with these?
+    t_bad_jumpto = ('jumpto',Table,
+                    ((None,Word,"Jump",+2),         # cope with Jump to
+                     (None,Word,"to",MatchFail,+2),
+                     (None,Word,"JumpTo"),          # and with JumpTo
+                     t_target
+                     ))
+
+    # The "content" of a line is the bit after any indentation, and before
+    # any comment...
+    # For the moment, we won't try to maintain ANY context, so it is up to the
+    # user of the tuples produced to see if they make sense...
+    t_content = ('content',Table,
+                 (t_label        + (+1,MatchOk),
+                  t_tableblock   + (+1,MatchOk), # [<value> =] [Sub]Table is:
+                  t_tupleblock   + (+1,MatchOk), # <identifier> is:
+                  t_ifblock      + (+1,MatchOk), # <cmd> <arg>: OR <identifier>:
+                  t_jumpto       + (+1,MatchOk), # Jump To <target>
+                  t_tuple        + (+1,MatchOk),
+                  t_tupleplus    + (+1,MatchOk), # name [F:<label> [T:<label>]]
+                  ))
+
+    t_contentline = ('contentline',Table,
+                     (t_content,            # something that we care about
+                      t_opt_whitespace,
+                      t_comment   +(+1,+1), # always allow a comment
+                      (None,IsIn,newline)   # the end of the line
+                      ))
+
+    # Sometimes, the user (e.g., me) writes:
+    #  'fred' = Table:
+    # instead of:
+    #  'fred' = Table is:
+    # Unfortunately, without the "is", it would get too confusing whether
+    # we actually wanted an if block...
+    t_bad_tableblock = ('tableblock',Table,
+                        (t_assignment + (+2,+1),  # left hand side is optional
+                         t_opt_whitespace,
+                         (None,Word,"Table"),     # "Table" is required
+                         (None,Is,":")            # "is" is needed before the ":"
+                         ))
+
+    # Sometimes, the use (e.g., me again) write:
+    #  'fred' IsIn jim
+    # instead of:
+    #  'fred' = IsIn jim
+    # Whilst I'm not entirely convinced that "=" is the best character
+    # to use here, I think we do need something!
+    t_bad_tuple = ('tuple',Table,
+                   (t_bad_assignment, # obviously we have to have this!
+                    t_whitespace,     # in which case the whitespace IS needed
+                    t_operation,      # operation is required
+                    t_whitespace,     # for the moment, we must have space here
+                    t_plus_arg,       # argument is required
+                    t_onfalse + (+1,+1),          # F:target is optional
+                    t_ontrue  + (MatchOk,MatchOk) # T:target is also optional
+                    ))
+
+    # Make some attempt to recognise common errors...
+    t_badcontent = ('badcontent',Table,
+                    (t_bad_tableblock +(+1,MatchOk),
+                     t_bad_tuple
+                     ))
+
+    t_badline = ('badline',Table,
+                 (t_badcontent,         # something that we sort of care about
+                  t_opt_whitespace,
+                  t_comment   +(+1,+1), # always allow a comment
+                  (None,IsIn,newline)   # the end of the line
+                  ))
+
+    t_emptyline = ('emptyline',Table,
+                   (t_opt_whitespace,
+                    (None,IsIn,newline)     # the end of the line
+                    ))
+
+    t_commentline = ('commentline',Table,
+                     (t_comment,
+                      (None,IsIn,newline)   # the end of the line
+                      ))
+
+    t_passthruline = ('passthruline',Table,
+                      (('passthru',AllNotIn,newline,+1), # owt else on the line
+                       (None,IsIn,newline)               # the end of the line
+                       ))
+
+    # Basically, a file is a series of lines
+    t_line = ('line',Table,
+              (t_emptyline   +(+1,MatchOk),    # empty lines are simple enough
+               t_indent      +(+1,+1),         # optional indentation
+               t_commentline +(+1,MatchOk),    # always allow a comment
+               t_contentline +(+1,MatchOk),    # a line we care about
+               t_badline     +(+1,MatchOk),    # a line we think is wrong
+               t_passthruline                  # a line we don't care about
+               ))
+
+    t_file = (t_line,
+              (None,EOF,Here,-1)
+              )
+
+    return t_file
+
+\f
+# ------------------------------------------------------------
+# We'll define some moderately interesting test data
+
+test_data = """\
+# This example isn't *meant* to make any sense!
+# It's just an accumulation of things that got checked for various reasons 
+from TextTools import *
+# Some Python code
+a = b;
+fred = 3;
+if a == 1:
+    print "a == 1"
+else:
+    print "a != 1"
+
+# And the rest is our business...
+t_integer is:
+    'int' = AllIn '0123456789'
+t_integer is:
+    'int' = AllIn number
+t_indent is:
+    # A comment here is OK
+    <label> # Strangely enough, so is a label
+    'indent' = AllIn ' \t'
+t_buggy = Table is:
+    'int' AllIn number    # BUGGY LINE (missing "=")
+    (None,"AllIn",number) # BUGGY LINE (an actual tuple)
+    fred = jim            # BUGGY LINE (not our business)
+    tagobj F:<op> T:next  # label <op> is undefined
+    # The next line is totally empty
+
+    # The next line contains just indentation
+
+    # This line is just a comment
+# And this comment should be JUST after the preceding block...
+t_indentation is:          # This should be "= Table is:"
+    t_indent
+    t_indent F:previous
+    t_indent T:previous
+    t_indent F:previous T:previous
+t_deep = Table is:
+    'a' = SubTable is:
+        SubTable is:
+            'this' = Table ThisTable
+            t_integer
+t_fred = Table is:
+    <top>
+    AllIn 'a'
+    'a' = AllIn 'a'
+    'a' = AllIn 'a' F:previous
+    'a' = AllIn 'a' T:previous
+    'a' = AllIn 'a' F:previous T:previous
+    AllIn 'abcd':
+        AllIn 'xyz' F:<later> T:<top>
+    'a' = AllIn 'abcd':
+        AllIn 'xyz'
+    <later>
+    t_indent:
+        AllIn 'xyz'
+    AllIn number + '_'
+    AllIn number+"_"+alpha
+    Jump To <top>
+"""
+
+\f
+# ------------------------------------------------------------
+# Our own exceptions
+
+class OutsideError(Exception):
+    """The entity is not permitted outside a block."""
+    pass
+
+class IndentError(Exception):
+    """An indentation error has been detected."""
+    pass
+
+class NoIdentifier(Exception):
+    """We're missing an identifier (to assign to)."""
+    pass
+
+\f
+# ------------------------------------------------------------
+def LineFactory(lineno,tagtuple,text):
+    """Take some tagged data and return an appropriate line class.
+
+    lineno   -- the line number in the "file". Note that the first line
+                in the file is line 1
+    tagtuple -- a tag tuple for a single line of data
+    text     -- the text for the "file". All the "left" and "right" offsets
+                are relative to this text (i.e., it is the entire content
+                of the file)
+
+    The tag tuples we get back from the parser will be of the form:
+
+        ('line',left,right,[
+          ('indent',left,right,None),    -- this is optional
+          ('content',left,right,[<data>])
+        ])
+
+    Looking at <type> should enable us to decide what to do with
+    the <data>.
+    """
+
+    # Extract the list of tuples from this 'line'
+    tuples = tagtuple[SUBLIST]
+
+    # First off, do we have any indentation?
+    tup = tuples[0]
+    if tup[OBJECT] == "indent":
+        # This is inefficient, because it actually copies strings
+        # around - better would be to duplicate the calculation
+        # that string.expandtabs does internally...
+        indent_str = string.expandtabs(text[tup[LEFT]:tup[RIGHT]])
+        tuples = tuples[1:]
+    else:
+        indent_str = ""
+        tuples = tuples
+
+    # Now, work out which class we want an instance of
+    # (this is the 'fun' bit)
+
+    type = tuples[0][OBJECT]
+    if type == 'emptyline':
+        return EmptyLine(lineno,indent_str,tuples[0],text)
+    elif type == 'commentline':
+        return CommentLine(lineno,indent_str,tuples[0],text)
+    elif type == 'passthruline':
+        return PassThruLine(lineno,indent_str,tuples[0],text)
+    elif type == 'contentline':
+        # OK - we need to go down another level
+        sublist = tuples[0][SUBLIST]
+
+        # Do we also have an in-line comment?
+        if len(sublist) > 1:
+            comment = sublist[1]
+        else:
+            comment = None
+
+        # And the actual DATA for our line is down yet another level...
+        sublist = sublist[0][SUBLIST]
+        type = sublist[0][OBJECT]
+        if type == 'label':
+            return LabelLine(lineno,indent_str,sublist[0],comment,text)
+        elif type == 'tableblock':
+            return TableBlockLine(lineno,indent_str,sublist[0],comment,text)
+        elif type == 'tupleblock':
+            return TupleBlockLine(lineno,indent_str,sublist[0],comment,text)
+        elif type == 'ifblock':
+            return IfBlockLine(lineno,indent_str,sublist[0],comment,text)
+        elif type == 'tuple':
+            return TupleLine(lineno,indent_str,sublist[0],comment,text)
+        elif type == 'tupleplus':
+            return TuplePlusLine(lineno,indent_str,sublist[0],comment,text)
+        elif type == 'jumpto':
+            return JumpToLine(lineno,indent_str,sublist[0],comment,text)
+        else:
+            raise ValueError,\
+                  "Line %d is of unexpected type 'contentline/%s'"%(lineno,
+                                                                    type)
+    elif type == 'badline':
+        # OK - we need to go down another level
+        sublist = tuples[0][SUBLIST]
+
+        # Do we also have an in-line comment?
+        if len(sublist) > 1:
+            comment = sublist[1]
+        else:
+            comment = None
+
+        # And the actual DATA for our line is down yet another level...
+        sublist = sublist[0][SUBLIST]
+        type = sublist[0][OBJECT]
+        if type == 'tableblock':
+            return BadTableBlockLine(lineno,indent_str,sublist[0],comment,text)
+        if type == 'tuple':
+            return BadTupleLine(lineno,indent_str,sublist[0],comment,text)
+        else:
+            raise ValueError,\
+                  "Line %d is of unexpected type 'badline/%s'"%(lineno,type)
+    else:
+        raise ValueError,"Line %d is of unexpected type '%s'"%(lineno,type)
+
+
+\f
+# ------------------------------------------------------------
+class BaseLine:
+    """The base class on which the various line types depend
+
+    Contains:
+
+      tagtuple    -- the tagtuple we (our subclass instance) represent(s)
+      lineno      -- the line number in the file (first line is line 1)
+      indent      -- our indentation (integer)
+      indent_str  -- our indentation (a string of spaces)
+      text        -- the text of the "file" we're within
+      class_name  -- the name of the actual class this instance belongs to
+                     (i.e., the name of the subclass, suitable for printing)
+
+    Some things only get useful values after we've been instantiated
+    
+      next_indent -- the indentation of the next line
+      index       -- for a line in a block, its index therein
+    """
+
+    def __init__(self,lineno,indent_str,tagtuple,text):
+        """Instantiate a BaseLine.
+
+        lineno     -- the line number in the "file". Note that the first line
+                      in the file is line 1
+        indent_str -- the indentation of the line (a string of spaces)
+        tagtuple   -- the tag tuple for this line of data
+        text       -- the text for the "file". All the "left" and "right"
+                      offsets are relative to this text (i.e., it is the
+                      entire content of the file)
+
+        The content of the tagtuple depends on which of our subclasses
+        is being used. Refer to the relevant doc string.
+        """
+
+        self.tagtuple = tagtuple
+        self.lineno   = lineno
+        self.text     = text
+
+        self.class_name = self._class_name()
+        self.indent_str = indent_str
+        self.indent     = len(indent_str)
+
+        # OK - we don't really know! (but this will do for "EOF")
+        self.next_indent = 0
+
+        # We don't always HAVE a sensible value for this
+        self.index = None
+
+        #if DEBUGGING:
+        #    print "Line %3d: %s%s"%(lineno,indent_str,self.class_name)
+
+    def change_indent(self,count=None,spaces=""):
+        """Change our indentation.
+
+        Specify either "count" or "spaces" (if both are given,
+        "count" will be used, if neither is given, then the
+        indentation will be set to zero)
+        
+        count  -- the number of spaces we're indented by
+        spaces -- a string of spaces
+        """
+        if count:
+            self.indent = count
+            self.indent_str = count * " "
+        else:
+            self.indent_str = spaces
+            self.indent = len(spaces)
+
+    def _class_name(self):
+        """Return a representation of the class name."""
+
+        full_name = "%s"%self.__class__
+        bits = string.split(full_name,".")
+        return bits[-1]
+
+    def starts_block(self):
+        """Return true if we start a new block."""
+        return 0
+
+    def only_in_block(self):
+        """Return true if we can only occur inside a block."""
+        return 0
+
+    def our_business(self):
+        """Return true if we are a line we understand."""
+        return 1
+
+    def __str__(self):
+        return "%3d %s%-10s"%(self.lineno,self.indent_str,self.class_name)
+
+    def _intro(self):
+        """Returns a useful 'introductory' string."""
+        return "%3d %-10s %s"%(self.lineno,self.class_name,self.indent_str)
+
+    def _trunc(self):
+        """Returns a "truncated" representation of our text."""
+
+        text = "%s %s"%(self._intro(),
+                        `self.text[self.tagtuple[LEFT]:self.tagtuple[RIGHT]]`)
+
+        if len(text) > 60:
+            return text[:60]+"..."
+        else:
+            return text
+
+    def resolve_labels(self,block):
+        """Called to resolve any labels use in this line.
+
+        block -- the block that contains us
+        """
+        # The default is to do nothing as we don't HAVE any labels...
+        return
+
+    def expand(self,stream,block=None):
+        """Write out the expanded equivalent of ourselves.
+
+        stream  -- an object with a "write" method, e.g., a file
+        newline -- true if we should output a terminating newline
+        block   -- used to pass the containing Block down to lines
+                   within a block, or None if we're not in a block
+        """
+
+        if DEBUGGING:
+            stream.write("Line %3d: "%self.lineno)
+
+        stream.write(self.indent_str)
+        stream.write(self.text[self.tagtuple[LEFT]:self.tagtuple[RIGHT]])
+        stream.write(",\n")
+
+    def warning(self,text):
+        """Report a warning message.
+
+        text -- the text to report
+        """
+
+        lines = string.split(text,"\n")
+        print "###WARNING: line %d (%s)"%(self.lineno,self.class_name)
+        for line in lines:
+            print "###         %s"%line
+
+    def error(self,text):
+        """Report an error.
+
+        text -- the error text to report
+        """
+
+        lines = string.split(text,"\n")
+        print "###ERROR: line %d (%s)"%(self.lineno,self.class_name)
+        for line in lines:
+            print "###       %s"%line
+
+\f
+# ------------------------------------------------------------
+class EmptyLine(BaseLine):
+    """An empty line.
+
+    Note that the indentation of an empty line is taken to be the
+    same as that of the next (non-empty) line. This is because it
+    seems to me that (a) an empty line should not per-se close a
+    block (which it would do if it had indentation 0) and (b) we
+    don't remember any whitespace in an empty line, so the user
+    can't assign an indentation themselves (which is a Good Thing!)
+    """
+
+    def __init__(self,lineno,indent_str,tagtuple,text):
+        """Instantiate an EmptyLine.
+
+        The content of the tagtuple is:
+            None
+        """
+
+        BaseLine.__init__(self,lineno,indent_str,tagtuple,text)
+
+    def expand(self,stream,block=None):
+        """Write out the expanded equivalent of ourselves.
+
+        stream  -- an object with a "write" method, e.g., a file
+        block   -- used to pass the containing Block down to lines
+                   within a block, or None if we're not in a block
+        """
+
+        if DEBUGGING:
+            stream.write("Line %3d: "%self.lineno)
+
+        # um - there's nothing to do, folks
+        stream.write("\n")
+
+    def our_business(self):
+        """Return true if we are a line we understand."""
+        return 0
+
+    def _trunc(self):
+        """Returns a "truncated" representation of our text."""
+
+        return self._intro()
+
+\f
+# ------------------------------------------------------------
+class CommentLine(BaseLine):
+    """A comment line."""
+
+    def __init__(self,lineno,indent_str,tagtuple,text):
+        """Instantiate a CommentLine.
+
+        The content of the tagtuple is:
+            ('comment',left,right,None)
+        and the demarcated text includes the initial '#' character
+        """
+
+        BaseLine.__init__(self,lineno,indent_str,tagtuple,text)
+
+        # We actually want the next tuple down (so to speak) so that
+        # we lose the trailing newline...
+        tup = self.tagtuple[SUBLIST][0]
+        self.data = self.text[tup[LEFT]:tup[RIGHT]]
+
+    def our_business(self):
+        """Return true if we are a line we understand."""
+        return 0
+
+    def expand(self,stream,block=None):
+        """Write out the expanded equivalent of ourselves.
+
+        stream  -- an object with a "write" method, e.g., a file
+        block   -- used to pass the containing Block down to lines
+                   within a block, or None if we're not in a block
+        """
+
+        if DEBUGGING:
+            stream.write("Line %3d: "%self.lineno)
+
+        stream.write(self.indent_str)
+        stream.write("%s\n"%self.data)
+
+\f
+# ------------------------------------------------------------
+class PassThruLine(BaseLine):
+    """A line we just pass throught without interpretation."""
+
+    def __init__(self,lineno,indent_str,tagtuple,text):
+        """Instantiate a PassThruLine.
+
+        The content of the tagtuple is:
+            ('passthru',left,right,None)
+        """
+
+        BaseLine.__init__(self,lineno,indent_str,tagtuple,text)
+
+        # We actually want the next tuple down (so to speak) so that
+        # we lose the trailing newline...
+        tup = self.tagtuple[SUBLIST][0]
+        self.data = self.text[tup[LEFT]:tup[RIGHT]]
+
+    def our_business(self):
+        """Return true if we are a line we understand."""
+        return 0
+
+    def expand(self,stream,block=None):
+        """Write out the expanded equivalent of ourselves.
+
+        stream  -- an object with a "write" method, e.g., a file
+        block   -- used to pass the containing Block down to lines
+                   within a block, or None if we're not in a block
+        """
+
+        if DEBUGGING:
+            stream.write("Line %3d: "%self.lineno)
+
+        if block:
+            err_str = "Unparsed line inside a block"\
+                      " - it has been commented out"
+            # Hmm - the following advice is less often useful than I
+            # had hoped - leave it out for now...
+            #if string.find(self.data,",") != -1:
+            #    err_str = err_str + "\nCheck for a trailing comma?"
+
+            self.error(err_str)
+
+        # Always output the indentation, 'cos otherwise it looks silly
+        stream.write(self.indent_str)
+
+        if block:
+            stream.write("#[ignored]#")
+
+        stream.write("%s\n"%self.data)
+
+\f
+# ------------------------------------------------------------
+class ContentLine(BaseLine):
+    """A line we have to interpret - another base class.
+
+    Adds the following variables:
+
+    comment -- any in-line comment on this line
+    """
+
+    def __init__(self,lineno,indent_str,tagtuple,comment,text):
+        """Instantiate a ContentLine.
+
+        comment -- either a comment tuple or None
+
+        The content of the tagtuple is:
+            ('contentline',left,right,
+              [('content',left,right,[<data>]),
+               ('comment',left,right,None)      -- optional
+              ])
+        where <data> is used in the internals of one of our subclasses
+        (i.e., it is what is passed down in the "tagtuple" argument)
+        """
+
+        BaseLine.__init__(self,lineno,indent_str,tagtuple,text)
+        self.comment = comment
+
+        # Assume we're not the last "our business" line in a block...
+        self.is_last = 0
+
+    def _write_comment(self,stream,sofar):
+        """Write out the in-line comment string.
+
+        Since we're the only people to call this, we can safely
+        rely on it only being called when there IS a comment tuple
+        to output...
+
+        stream  -- an object with a "write" method, e.g., a file
+        sofar   -- the number of characters written to the line
+                   so far
+        """
+        if sofar < COMMENT_COLUMN:
+            stream.write(" "*(COMMENT_COLUMN - sofar))
+        else:
+            # always write at least one space...
+            stream.write(" ")
+        stream.write(self.text[self.comment[LEFT]:self.comment[RIGHT]])
+
+    def _write_text(self,stream,block):
+        """Write out the main tuple text.
+
+        stream  -- an object with a "write" method, e.g., a file
+        block   -- used to pass the containing Block down to lines
+                   within a block, or None if we're not in a block
+
+        This should generally be the method that subclasses override.
+        It returns the number of characters written, or -1 if we had
+        an error.
+        """
+        stream.write(self.text[self.tagtuple[LEFT]:self.tagtuple[RIGHT]])
+        return self.tagtuple[RIGHT] - self.tagtuple[LEFT]
+
+    def expand(self,stream,block=None):
+        """Write out the expanded equivalent of ourselves.
+
+        stream  -- an object with a "write" method, e.g., a file
+        block   -- used to pass the containing Block down to lines
+                   within a block, or None if we're not in a block
+        """
+
+        if DEBUGGING:
+            stream.write("Line %3d: "%self.lineno)
+
+        stream.write(self.indent_str)
+        nchars = self._write_text(stream,block)
+        # Don't write any in-line comment out if we had an error,
+        # as the layout won't work!
+        if nchars > -1 and self.comment:
+            self._write_comment(stream,sofar=nchars+self.indent)
+        stream.write("\n")
+
+\f
+# ------------------------------------------------------------
+class LabelLine(ContentLine):
+    """A line containing a label.
+
+    Contains:
+        label -- our label string
+    """
+
+    def __init__(self,lineno,indent_str,tagtuple,comment,text):
+        """Instantiate a LabelLine.
+
+        For instance:
+
+            <fred>
+
+        The content of the tagtuple is:
+
+            ('label',left,right,[
+              ('identifier',left,right,None)
+             ])
+        """
+
+        ContentLine.__init__(self,lineno,indent_str,tagtuple,comment,text)
+
+        self.label = self.text[self.tagtuple[LEFT]:self.tagtuple[RIGHT]]
+
+    def _write_text(self,stream,block):
+        """Write out the main tuple text.
+
+        stream  -- an object with a "write" method, e.g., a file
+        block   -- used to pass the containing Block down to lines
+                   within a block, or None if we're not in a block
+        """
+        # Enough difficult length calculation - let's do this one
+        # the easy way...
+        if DEBUGGING:
+            text = "# Label %s at index %d"%(self.label,self.index)
+        else:
+            text = "# %s"%(self.label)  # surely enough for most people...
+        stream.write(text)
+        return len(text)
+
+    def translate(self,index,block):
+        """Return the translation of a use of this label as a target.
+
+        index -- the index of the line which uses the label as a target
+        block -- the Block we are within
+        """
+
+        # Hmm - I don't think this CAN go wrong at this point...
+        return block.translate_label(self.label,self)
+
+    def only_in_block(self):
+        """Return true if we can only occur inside a block."""
+        return 1
+
+\f
+# ------------------------------------------------------------
+class TableBlockLine(ContentLine):
+    """A line starting a table block."""
+
+    def __init__(self,lineno,indent_str,tagtuple,comment,text):
+        """Instantiate a TableBlockLine.
+
+        For instance:
+
+            "fred" = Table is:
+            Table is:
+
+        This is used for two purposes:
+        1. To define the actual tag table itself (i.e., at the outer
+           level). Only "Table" is allowed in this instance, but since
+           that is all we recognised for now, we shan't worry about it...
+        2. To define an inner table (i.e., at an inner level)
+
+        The content of the tagtuple is:
+
+            ('tableblock',left,right,[
+              ('assignment',left,right,[           -- optional if inner
+                 ('val',left,right,[
+
+                    ('identifier',left,right,[])
+                 OR
+                    ('str',left,right,[
+                       ('text',left,right,None)
+                     ])
+                 OR
+                    ('int',left,right,[])
+
+                  ])
+               ])
+              ('type',left,right,[])       -- either "Table" or "SubTable"
+             ])
+
+        NOTE: as an "emergency" measure (so we can `pretend' that a
+        TupleBlock was actually a TableBlock as part of attempted
+        error correction), if tagtuple == ("error",tagobj) then we
+        short-circuit some of the initialisation...
+        """
+
+        ContentLine.__init__(self,lineno,indent_str,tagtuple,comment,text)
+
+        if tagtuple[0] == "error":
+            # We're "bluffing" at the creation of a TableBlock
+            self.tagobj = tagtuple[1]
+            self.is_subtable = 0
+        elif len(self.tagtuple[SUBLIST]) == 1:
+            self.tagobj = "None"
+            tup = self.tagtuple[SUBLIST][0]
+            self.is_subtable = (self.text[tup[LEFT]:tup[RIGHT]] == "SubTable")
+        else:
+            # The first tuple down gives us the "<value> = " string
+            tup = self.tagtuple[SUBLIST][0]
+            # The next tuple down gives us "<value>" which is what we want
+            tup = tup[SUBLIST][0]
+            self.tagobj = self.text[tup[LEFT]:tup[RIGHT]]
+            # Then we have the type of table
+            tup = self.tagtuple[SUBLIST][1]
+            self.is_subtable = (self.text[tup[LEFT]:tup[RIGHT]] == "SubTable")
+
+    def got_tagobj(self):
+        return (self.tagobj != "None")
+
+    def starts_block(self):
+        """Return true if we start a new block."""
+        return 1
+
+    def _write_text(self,stream,block):
+        """Write out the main tuple text.
+
+        stream  -- an object with a "write" method, e.g., a file
+        block   -- used to pass the containing Block down to lines
+                   within a block, or None if we're not in a block
+
+        It returns the number of characters written, or -1 if we had
+        an error.
+        """
+
+        if block:
+            if self.is_subtable:
+                stream.write("(%s,SubTable,("%self.tagobj)
+                return len(self.tagobj) + 11
+            else:
+                stream.write("(%s,Table,("%self.tagobj)
+                return len(self.tagobj) + 8
+        else:
+            stream.write("%s = ("%self.tagobj)
+            return len(self.tagobj) + 4
+
+\f
+# ------------------------------------------------------------
+class TupleBlockLine(ContentLine):
+    """A line starting a tuple block (i.e., defining a single tuple)
+
+    Contains:
+    
+        name -- the "name" of this tuple (i.e., what comes
+                before the "is:")
+    """
+
+    def __init__(self,lineno,indent_str,tagtuple,comment,text):
+        """Instantiate a TupleBlockLine.
+
+        For instance:
+
+            Fred is:
+
+        The content of the tagtuple is:
+        
+            ('tupleblock',left,right,[
+              ('identifier',left,right,None)
+             ])
+        """
+
+        ContentLine.__init__(self,lineno,indent_str,tagtuple,comment,text)
+
+        tup = self.tagtuple[SUBLIST][0]
+        self.name = self.text[tup[LEFT]:tup[RIGHT]]
+
+    def starts_block(self):
+        """Return true if we start a new block."""
+        return 1
+
+    def only_in_block(self):
+        """Return true if we can only occur inside a block."""
+        return 0
+
+    def _write_text(self,stream,block):
+        """Write out the main tuple text.
+
+        stream  -- an object with a "write" method, e.g., a file
+        block   -- used to pass the containing Block down to lines
+                   within a block, or None if we're not in a block
+
+        It returns the number of characters written, or -1 if we had
+        an error.
+        """
+        # The "\" at the end is somewhat clumsy looking, but the
+        # only obvious way of preserving layout...
+        stream.write("%s = \\"%self.name)
+        return len(self.name) + 5
+
+\f
+# ------------------------------------------------------------
+class IfBlockLine(ContentLine):
+    """A line starting an if block.
+
+    Contains:
+        cmd  -- the command within this if block
+        arg  -- the argument for said command
+    or:
+        name -- the name within this if block
+    """
+
+    def __init__(self,lineno,indent_str,tagtuple,comment,text):
+        """Instantiate an IfBlockLine.
+
+        For instance:
+
+            'jim' = Is "Fred":
+            Is "Fred":
+            fred:
+
+        The content of the tagtuple is:
+
+            ('ifblock',left,right,[
+              ('assignment',left,right,[
+                 ('val',left,right,[
+
+                    ('identifier',left,right,[])
+                 OR
+                    ('str',left,right,[
+                       ('text',left,right,None)
+                     ])
+                 OR
+                    ('int',left,right,[])
+
+                  ])
+               ])
+              ('op',left,right,None),
+              ('arg',left,right,None),
+             ])
+        or:
+            ('ifblock',left,right,[
+              ('op',left,right,None),
+              ('arg',left,right,None),
+             ])
+        or:
+            ('ifblock',left,right,[
+              ('identifier',left,right,None)
+             ])
+        """
+
+        ContentLine.__init__(self,lineno,indent_str,tagtuple,comment,text)
+
+        tuples = self.tagtuple[SUBLIST]
+        if tuples[0][OBJECT] == 'op':
+            tup1 = tuples[0]
+            tup2 = tuples[1]
+            self.tagobj = "None"
+            self.cmd    = self.text[tup1[LEFT]:tup1[RIGHT]]
+            self.arg    = self.text[tup2[LEFT]:tup2[RIGHT]]
+            self.name   = None
+        elif tuples[0][OBJECT] == 'assignment':
+            # The "<value>" in the "<value> = " string is down
+            # one level more than the others
+            tup0 = tuples[0][SUBLIST][0]
+            self.tagobj = self.text[tup0[LEFT]:tup0[RIGHT]]
+            tup1 = tuples[1]
+            tup2 = tuples[2]
+            self.cmd    = self.text[tup1[LEFT]:tup1[RIGHT]]
+            self.arg    = self.text[tup2[LEFT]:tup2[RIGHT]]
+            self.name   = None
+        elif tuples[0][OBJECT] == 'identifier':
+            tup = tuples[0]
+            self.name   = self.text[tup[LEFT]:tup[RIGHT]]
+            self.cmd    = None
+            self.arg    = None
+            self.tagobj = None
+        else:
+            # Hmm - try to continue with anything unexpected
+            tup = tuples[0]
+            self.error("Unexpected IfBlock subtype %s"%tup[OBJECT])
+            self.name   = self.text[tup[LEFT]:tup[RIGHT]]
+            self.cmd    = None
+            self.arg    = None
+            self.tagobj = None
+
+        # Currently, we have one 'special' argument
+        if self.arg == "back": self.arg = "-1"
+
+        # We don't yet know the offset of the "virtual label" at the
+        # end of this if block...
+        self.end_label = None
+
+    def starts_block(self):
+        """Return true if we start a new block."""
+        return 1
+
+    def only_in_block(self):
+        """Return true if we can only occur inside a block."""
+        return 1
+
+    def resolve_labels(self,block):
+        """Called to resolve any labels used in this line.
+
+        block -- the block that contains us
+
+        Note that this only does something the first time it
+        is called - this will be when the IF block's startline
+        is asked to resolve its labels. If it is called again,
+        as a 'normal' line, it will do nothing...
+        """
+        if not self.end_label:
+            self.end_label = "%+d"%(len(block.business)+1)
+
+    def _write_text(self,stream,block):
+        """Write out the main tuple text.
+
+        stream  -- an object with a "write" method, e.g., a file
+        block   -- used to pass the containing Block down to lines
+                   within a block, or None if we're not in a block
+
+        It returns the number of characters written, or -1 if we had
+        an error.
+        """
+        if not self.end_label:
+            # This should never happen, but just in case, warn the user!
+            self.error("Unable to determine 'onFalse' destination in IF")
+
+        if self.name:
+            stream.write("%s + (%s,+1),"%(self.name,
+                                          self.end_label or "<undefined>"))
+            return len(self.name) + 20
+        else:
+            stream.write("(%s,%s,%s,%s,+1),"%(self.tagobj,self.cmd,self.arg,
+                                              self.end_label or "<undefined>"))
+            return len(self.tagobj) + len(self.cmd) + len(self.arg) + \
+                   len(self.end_label) + 20
+
+\f
+# ------------------------------------------------------------
+class TupleLine(ContentLine):
+    """A line containing a basic tuple.
+
+
+    Contains:
+        tagobj  -- optional
+        cmd     -- the command
+        arg     -- the argument
+        ontrue  -- what to do if true
+        onfalse -- ditto false
+    """
+
+    def __init__(self,lineno,indent_str,tagtuple,comment,text):
+        """Instantiate a TupleLine.
+
+        The content of the tagtuple is:
+        
+            ('tuple',left,right,[
+              ('tagobj',left,right,[           -- optional
+                 ('str',left,right,[
+                    ('text',left,right,None)
+                  ])
+               ])
+              ('op',left,right,None),
+              ('arg',left,right,None),
+              ('onfalse',left,right,[          -- optional
+                 ('target',left,right,[
+                   ('tgt',left,right,None)
+                 ]),
+              ('ontrue',left,right,[           -- optional
+                 ('target',left,right,[
+                   ('tgt',left,right,None)
+                 ])
+               ])
+             ])
+        """
+
+        ContentLine.__init__(self,lineno,indent_str,tagtuple,comment,text)
+
+        self.unpack()
+
+
+    def unpack(self):
+        """Unpack our contents from our tagtuple."""
+
+        # This is doubtless not the most efficient way of doing this,
+        # but it IS relatively simple...
+        dict = {}
+        #for key in ("assignment","op","arg","onfalse","ontrue"):
+        for key in ("assignment","op","plusarg","onfalse","ontrue"):
+            dict[key] = None
+
+        tuples = self.tagtuple[SUBLIST]
+        for item in tuples:
+            name = item[OBJECT]
+            if name == "onfalse" or name == "ontrue" or name == "assignment":
+                # For these, we need to go "down one level" for our data
+                tup = item[SUBLIST][0]
+                dict[name] = (tup[LEFT],tup[RIGHT])
+            else:
+                dict[name] = (item[LEFT],item[RIGHT])
+
+        # The tag object is optional
+        if dict["assignment"]:
+            left,right = dict["assignment"]
+            self.tagobj = self.text[left:right]
+        else:
+            self.tagobj = "None"
+
+        # The operation (command) and argument are required
+        left,right = dict["op"]
+        self.cmd = self.text[left:right]
+
+        #left,right = dict["arg"]
+        left,right = dict["plusarg"]
+        self.arg = self.text[left:right]
+
+        # Currently, we have one 'special' argument
+        if self.arg == "back": self.arg = "-1"
+
+        # Actually, we don't want the F and T jumps explicit if not
+        # given, since we mustn't output them for a single tuple if
+        # they're not given (so they can be "added in" later on)
+        if dict["onfalse"]:
+            left,right = dict["onfalse"]
+            self.onfalse = self.text[left:right]
+        else:
+            self.onfalse = None                # "MatchFail"
+        if dict["ontrue"]:
+            left,right = dict["ontrue"]
+            self.ontrue = self.text[left:right]
+        else:
+            self.ontrue = None                 # "next"
+
+    def only_in_block(self):
+        """Return true if we can only occur inside a block."""
+        return 1
+
+    def resolve_labels(self,block):
+        """Called to resolve any labels use in this line.
+
+        block -- the block that contains us
+        """
+        if self.onfalse:
+            self.onfalse = block.translate_label(self.onfalse,self)
+        if self.ontrue:
+            self.ontrue  = block.translate_label(self.ontrue,self)
+
+    def _write_text(self,stream,block):
+        """Write out the main tuple text.
+
+        stream  -- an object with a "write" method, e.g., a file
+        block   -- used to pass the containing Block down to lines
+                   within a block, or None if we're not in a block
+
+        It returns the number of characters written, or -1 if we had
+        an error.
+        """
+
+        # Start with the stuff we must have...
+        stream.write("(%s,%s,%s"%(self.tagobj,self.cmd,self.arg))
+        length = len(self.tagobj) + len(self.cmd) + len(self.arg) + 3
+
+        if self.ontrue:
+            if not self.onfalse:
+                # OK, we didn't get an explicit F, but because it comes
+                # before the T jump in the tuple, we need to fake it
+                # anyway...
+                stream.write(",%s,%s)"%("MatchFail",self.ontrue))
+                length = length + len("MatchFail") + len(self.ontrue) + 3
+            else:
+                # We had both F and T
+                stream.write(",%s,%s)"%(self.onfalse,self.ontrue))
+                length = length + len(self.onfalse) + len(self.ontrue) + 3
+        elif self.onfalse:
+            # We only had F. We shan't "fake" the T jump, *just* in case
+            # the user is defining a single tuple that they'll add the
+            # T jump to later on (although that *is* a bit dodgy, I think)
+            # [[The option would be to "fake" it if we're IN a block - I may
+            #   go for that approach later on]]
+            stream.write(",%s)"%self.onfalse)
+            length = length + len(self.onfalse) + 2
+        else:
+            # Neither F nor T - so don't write the defaults for either,
+            # in case this is a top level tuple they're going to add to
+            # later on...
+            # [[Comments as for the case above, I think]]
+            stream.write(")")
+            length = length + 1
+
+        if block and not self.is_last:
+            stream.write(",")
+            length = length + 1
+
+        return length
+\f
+# ------------------------------------------------------------
+class TuplePlusLine(ContentLine):
+    """A line containing a tuple "plus" (e.g., "fred + (+1,+1)").
+
+    Contains:
+
+        name    -- the name/identifier
+        ontrue  -- what to do if true
+        onfalse -- ditto false
+    """
+
+    def __init__(self,lineno,indent_str,tagtuple,comment,text):
+        """Instantiate a TuplePlusLine.
+
+            <identifier> + (onF,onT)
+
+        The content of the tagtuple is:
+        
+            ('tupleplus',left,right,[
+              ('identifier',left,right,None)
+              ('onfalse',left,right,[          -- optional
+                 ('target',left,right,[
+                   ('tgt',left,right,None)
+                 ]),
+              ('ontrue',left,right,[           -- optional
+                 ('target',left,right,[
+                   ('tgt',left,right,None)
+                 ])
+               ])
+             ])
+        """
+
+        ContentLine.__init__(self,lineno,indent_str,tagtuple,comment,text)
+
+        self.unpack()
+
+
+    def unpack(self):
+        """Unpack our contents from our tagtuple."""
+
+        # This is doubtless not the most efficient way of doing this,
+        # but it IS relatively simple...
+        dict = {}
+        for key in ("identifier","onfalse","ontrue"):
+            dict[key] = None
+
+        tuples = self.tagtuple[SUBLIST]
+        for item in tuples:
+            name = item[OBJECT]
+            if name == "onfalse" or name == "ontrue":
+                # For these, we need to go "down one level" for our data
+                tup = item[SUBLIST][0]
+                dict[name] = (tup[LEFT],tup[RIGHT])
+            else:
+                dict[name] = (item[LEFT],item[RIGHT])
+
+        # Start with the identifier
+        left,right = dict["identifier"]
+        self.name = self.text[left:right]
+
+        # Actually, we don't want the F and T jumps explicit if not
+        # given, since we mustn't output them for a single tuple if
+        # they're not given (so they can be "added in" later on)
+        if dict["onfalse"]:
+            left,right = dict["onfalse"]
+            self.onfalse = self.text[left:right]
+        else:
+            self.onfalse = None                # "MatchFail"
+        if dict["ontrue"]:
+            left,right = dict["ontrue"]
+            self.ontrue = self.text[left:right]
+        else:
+            self.ontrue = None                 # "next"
+
+    def only_in_block(self):
+        """Return true if we can only occur inside a block."""
+        return 1
+
+    def resolve_labels(self,block):
+        """Called to resolve any labels use in this line.
+
+        block -- the block that contains us
+        """
+        if self.onfalse:
+            self.onfalse = block.translate_label(self.onfalse,self)
+        if self.ontrue:
+            self.ontrue  = block.translate_label(self.ontrue,self)
+
+    def _write_text(self,stream,block):
+        """Write out the main tuple text.
+
+        stream  -- an object with a "write" method, e.g., a file
+        block   -- used to pass the containing Block down to lines
+                   within a block, or None if we're not in a block
+
+        It returns the number of characters written, or -1 if we had
+        an error.
+        """
+
+        if not self.onfalse and not self.ontrue:
+            stream.write("%s"%self.name)
+            length = len(self.name)
+        else:
+            # Make a feeble attempt to cause successive such lines to
+            # look neater, by aligning the "+" signs (if we output them)
+            stream.write("%-15s + ("%(self.name))
+            length = max(len(self.name),15) + 4
+            if self.ontrue and self.onfalse:
+                stream.write("%s,%s)"%(self.onfalse,self.ontrue))
+                length = length + len(self.onfalse) + len(self.ontrue) + 2
+            elif self.ontrue:
+                stream.write("MatchFail,%s)"%(self.ontrue))
+                length = length + len(self.ontrue) + 11
+            else:
+                # Don't forget that comma to make this a tuple!
+                stream.write("%s,)"%(self.onfalse))
+                length = length + len(self.onfalse) + 1
+
+        if not self.is_last:
+            stream.write(",")
+            length = length + 1
+
+        return length
+
+\f
+# ------------------------------------------------------------
+class JumpToLine(ContentLine):
+    """A line containing "Jump To <label>"
+
+    Contains:
+
+        name    -- the name/identifier
+        onfalse -- the target (which is technically an "on false" jump)
+    """
+
+    def __init__(self,lineno,indent_str,tagtuple,comment,text):
+        """Instantiate a JumpLine.
+
+            Jump To <label>
+
+        The content of the tagtuple is:
+        
+            ('jumpto',left,right,[
+               ('target',left,right,[
+                 ('tgt',left,right,None)
+               ]),
+             ])
+        """
+
+        ContentLine.__init__(self,lineno,indent_str,tagtuple,comment,text)
+
+        tup = self.tagtuple[SUBLIST][0]
+        self.onfalse = self.text[tup[LEFT]:tup[RIGHT]]
+
+    def only_in_block(self):
+        """Return true if we can only occur inside a block."""
+        return 1
+
+    def resolve_labels(self,block):
+        """Called to resolve any labels use in this line.
+
+        block -- the block that contains us
+        """
+        self.onfalse = block.translate_label(self.onfalse,self)
+
+    def _write_text(self,stream,block):
+        """Write out the main tuple text.
+
+        stream  -- an object with a "write" method, e.g., a file
+        block   -- used to pass the containing Block down to lines
+                   within a block, or None if we're not in a block
+
+        It returns the number of characters written, or -1 if we had
+        an error.
+        """
+
+        stream.write("(None,Jump,To,%s)"%(self.onfalse))
+        length = len(self.onfalse) + 15
+
+        if not self.is_last:
+            stream.write(",")
+            length = length + 1
+
+        return length
+
+\f
+# ------------------------------------------------------------
+class BadTableBlockLine(TableBlockLine):
+    """We think they MEANT this to be a table block line."""
+
+    def __init__(self,lineno,indent_str,tagtuple,comment,text):
+        """Instantiate a BadTableBlockLine.
+
+        For instance:
+
+            "fred" = Table:
+            Table:
+        """
+        TableBlockLine.__init__(self,lineno,indent_str,tagtuple,comment,text)
+        self.error("Suspected missing 'is' before the colon\n"
+                   "pretending it's there")
+
+\f
+# ------------------------------------------------------------
+class BadTupleLine(TupleLine):
+    """We think they MEANT this to be a tuple line."""
+
+    def __init__(self,lineno,indent_str,tagtuple,comment,text):
+        """Instantiate a BadTupleLine.
+
+        For instance:
+
+            "fred" = IsIn "abc"
+        """
+        TupleLine.__init__(self,lineno,indent_str,tagtuple,comment,text)
+        self.error("Suspected missing '=' between tag object and command\n"
+                   "pretending it's there")
+
+\f
+# ------------------------------------------------------------
+class Block(ContentLine):
+    """This class represents a "block".
+
+    A "block" is a section of code which starts with a line ending in
+    a colon (":"), with the next line and subsequent lines ("in" the
+    block) having an extra indent. The block ends when a dedent is
+    encountered.
+
+    Each instance "eats" lines from the input until (if) it finds the first
+    "sub" block.  That then "eats" lines until it finds its own end, and
+    then hands control back to the first instance, which does the same thing
+    again, and so on.
+
+    Note that we "pretend" to be a content line - it is convenient to
+    look like a line class, so that line processing can cope with us,
+    and indeed what we do is "pretend" to be a clone of our start line
+    with some extra information...
+
+    Contains:
+        startline    -- the line that "introduces" this block
+        items        -- a list of the lines and blocks within this block
+        label_dict   -- a dictionary of {label name : line index}
+        inner_indent -- the indentation of our "inner" lines
+        outer        -- true if we are an "outer" block
+                        (i.e., not contained within another block)
+    """
+
+    def __init__(self,startline=None,outer=0,file=None):
+        """Instantiate a new block.
+
+        startline -- the line that introduces this block
+        outer     -- true if we are an outer block
+        file      -- the "file" we're reading lines from
+        """
+
+        # Pretend to be our own startline (as a generic)
+        ContentLine.__init__(self,
+                             startline.lineno,startline.indent_str,
+                             startline.tagtuple,startline.comment,
+                             startline.text)
+
+        # But also remember the specifics of the startline
+        self.startline = startline
+
+        # We "fudge" our class name
+        self.class_name = self._block_class_name(startline)
+
+        self.outer    = outer
+        self.file     = file
+
+        # If we're an outer table block, do we have a tagobj?
+        if self.startline.class_name == "TableBlockLine" and outer:
+            if not self.startline.got_tagobj():
+                raise NoIdentifier,\
+                      "Tag table at line %d is not assigned to a variable"%\
+                      (self.lineno)
+            elif self.startline.is_subtable:
+                raise OutsideError,\
+                      "SubTable is not allowed outside a block at line %d"%\
+                      (self.lineno)
+
+        self.items    = []     # all lines within this block
+        self.business = []     # just those that are "our business"
+        self.label_dict = {}    # remember our labels and their locations
+        self.next_index = 0     # 'business' line indices
+        self.inner_indent = None
+
+        # Eat lines until we reach the end of our block...
+        if DEBUGGING: print "%sStart %s"%(self.indent_str,self.class_name)
+        self._eat_lines()
+        self._end_block()
+
+    def _block_class_name(self,startline):
+        """Return a representation of the class name."""
+
+        full_name = "%s"%self.__class__
+        bits = string.split(full_name,".")
+        return "%s/%s"%(bits[-1],startline.class_name)
+
+    def _eat_lines(self):
+        """Eat lines until we run out of block..."""
+
+        while 1:
+            try:
+                nextline = self.file.next()
+            except EOFError:
+                return
+
+            # Check the indentation makes sense...
+            if self.inner_indent:
+                # We already know how much our block is indented
+                # - is this line part of the block?
+                if nextline.indent < self.inner_indent:
+                    # Apparently a dedent - is it what we expect?
+                    if nextline.indent <= self.indent:
+                        # Unread that line - it isn't one of ours!
+                        self.file.unget()
+                        return
+                    else:
+                        raise IndentError,\
+                              "Line %d (%s) is indented less than the previous "\
+                              "line, but its indentation doesn't match the "\
+                              "start of the block at line %d"%\
+                              (nextline.lineno,nextline.class_name,self.lineno)
+                elif nextline.indent > self.inner_indent:
+                    # A spurious indent
+                    # (note that doing this stops us from coping with,
+                    #  for instance, things in (..), but then we also don't
+                    #  cope with any form of continued line, or lots of other
+                    #  things, so let's not worry too much for now!)
+                    raise IndentError,\
+                          "Line %d (%s) is indented more than the previous line"%\
+                          (nextline.lineno,nextline.class_name)
+            else:
+                # This is the first line of the (inside of) the block
+                # - check its indentation makes sense...
+                self.inner_indent = nextline.indent
+                if self.inner_indent <= self.indent:
+                    raise IndentError,\
+                          "Line %d (%s) should be indented more than line %d (%s)"%\
+                          (nextline.lineno,nextline.class_name,
+                           self.lineno,self.startline.class_name)
+
+            # Is it a line or the start of another block?
+            if nextline.starts_block():
+                # Heh - it's the start of an inner block - add it
+                # (remember that instantiating it causes it to
+                #  "eat" the lines that belong to it)
+                self.items.append(Block(startline=nextline,
+                                        outer=0,file=self.file))
+            else:
+                self.items.append(nextline)
+
+    def _end_block(self):
+        """End our block"""
+
+        if DEBUGGING: print "%sEnd %s"%(self.indent_str,self.class_name)
+
+        # If we're a tuple block, we should only have one line...
+        # (that is, one "business" line)
+        if self.startline.class_name == "TupleBlockLine" and \
+           len(self.items) > 1:
+            # Are all but one of them not "our business"?
+            count = 0
+            for item in self.items:
+                if item.our_business():
+                    count = count + 1
+                    if count > 1: break
+            if count > 1:
+                self.error("Tuple declaration can only contain one 'business'"
+                           " line, not %d\n"
+                           "Assuming it's a table instead (i.e.,"
+                           "'Table is:' instead of 'is:')"%len(self.items))
+                # Can we correct this by "pretending" its a table?
+                temp = TableBlockLine(self.startline.lineno,
+                                      self.startline.indent_str,
+                                      ("error",self.startline.name),
+                                      self.startline.comment,
+                                      self.text)
+                self.startline = temp
+
+        # We've now got all of our lines, and so we can go back over
+        # them, expanding out any IF blocks (whose content is actually
+        # within this block's scope, so who need to have their labels
+        # (come from or go to) in that scope), working out the label
+        # indices, and so on...
+        # This uses "next_index" to calculate the indices of business
+        # lines (needed for label calculation), and also populates the
+        # "business" list with just the items that are "our_business()"
+        if DEBUGGING:
+            print "Expanding IF blocks, sorting out labels, etc."
+
+        temp       = self.items
+        self.items = []
+        for item in temp:
+            if item.class_name == "Block/IfBlockLine":
+                self._add(item.startline)
+                for thing in item.items:
+                    self._add(thing)
+            else:
+                self._add(item)
+
+        # Go back through our contents and resolve any labels
+        if DEBUGGING:
+            print "%s...processing labels (next_index=%d)"%(self.indent_str,
+                                                            self.next_index)
+        self.startline.resolve_labels(self)
+        # If we're an IF block, we mustn't try to resolve our component
+        # lines' labels, as they're actually in our parent block's scope...
+        if self.startline.class_name != "IfBlockLine":
+            for item in self.items:
+                item.resolve_labels(self)
+
+        # If we're in a block that wants to suppress the comma at the
+        # end of the last item in that block, tell the last item so...
+        # (this is debatable for [Bad]TableBlockLine - it might be
+        # better to leave the last comma there - so we have an option
+        # to determine it...
+        if self.startline.class_name == "TupleBlockLine" or \
+           (not WANT_LAST_COMMA and \
+            (self.startline.class_name == "TableBlockLine" or \
+             self.startline.class_name == "BadTableBlockLine")):
+            if len(self.business) > 0:
+                self.business[-1].is_last = 1
+
+    def _add(self,item):
+        """Add a line or block to our list of items.
+
+        item -- the Line or Block instance to add
+
+        NB: Also adds it to our "business" list if it is our business
+            (and not a label)
+        """
+
+        if item.class_name == "LabelLine":
+            self.label_dict[item.label] = self.next_index
+            if DEBUGGING:
+                print "%sadd [%2d] %s"%(item.indent_str,self.next_index,item)
+            # Might as well give it the index it is labelling
+            item.index = self.next_index
+            self.items.append(item)
+        elif item.our_business():
+            item.index = self.next_index
+            self.items.append(item)
+            self.business.append(item)
+            if DEBUGGING:
+                print "%sadd  %2d  %s"%(item.indent_str,
+                                            self.next_index,item)
+            self.next_index = self.next_index + 1
+        else:
+            # It's not something we can assign a sensible index to, so don't
+            if DEBUGGING:
+                print "%sadd  xx  %s"%(item.indent_str,item)
+            self.items.append(item)
+
+    def translate_label(self,label,line):
+        """Given a label, return its translation.
+
+        label -- either a string of the form "<...>" to look up in
+                 this block's label dictionary, or one of the special
+                 targets (e.g., next, MatchOk, etc.)
+        line  -- the line using this label
+
+        Reports an error and just returns the original "label" if it
+        can't translate it.
+        """
+        if self.label_dict.has_key(label):
+            # How far do we have to jump?
+            offset = self.label_dict[label] - line.index
+            return "%+d"%offset
+        elif label == "MatchOk":
+            return "MatchOk"
+        elif label == "MatchOK":
+            line.warning("Label 'MatchOK' should be spelt 'MatchOk'"
+                         " (using 'MatchOk')")
+            return "MatchOk"
+        elif label == "MatchFail":
+            return "MatchFail"
+        elif label == "next":
+            return "+1"
+        elif label == "previous":
+            return "-1"
+        elif label == "repeat":
+            return "0"
+        else:
+            line.error("Undefined label '%s'"%label)
+            return label
+
+    def expand(self,stream,block=None):
+        """Write out the expanded equivalent of ourselves.
+
+        stream  -- an object with a "write" method, e.g., a file
+        block   -- if we're in a block, this is it, otherwise None
+        """
+
+        self.startline.expand(stream,block=block)
+        for item in self.items[:-1]:
+            item.expand(stream,block=self)
+
+        self.items[-1].expand(stream,block=self)
+
+        # Deal with closing any block parentheses
+        if self.startline.class_name == "TableBlockLine" or \
+           self.startline.class_name == "BadTableBlockLine":
+            if DEBUGGING:
+                stream.write("Line ...: ")
+
+            stream.write(self.indent_str)
+            if self.outer:
+                # Outer block - just close it
+                stream.write(")")
+            else:
+                # Inner block is a Table block, and we need to close both
+                # the tuple-of-tuples, and also the tuple containing the
+                # Table command...
+                stream.write("))")
+            if not self.is_last:
+                stream.write(",")
+            stream.write("\n")
+
+\f
+# ------------------------------------------------------------
+class File:
+    """This is the class that holds our processed data
+
+    Contains:
+        lines   -- a list of the line instances for each "line" in our text
+        items   -- a list of lines and BLOCKs
+    """
+
+    def __init__(self,tagtuples,text):
+        """Instantiate a File
+
+        tagtuples -- the list of mxTextTools tag tuples generated by
+                     parsing the data in "text"
+        text      -- the text we parsed
+        """
+
+        self.text      = text
+        self.tagtuples = tagtuples
+
+        # Assemble our list of lines
+        print "Pass 1: assembling lines"
+        if DEBUGGING: print "~~~~~~~~~~~~~~~~~~~~~~~~"
+        self.lines = []
+        lineno     = 0
+        prevline   = None
+        for tagtuple in tagtuples:
+            lineno = lineno + 1
+            thisline = LineFactory(lineno,tagtuple,text)
+
+            if prevline:
+                prevline.next_indent = thisline.indent
+
+            self.lines.append(thisline)
+            prevline = thisline
+
+        #if DEBUGGING: print
+
+        # The indentation of an empty line is taken to be the same
+        # as the indentation of the first following non-empty line
+        # The easiest way to do that is to work backwards through
+        # the list (is it better to take a copy and reverse THAT,
+        # or to reverse our original list twice?)
+        print "Pass 2: sorting out indentation of empty lines"
+        if DEBUGGING: print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+        revlist = self.lines[:]
+        revlist.reverse()
+        indent = 0
+        for line in revlist:
+            if line.class_name == "EmptyLine":
+                line.change_indent(indent)
+            else:
+                indent = line.indent
+        del revlist
+
+        if DEBUGGING:
+            print "Pass 2.5 - the contents of those lines..."
+            print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+            for line in self.lines:
+                print "Line %d %s"%(line.lineno,line.class_name)
+                #print_tuples([line.tagtuple],self.text,"  ")
+            print
+
+        # Now we need to assemble blocks
+        print "Pass 3: assembling blocks"
+        if DEBUGGING: print "~~~~~~~~~~~~~~~~~~~~~~~~~"
+        self.reset()
+        self.items = []
+
+        while 1:
+            try:
+                item = self.next()
+            except EOFError:
+                break
+
+            if DEBUGGING:
+                print "%sTOP    %s"%(item.indent_str,item)
+            if item.starts_block():
+                block = Block(startline=item,outer=1,file=self)
+                self.items.append(block)
+                block.is_last = 1   # Everything at outer level is "last"
+            else:
+                if item.only_in_block():
+                    item.error("This line is not allowed outside a block "
+                               "- continuing anyway")
+                self.items.append(item)
+                if item.our_business():
+                    item.is_last = 1    # Everything at outer level is "last"
+
+        if DEBUGGING: print
+                
+
+    def reset(self):
+        """Ensure that the next call of "nextline" returns the first line."""
+        self.index = -1
+
+    def unget(self):
+        """Unread the current line."""
+        self.index = self.index - 1
+        if self.index < 0:
+            self.index = 0
+
+    def next(self):
+        """Retrieve the next line from the list of lines in this "file".
+
+        Raises EOFError if there is no next line (i.e., "end of file")
+        """
+        self.index = self.index + 1
+        try:
+            return self.lines[self.index]
+        except IndexError:
+            # leave the index off the end, so we get EOF again if
+            # we're called again - but there's no point courting overflow...
+            self.index = self.index -1
+            raise EOFError
+
+    def expand(self,stream):
+        """Expand out the result."""
+        for item in self.items:
+            item.expand(stream)
+
+\f
+# ------------------------------------------------------------
+def print_tuples(tuples,text,indent=""):
+    """Print out a list of tuples in a neat form
+
+    tuples -- our tuple list
+    text   -- the text it tags
+    indent -- our current indentation
+    """
+
+    # Tuples are of the form:
+    # (object,left_index,right_index,sublist)
+
+    for obj,left,right,sub in tuples:
+        if sub:
+            print "%s%s"%(indent,obj)
+            print_tuples(sub,text,indent+"  ")
+        else:
+            # Terminal node - show the actual text we've tagged!
+            print "%s%s = %s"%(indent,obj,`text[left:right]`)
+
+\f
+# ------------------------------------------------------------
+def print_text(text):
+    """Print out text with line numbers."""
+    lines = string.split(text,"\n")
+    lineno = 0
+
+    print "Original text"
+    print "============="
+    for line in lines:
+        lineno = lineno + 1
+        print "%3d: %s"%(lineno,`line`)
+
+\f
+# ------------------------------------------------------------
+def print_usage(argv0):
+    #script_name = string.split(argv0, os.sep)[-1]
+    #print __doc__%(script_name)
+    print argv0
+    print __doc__
+
+\f
+# ------------------------------------------------------------
+def show_tup(indent,nn,tup):
+    ll = []
+    for item in tup:
+        if type(item) == type((1,)) or type(item) == type([]):
+            ll.append("(..)")
+        else:
+            ll.append(`item`)
+
+    if nn:
+        print "%s%d: (%s)"%(indent,nn,string.join(ll,","))
+    else:
+        print "%s(%s)"%(indent,string.join(ll,","))
+
+def comp_sub(indent,one,two):
+    len1 = len(one)
+    if len(two) != len(one):
+        print "%sTuple lengths differ - 1:%d, 2:%d"%(indent,len1,len(two))
+        show_tup(indent,1,one)
+        show_tup(indent,2,two)
+        # If this is all, let's try to continue...
+        len1 = min(len1,len(two))
+
+    for count in range(len1):
+        a = one[count]
+        b = two[count]
+        if type(a) != type(b):
+            print "%sValue types differ, item %d: 1:%s, 2:%s"%(indent,count,
+                                                               type(a),type(b))
+            show_tupe(indent,1,one)
+            show_tupe(indent2,two)
+            return 0
+        if type(a) == type((1,)) or type(a) == type([]):
+            if not comp_sub(indent+"  ",a,b):
+                # They're the same at this level, so show only one...
+                show_tup(indent,0,one)
+                return 0
+        else:
+            if a != b:
+                print "%sValues differ, item %d: 1:%s, 2:%s"%(indent,count,
+                                                              `a`,`b`)
+                show_tup(indent,1,one)
+                show_tup(indent,2,two)
+                return 0
+    return 1
+
+def compare_tagtables(one,two):
+    # Each table is made up of tuples of the form
+    # (tagobj,action,arg,onfalse,ontrue)
+    # but if action is Table or SubTable then arg may be a tuple
+    # itself...
+    if comp_sub("",one,two):
+        print "They appear to be the same"
+
+\f
+# ------------------------------------------------------------
+def main():
+    """Used to test the module."""
+
+    debug_pytag  = DEFAULT_DEBUG
+    use_pytag    = DEFAULT_PYTAG
+    use_stdout   = 0
+    import_tags  = 0
+    force_overwrite = 0
+    compare_tables  = 0
+
+    if os.name == "posix":
+        use_testdata = 0
+    else:
+        # At home...
+        use_testdata = 1
+        use_stdout   = 1
+        global DEBUGGING
+        DEBUGGING    = 0
+
+    # Do we have command line arguments?
+    arg_list = sys.argv[1:]
+    args = []
+
+    while 1:
+        if len(arg_list) == 0:
+            break
+
+        word = arg_list[0]
+
+        if word == "-pytag":
+            use_pytag = 1
+        elif word == "-debug":
+            debug_pytag = 1
+        elif word == "-stdout":
+            use_stdout = 1
+        elif word == "-force":
+            force_overwrite = 1
+        elif word == "-import":
+            import_tags = 1
+        elif word == "-compare":
+            compare_tables = 1
+        elif word == "-diag":
+            global DEBUGGING
+            DEBUGGING = 1
+        elif word == "-test":
+            use_testdata = 1
+            use_stdout = 1
+        elif word == "-help":
+            print_usage(sys.argv[0])
+            return
+        elif word == "-version":
+            print "Version:",__version__
+            return
+        elif word == "-history":
+            print "History:"
+            print __history__
+            return
+        else:
+            args.append(word)
+
+        arg_list = arg_list[1:]
+        continue
+
+    if compare_tables:
+        from Translate_tags import t_file
+        i_file = define_tagtable()
+        print "Comparing internal table (1) against external (2)"
+        compare_tagtables(i_file,t_file)
+        return
+
+    if not use_testdata and (not args or len(args) > 2):
+        print_usage(sys.argv[0])
+        return
+
+    if not use_testdata:
+        infile = args[0]
+
+    if import_tags:
+        print "Importing tag table definition"
+        from Translate_tags import t_file
+    else:
+        print "Using internal tag table definition"
+        t_file = define_tagtable()
+
+    if use_stdout:
+        outfile = "standard output"
+    elif len(args) > 1:
+        outfile = args[1]
+    else:
+        base,ext = os.path.splitext(infile)
+        if ext != ".py":
+            outfile = base + ".py"
+        else:
+            print "Input file has extension .py so won't guess"\
+                  " an output file"
+            return
+
+    if outfile != "standard output":
+        if outfile == infile:
+            print "The output file is the same as the input file"
+            print "Refusing to overwrite %s"%outfile
+            return
+        elif os.path.exists(outfile):
+            if force_overwrite:
+                print "Output file %s already exists"\
+                      " - overwriting it"%outfile
+            else:
+                print "Output file %s already exists"%outfile
+                return
+
+    # Read the input file
+    if use_testdata:
+        if DEBUGGING: print
+        print "Using test data"
+        if DEBUGGING: print "==============="
+        text = test_data
+    else:
+        if DEBUGGING: print
+        print "Reading text from %s"%infile
+        if DEBUGGING: print "=================="+"="*len(infile)
+        file = open(infile,"r")
+        text = file.read()
+        file.close()
+
+    # Show what we are trying to parse
+    if DEBUGGING or use_testdata:
+        print
+        print_text(text)
+
+    # Tag it
+    print
+    print "Tagging text"
+    if DEBUGGING: print "============"
+    if use_pytag:
+        import pytag
+        pytag.set_verbosity(0)
+        if debug_pytag:
+            pytag.set_verbosity(1)
+            pytag.use_debugger()
+        result,taglist,next = pytag.pytag(text,t_file)
+    else:
+        timer = TextTools._timer()
+        timer.start()
+        result, taglist, next = tag(text,t_file)
+        #result, taglist, next = tag(text,t_file,0,len(text),taglist)
+        print "Tagging took",timer.stop()[0],"seconds"
+
+    # Now print out the result of the tagging
+    print
+    print "Manipulating tagged data"
+    if DEBUGGING: print "========================"
+    tagfile = File(taglist,text)
+
+    print
+    print "Writing translation to %s"%outfile
+    if DEBUGGING: print "======================="+"="*len(outfile)
+
+    # Open the output file, if necessary
+    if use_stdout:
+        file = sys.stdout
+    else:
+        file = open(outfile,"w")
+
+    tagfile.expand(file)
+
+\f
+# ------------------------------------------------------------
+if __name__ == '__main__':
+    main()
diff --git a/convert/Parserv5/__init__.py b/convert/Parserv5/__init__.py
new file mode 100644 (file)
index 0000000..96e6d4d
--- /dev/null
@@ -0,0 +1,16 @@
+try:
+   import mx.TextTools
+   import sys
+   sys.modules['TextTools']=mx.TextTools
+except:
+   # Le package mx n'est pas installé. On essaie d'importer
+   # directement TextTools au cas ou
+   try:
+      import TextTools
+   except:
+      # Aucun des deux packages n'est installé
+      print """ Le package mx.TextTools ou TextTools doit etre
+   installé pour pouvoir relire des fichiers de commandes 
+   au format Aster V5
+   voir : http://www.lemburg.com/python/mxExtensions.html
+   """
diff --git a/convert/Parserv5/conv.py b/convert/Parserv5/conv.py
new file mode 100644 (file)
index 0000000..8f9621c
--- /dev/null
@@ -0,0 +1,463 @@
+#@ MODIF conv Parsers  DATE 17/10/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+import sys,string
+import TextTools
+from tables import ERRORS
+
+#
+__version__="$Name: V1_1p1 $"
+__Id__="$Id: conv.py,v 1.1.1.1 2001/12/04 15:38:23 eficas Exp $"
+#
+
+Keywords=('MAILLE_1','MAILLE_2','MAILLE_ESCL','MAILLE_FOND','MAILLE_MAIT','MAILLE_ORIG','MAILLE',
+          'NOEUD', 'NOEUD_1','NOEUD_2','NOEUD_INIT','NOEUD_FIN', 'NOEUD_ORIG','NOEUD_REFE','NOEUD_EXTR',
+          'NOEUD_I', 'NOEUD_J','NOEUD_CHOC','NOEUD_ANCRAGE','NOEUD_CENTRE','NOEUD_CMP','NOEUD_DOUBLE',
+          'NOEUD_ESCL','NOEUD_FOND','NOEUD_PARA','NOEUD_POIN_TANG',
+          'GROUP_MA', 'GROUP_MA_1','GROUP_MA_2','GROUP_MA_INT','GROUP_MA_EXT', 'GROUP_MA_ORIG',
+          'GROUP_MA_BORD','GROUP_MA_INTE','GROUP_MA_FLUIDE', 'GROUP_MA_INTERF','GROUP_MA_BETON',
+          'GROUP_MA_ESCL','GROUP_MA_FINAL','GROUP_MA_FLU_SOL','GROUP_MA_FLU_STR','GROUP_MA_FOND',
+          'GROUP_MA_MAIT','GROUP_MA_RADIER','GROUP_MA_SOL_SOL','GROUP_MA_INIT',
+          'GROUP_NO', 'GROUP_NO_1','GROUP_NO_2','GROUP_NO_EXT', 'GROUP_NO_ORIG','GROUP_NO_CHOC',
+          'GROUP_NO_ANCRAGE','GROUP_NO_CENTRE','GROUP_NO_ESCL','GROUP_NO_EXTR','GROUP_NO_FIN',
+          'GROUP_NO_FOND','GROUP_NO_INIT','GROUP_NO_POIN_TG','GROUP_NO_RADIER',
+          'NOM','NOM_GROUP_MA',
+          'SANS_NOEUD', 'SANS_GROUP_NO',
+          'INTERSEC', 'UNION','DIFFE',
+          'VECT_GRNO_ORIG','VECT_GRNO_EXTR',
+          'VALE_CO'
+         )
+
+liste_macros=('MACRO_MATR_ASSE','MACRO_ELAS_MULT','MACR_ASCOUF_MAIL','MACR_ASCOUF_CALC','MACR_ASPIC_MAIL',
+              'MACR_ASPIC_CALC','MACRO_MATR_AJOU','MACRO_ELAS_MULT','MACRO_MODE_MECA','MACRO_PROJ_BASE',
+              'MACR_ADAP_MAIL',
+              )
+liste_concepts_produits=[]
+commande_courante=''
+
+def text_nom_ope(text,tags,left,right):
+  global commande_courante
+  if len(tags) :
+    tag,l,r,subtags=tags[0]
+    commande_courante=text[left:l]
+    return text[left:l]+'('+text[l:r]
+  else :
+    commande_courante=text[left:right]
+    return text[left:right]+'('
+    
+def text_reuse(text,tags):
+  s=''
+  for tag,l,r,subtags in tags:
+    if tag == 'ident' :
+      sd=text[l:r]
+      s=s+ sd
+    elif tag == 'nom_ope' : s=s+ '='+text_nom_ope(text,subtags,l,r)
+    elif tag == 'affe' : 
+      s=s+ '='+text_affe(text,subtags)
+    elif tag == 'comm' :
+      if commande_courante in liste_macros:
+        s=s+'reuse='+sd+','+text_macro(text,subtags)+')'
+      else:
+        s=s+'reuse='+sd+','+text_com(text,subtags)+')'
+    else:pass
+  s=s+'\n'
+  return s
+
+def text_noreuse(text,tags):
+  global commande_courante
+  s=''
+  for tag,l,r,subtags in tags:
+    if tag == 'ident' :
+      sd=text[l:r]
+      s=s+ text[l:r]
+    elif tag == 'nom_ope' :
+      s=s+ '='+ text_nom_ope(text,subtags,l,r)
+    elif tag == 'affe' :
+      liste_concepts_produits.append(sd)
+      s=s+ '='+text_affe(text,subtags)
+    elif tag == 'comm' :
+      if oldtag=='ident':
+        if sd in liste_macros:
+          s=s+'('+text_macro(text,subtags)+')'
+        else:
+          s=s+'('+text_com(text,subtags)+')'
+      else:
+        liste_concepts_produits.append(sd)
+        if commande_courante in liste_macros:
+          s=s+text_macro(text,subtags)+')'
+        else:
+          s=s+text_com(text,subtags)+')'
+    else:pass
+    oldtag=tag
+  s=s+'\n'
+  return s
+
+def list_mc(lmc,mcs):
+  s=''
+  for k in lmc:
+    v=mcs[k]
+    if len(v) ==1:
+      va,c=v[0]
+      s=s+c+k+'='+va+','
+    elif len(v) > 1:
+      s=s+k+'=('
+      for va,c in v:
+        s=s+string.join((c,va,','),'')
+      s=s[:-1]+'),'
+  s=s[:-1]
+  return s
+
+def text_com(text,tags):
+  mcs={}
+  lmc=[]
+  currid=None
+  comment=''
+  for tag,l,r,subtags in tags:
+    if tag == 'ident' :
+      currid=text[l:r]
+      if not mcs.has_key(currid):
+        mcs[currid]=[]
+        lmc.append(currid)
+    elif tag == 'mcf':
+      ll=text_mcf(text,subtags)
+      mcs[currid].append((ll,comment))
+      comment=''
+    elif tag == 'num' :
+      a=string.replace(text[l:r],'D','E')
+      mcs[currid].append((a,comment))
+      comment=''
+    elif tag == 'CPLX' :
+      a=text_cplx(text,text[l:r],subtags)
+      mcs[currid].append((a,comment))
+      comment=''
+    elif tag == 'arg' :
+      a=''
+      if currid in Keywords :
+        # FR : (SGDG) il faut tester s'il n'y a pas déjà des cotes !!!
+        if text[l]!="'" and text[r-1]!="'":
+          a=a+"'"+text[l:r]+"'"
+        else:
+          a=a+text[l:r]
+      else:
+        a=a+text[l:r]
+      mcs[currid].append((a,comment))
+      comment=''
+    elif tag == 'EVAL' :
+      a=text_eval(text,subtags)
+      mcs[currid].append((a,comment))
+      comment=''
+    elif tag == 'comment' :
+      comment=comment + '#'+text[l+1:r]
+    elif tag == 'comments' :
+      comment=comment + text[l:r]
+    elif tag == 'larg' :
+      if currid in Keywords:mcs[currid].append((text_larg2(text,subtags),comment))
+      else:mcs[currid].append((text_larg(text,subtags),comment))
+      comment=''
+    else :pass
+  s=list_mc(lmc,mcs)
+  if comment :s=s+comment
+  return s
+
+def text_macro(text,tags):
+  mcs={}
+  lmc=[]
+  currid=None
+  comment=''
+  for tag,l,r,subtags in tags:
+    if tag == 'ident' :
+      currid=text[l:r]
+      if not mcs.has_key(currid):
+        mcs[currid]=[]
+        lmc.append(currid)
+    elif tag == 'mcf':
+      ll=text_macro_mcf(text,subtags)
+      mcs[currid].append((ll,comment))
+      comment=''
+    elif tag == 'num' :
+      a=string.replace(text[l:r],'D','E')
+      mcs[currid].append((a,comment))
+      comment=''
+    elif tag == 'CPLX' :
+      a=text_cplx(text,text[l:r],subtags)
+      mcs[currid].append((a,comment))
+      comment=''
+    elif tag == 'arg' :
+      a=''
+      if text[l] == "'":
+        # FR : (SGDG) il faut tester s'il n'y a pas déjà des cotes !!!
+        a=a+text[l:r]
+      elif currid in Keywords :
+        a=a+"'"+text[l:r]+"'"
+      else:
+        sd=text[l:r]
+        if sd not in liste_concepts_produits:
+          # Il s agit d un concept produit par la macro mais situe à droite de =
+          a=a+'CO("'+sd+'")'
+          liste_concepts_produits.append(sd)
+        else:
+          a=a+sd
+      mcs[currid].append((a,comment))
+      comment=''
+    elif tag == 'EVAL' :
+      a=text_eval(text,subtags)
+      mcs[currid].append((a,comment))
+      comment=''
+    elif tag == 'comment' :
+      comment=comment + '#'+text[l+1:r]
+    elif tag == 'comments' :
+      comment=comment + text[l:r]
+    elif tag == 'larg' :
+      if currid in Keywords:mcs[currid].append((text_larg2(text,subtags),comment))
+      else:mcs[currid].append((text_larg(text,subtags),comment))
+      comment=''
+    else :pass
+  s=list_mc(lmc,mcs)
+  if comment :s=s+comment
+  return s
+
+def comments_text(text):
+  l=string.replace(text,'%','#')
+  return l
+
+def text_eval(text,tags):
+  # on retourne l expression sans conversion dans un objet EVAL et entre quotes
+  for tag,l,r,subtags in tags:
+    if tag == 'vexpr':
+      s='EVAL("""'+text[l:r]+'""")'
+      return s
+  return ''
+
+def text_mcf(text,tags):
+  s='_F( '
+  comment=''
+  for tag,l,r,subtags in tags:
+    if tag == 'ident' :
+      s=s+comment
+      comment=''
+      currid=text[l:r]
+      s=s+ currid +' = '
+    elif tag == 'arg' :
+      if currid in Keywords :
+        # FR : (SGDG) il faut tester s'il n'y a pas déjà des cotes !!!
+        if text[l]!="'" and text[r-1]!="'":
+          s=s+"'"+text[l:r]+"',"
+        else:
+          s=s+text[l:r]+","
+      else:s=s+text[l:r]+","
+    elif tag == 'num' :
+      s=s+string.replace(text[l:r],'D','E')+','
+    elif tag == 'CPLX' :
+      s=s+text_cplx(text,text[l:r],subtags)+','
+    elif tag == 'EVAL' :
+      s=s+text_eval(text,subtags)+','
+    elif tag == 'larg' :
+      if currid in Keywords:s=s+text_larg2(text,subtags)+','
+      else: s=s+text_larg(text,subtags)+','
+    elif tag == 'comments' :
+      comment=comment+text[l:r]
+  if comment != '':
+    s=s+comment
+  return s+')'
+
+def text_macro_mcf(text,tags):
+  s='_F( '
+  comment=''
+  for tag,l,r,subtags in tags:
+    if tag == 'ident' :
+      s=s+comment
+      currid=text[l:r]
+      s=s+ currid +' = '
+    elif tag == 'arg' :
+      if text[l] == "'":
+        # FR : (SGDG) il faut tester s'il n'y a pas déjà des cotes !!!
+        s=s+text[l:r]+","
+      elif currid in Keywords :
+        s=s+"'"+text[l:r]+"',"
+      else:
+        sd=text[l:r]
+        if sd not in liste_concepts_produits:
+          # Il s agit d un concept produit par la macro mais situe à droite de =
+          s=s+'CO("'+sd+'"),'
+          liste_concepts_produits.append(sd)
+        else:
+          s=s+sd+','
+      comment=''
+    elif tag == 'num' :
+      s=s+string.replace(text[l:r],'D','E')+','
+    elif tag == 'CPLX' :
+      s=s+text_cplx(text,text[l:r],subtags)+','
+      comment=''
+    elif tag == 'EVAL' :
+      s=s+text_eval(text,subtags)+','
+      comment=''
+    elif tag == 'larg' :
+      if currid in Keywords:s=s+text_larg2(text,subtags)+','
+      else: s=s+text_larg(text,subtags)+','
+      comment=''
+    elif tag == 'comments' :
+      comment=comment+text[l:r]
+  return s[:-1]+')'
+
+def text_cplx(texte,text,tags):
+  """ Retourne une chaîne de caractères représentant un complexe """
+  s="('"+text[0:2]+"'," #text[0:2] = RI ou MP
+  for tag,l,r,subtags in tags:
+    if tag == 'num' :
+      s=s+string.replace(texte[l:r],'D','E')+','
+  s=s+')'
+  return s
+  
+def text_larg2(text,tags):
+  """ Pareil que text_larg mais ajoute des cotes autour des arg """
+  ll=[]
+  for tag,l,r,subtags in tags:
+    if tag == 'arg' :
+      # FR : (SGDG) il faut tester le cas où les cotes sont déjà là !!!!
+      if text[l] != "'" and text[r-1] != "'":
+        ll.append( "'"+text[l:r]+"',")
+      else:
+        ll.append(text[l:r]+",")
+    elif tag == 'num' :
+      ll.append(string.replace(text[l:r],'D','E')+',')
+    elif tag == 'CPLX' :
+      ll.append(text_cplx(text,text[l:r],subtags)+',')
+    elif tag == 'comments' :
+      ll.append(text[l:r])
+  return '('+string.join(ll,'')+')'
+
+def text_larg(text,tags):
+  # Pour les listes d arguments il semble plus rapide de construire 
+  # une liste puis de faire join (ne pas exagerer : voir ajout ,)
+  ll=[]
+  for tag,l,r,subtags in tags:
+    if tag == 'arg' :
+      ll.append((text,l,r))
+      ll.append(',')
+    elif tag == 'num' :
+ # cette facon de faire est un peu plus rapide que la suivante
+      ll.append(string.replace(text[l:r],'D','E')+',')
+    elif tag == 'comments' :
+      ll.append((text,l,r))
+    elif tag == 'EVAL' :
+      ll.append(text_eval(text,subtags)+',')
+    else:
+      print "Argument ignore: ",text[l:r]
+  return '('+TextTools.join(ll,'')+')'
+
+def comment_text(text):
+  l=string.replace(text,'\n','\n#')
+  if l[-1]=='#':return '#'+l[:-1]
+  else:return '#'+l
+
+def text_affe(text,tags):
+  s=''
+  for tag,l,r,subtags in tags:
+    if tag == 'arg' :
+      s=s+text[l:r]
+    elif tag == 'EVAL' :
+      s=s+text_eval(text,subtags)
+    elif tag == 'larg' :
+      s=s+text_larg(text,subtags)
+    elif tag == 'num' :
+      s=s+string.replace(text[l:r],'D','E')
+    elif tag == 'CPLX' :
+      s=s+text_cplx(text,text[l:r],subtags)+','
+  return s
+
+def text_commande(text,tags):
+  """
+     Convertit une taglist de type commande en une chaine de caracteres
+     à la syntaxe Python représentative d'une commande
+  """
+  s=''
+  for tag,l,r,subtags in tags:
+    if tag == 'noreuse':
+      s=s+text_noreuse(text,subtags)
+    elif tag == 'reuse':s=s+text_reuse(text,subtags)
+  return s
+
+def text_formule(text,tags):
+  """
+     Convertit une taglist de type formule en une chaine de caracteres
+     à la syntaxe Python représentative d'une formule
+  """
+  s=''
+  count=0
+  typ=''
+  for tag,l,r,subtags in tags:
+    if tag == 'id':
+      if count == 0:
+        s=text[l:r]+' = FORMULE('+ty+'="""('
+      else:
+        if count > 1:s=s+','
+        s=s+typ+text[l:r]
+        typ=''
+      count = count +1
+    elif tag == 'typ':
+      typ=text[l:r]
+    elif tag == 'vexpr':
+      s=s+ ') =\n'+text[l:r]
+    elif tag == 'type':
+      ty=text[l:r]
+  return s +'""")\n'
+
+def text_comms(text,tags):
+  """
+     Convertit une taglist resultat d'un appel à TextTools.tag avec une table de type Aster
+     en une chaine de caracteres à la syntaxe Python
+  """
+  # On met la liste globale des concepts produits à zero
+  global liste_concepts_produits
+  liste_concepts_produits=[]
+
+  s=''
+  for tag,l,r,subtags in tags:
+    if tag == 'comment':
+      s=s+ '#'+text[l+1:r]
+    elif tag == 'Null':
+      s=s+ '\n'
+    elif tag == 'formule':
+      s=s+ text_formule(text,subtags)
+    elif tag == 'commande' :
+      s=s+text_commande(text,subtags)
+    else:
+      s=s+ comment_text(text[l:r])
+  return s
+
+def format_errs(text,tags):
+  s=''
+  warnings=''
+  for tag,l,r,subtags in tags:
+    if subtags:
+       err,warn=format_errs(text,subtags)
+       s=s+err
+       warnings=warnings+warn
+    if tag in ERRORS:
+       s=s+ tag+" ligne : "+`TextTools.countlines(text[:l])`+" texte erroné : "+text[l-10:l]+'?'+text[l:r]+'\n'
+    if tag == 'passline':
+       warnings=warnings+ " ligne "+`TextTools.countlines(text[:l])`+" ignorée : " +text[l:r]+'\n'
+  return s,warnings
+
+def conver(text):
+   from tables import aster_script
+   import re
+   text=string.upper(text)
+   result, taglist, next = TextTools.tag(text,aster_script)
+   # Pour vérifier les résultats intermédiaires décommenter la ligne suivante
+   #TextTools.print_tags(text,taglist)
+   text=string.replace(text,'%','#')
+   s_errors,warnings = format_errs(text,taglist)
+   if s_errors:
+      return None,s_errors,warnings
+   else:
+      ss=text_comms(text,taglist)
+      return string.replace(ss,'\r\n','\n'),s_errors,warnings
+
+
+
+
diff --git a/convert/Parserv5/tables.py b/convert/Parserv5/tables.py
new file mode 100644 (file)
index 0000000..513b001
--- /dev/null
@@ -0,0 +1,511 @@
+#@ MODIF tables Parsers DATE 15/02/2001    AUTEUR YESSAYAN A.YESSAYAN
+"""
+    Ce fichier définit une table de tags à utiliser avec le package
+    mxTextTools pour décoder un fichier au format Asterv5.
+
+    XXX Ce fichier doit etre corrigé pour incorporer deux modifications
+    réalisées dans la version V1_1p1 d'EFICAS
+"""
+from TextTools import *
+
+#
+__version__="$Name:  $"
+__Id__="$Id: tables.tag,v 1.11.18.1 2001/06/15 17:20:24 iliade Exp $"
+#
+
+err0='ERR0 , erreur non identifiee : '
+err1='ERR1 , arguments commande errones : '
+err2='ERR2 , parenthese obligatoire : '
+err3='ERR3 , point virgule obligatoire : '
+err4='ERR4 , ":" obligatoire avant mot cle : '
+err5='ERR5 , mot cle facteur ou arg obligatoire : '
+err6='ERR6 , identificateur obligatoire : '
+err7='ERR7 , mot cle facteur errone : '
+err8='ERR8 , signe = ou ( attendu : '
+err9='ERR9 , ( attendue : '
+err10='ERR10 , vexpr attendue : '
+
+ERRORS=(err0,err1,err2,err3,err4,err5,err6,err7,err8,err9,
+        err10)
+
+white_set=set(whitespace)
+
+delim=" ();:=,!&*/%\n"
+
+whitespace = \
+    (None,AllIn,' \t')
+
+opt_whitespace = \
+    whitespace      + (MatchOk,)
+
+t_opt_whitespace = \
+    whitespace      + (+1,)
+
+t_opt_whitenl = \
+  (None,AllIn,' \t\n\r',+1)
+
+t_err = (
+    (None,AllNotIn,';',+1),
+    (None,Is,';'),
+    (None,Skip,-1),
+)
+
+commespaces = \
+    ('comments',Table,(
+      (None,IsInSet,white_set,+1,+4),
+      (None,Is,'%',MatchFail),
+      # <comment>
+      (None,AllNotIn,'\n\r',+1),
+      (None,AllIn,'\n\r',+1),
+      # <blancs>
+      (None,AllInSet,white_set,+1),
+      (None,Is,'%',MatchOk,-3),
+    ))
+
+t_commespaces = (
+      (None,IsInSet,white_set,+1,+4),
+      (None,Is,'%',MatchFail),
+      # <comment>
+      (None,AllNotIn,'\n\r',+1),
+      (None,AllIn,'\n\r',+1),
+      # <blancs>
+      (None,AllInSet,white_set,+1),
+      (None,Is,'%',MatchOk,-3),
+)
+
+x_commespaces = \
+    ('comments',Table,(
+         # <debut>
+         (None,Is,'%',+3,+1),
+            (None,AllNotIn,'\n\r',+1),
+            (None,AllIn,'\n\r',+1,-2),
+         (None,AllInSet,white_set,+1,-3),
+    ))
+
+t_ident = \
+    ('ident',Table,(
+      (None,IsIn,alpha+'_'),
+      (None,AllIn,alpha+'_'+number,MatchOk),
+    ))
+
+t_identificateur = (
+      (None,IsIn,alpha+'_'),
+      (None,AllIn,alpha+'_'+number,MatchOk),
+)
+
+t_identmc = (
+      (None,IsIn,alpha+'_'),
+      (None,AllIn,alpha+'_'+number,+1),
+      (None,Table,t_commespaces,+1),
+      (None,Is,':',MatchFail),
+)
+
+n_ident = \
+    (None,Table,(
+      (None,IsIn,alpha+'_'),
+      (None,AllIn,alpha+'_'+number,MatchOk),
+    ))
+
+n_string = \
+    (None,Table,(
+      (None,Is,"'"),
+      # <loop>
+      (None,AllNotIn,"'",+1),
+      (None,Word,"''",+1,-1),
+      (None,Is,"'",MatchFail,MatchOk),
+    ))
+
+t_number = \
+    ('num',Table,(
+      (None,IsIn,'-+',+1),
+      (None,Is,'.',+2),
+      (None,IsIn,number,MatchFail,+4),
+      # <entiere>
+      (None,IsIn,number,MatchFail),
+      (None,AllIn,number,+1),
+      (None,Is,'.',+2),
+      # <decimal>
+      (None,AllIn,number,+1),
+      # <exposant>                      # si pas exposant termine number trouve
+      (None,IsIn,'deDE',MatchOk),
+      (None,IsIn,'-+',+1),
+      (None,AllIn,number,MatchFail,MatchOk),
+    ))
+
+n_number = \
+    (None,Table,(
+      (None,IsIn,'-+',+1),
+      (None,Is,'.',+2),
+      (None,IsIn,number,MatchFail,+4),
+      # <entiere>
+      (None,IsIn,number,MatchFail),
+      (None,AllIn,number,+1),
+      (None,Is,'.',+2),
+      # <decimal>
+      (None,AllIn,number,+1),
+      # <exposant>                      # si pas exposant termine number trouve
+      (None,IsIn,'deDE',MatchOk),
+      (None,IsIn,'-+',+1),
+      (None,AllIn,number,MatchFail,MatchOk),
+    ))
+
+t_complexe = \
+  ('CPLX',Table,(
+    ("RI",Word,'RI',+7),
+    commespaces     + (+1,),
+    t_number        + (MatchFail,),      # ce n est pas un complexe
+    commespaces     + (+1,),             # a partir d ici c est un complexe => produire erreurs
+    (None,Is,',',+1),
+    commespaces     + (+1,),
+    t_number        + (MatchFail,MatchOk),
+    # <mp>
+    ("MP",Word,'MP',MatchFail),
+    commespaces     + (+1,),
+    t_number        + (MatchFail,),      # ce n est pas un complexe
+    commespaces     + (+1,),             # a partir d ici c est un complexe => produire erreurs
+    (None,Is,',',+1),
+    commespaces     + (+1,),
+    t_number        + (MatchFail,MatchOk),
+    # <err>
+    (err7,Table,t_err,MatchFail,MatchOk),
+  ))
+
+t_vexpr = (
+    ('par',Is,'(',+5,+1),
+      commespaces     + (+1,),
+      ('vexpr',Table,ThisTable,+26),
+      commespaces     + (+1,),
+      ('par2',Is,')',+25,+15),
+    t_number        + (+1,+14),
+    t_complexe      + (+1,+13),
+    ('sign',IsIn,'+-',+3,+1),
+      commespaces     + (+1,),
+      ('vexpr',Table,ThisTable,+19,+10),
+    ("PI",Word,'PI',+1,+9),
+    t_ident         + (MatchFail,),
+    commespaces     + (+1,),
+    ('listpar',Is,'(',+6,+1), # on peut avoir une liste de parametres
+      # <params>
+      commespaces     + (+1,),
+      ('param',Table,ThisTable,+13),
+      commespaces     + (+1,),
+      (None,Is,',',+1,-3),
+      ('finlist',Is,')',+11),
+    # <op>
+    commespaces     + (+1,),
+    ('exp',Word,'**',+3,+1),
+      commespaces     + (+1,),
+      ('vexpr',Table,ThisTable,+6,MatchOk),
+    ('op',IsIn,'+-*/',+3,+1),
+      commespaces     + (+1,),
+      ('vexpr',Table,ThisTable,+3,MatchOk),
+    (None,Jump,To,MatchOk),
+    # <err>
+    (err0,Table,t_err,MatchFail,MatchOk),
+    # <err10>
+    (err10,Table,t_err,MatchFail,MatchOk),
+    # <err9>
+    (err9,Table,t_err,MatchFail,MatchOk),
+)
+
+t_liste_param = \
+  ('liste',Table,(
+    t_ident,
+    commespaces     + (+1,),
+    (None,Is,'('),
+    commespaces     + (+1,),
+    t_vexpr         + (MatchFail,),
+    # <suite>
+    commespaces     + (+1,),
+    (None,Is,',',+3),
+    commespaces     + (+1,),
+    t_vexpr         + (+3,-3),
+    # <fin>
+    commespaces     + (+1,),
+    (None,Is,')',+1,MatchOk),
+    # <err>
+    (err7,Table,t_err,MatchFail,MatchOk),
+  ))
+
+t_eval_expr = \
+  ('EVAL',Table,(
+    (None,Word,'EVAL'),
+    commespaces     + (+1,),
+    (None,Is,'(',+5),
+    commespaces     + (+1,),
+    ('vexpr',Table,t_vexpr,+3),
+    commespaces     + (+1,),
+    (None,Is,')',+1,MatchOk),
+    # <err>
+    (err7,Table,t_err,MatchFail,MatchOk),
+  ))
+
+t_entier = \
+    ('entier',Table,(
+      (None,IsIn,number),
+      (None,AllIn,number,+1),
+      (None,IsIn,delim,MatchFail,+1),
+      (None,Skip,-1),
+    ))
+
+t_comment = \
+  ('comment',Table,(
+     (None,Is,'%'),
+     (None,AllNotIn,'\n\r',+1),
+     (None,AllIn,'\n\r',MatchOk),
+  ))
+
+t_nullline = \
+  ('Null',AllIn,' ;\t\n\r')
+
+t_passline = \
+  ('passline',Table,(
+    (None,AllNotIn,newline,+1),
+    (None,IsIn,newline),
+  ))
+
+t_reste = \
+  ('reste',Table,(
+    (None,AllNotIn,';',+1),
+  ))
+
+t_rest2 = \
+  ('reste',Table,(
+    (None,AllNotIn,';',+1),
+    (None,Is,';'),
+    (None,AllNotIn,'\n',+1),
+    (None,Is,'\n',MatchOk,MatchOk),
+  ))
+
+t_formule = \
+  ('formule',Table,(
+    commespaces     + (+1,),
+    (None,Word,'!FORMULE'),
+    commespaces     + (+1,),
+    (None,Is,'(',+32),
+    commespaces     + (+1,),
+    ('type',Table,t_identificateur,+29),
+    commespaces     + (+1,),
+    (None,Is,':',+27),
+    commespaces     + (+1,),
+    (None,Is,'(',+26),
+    commespaces     + (+1,),
+    ('id',Table,t_identificateur,+23),
+    commespaces     + (+1,),
+    (None,Is,'(',+22),
+    # <params>
+    commespaces     + (+1,),
+    ('typ',Table,t_identmc,+1),
+    commespaces     + (+1,),
+    ('id',Table,t_identificateur,+17),
+    commespaces     + (+1,),
+    (None,Is,',',+1,-5),
+    commespaces     + (+1,),
+    (None,Is,')',-7),
+    commespaces     + (+1,),
+    (None,Is,'=',+11),
+    commespaces     + (+1,),
+    ('vexpr',Table,t_vexpr,+9),
+    commespaces     + (+1,),
+    (None,Is,')',+8),
+    commespaces     + (+1,),
+    (None,Is,')',+6),
+    commespaces     + (+1,),
+    (None,Is,';',+3),
+    (None,AllNotIn,'\n',+1),
+    (None,Is,'\n',MatchOk,MatchOk),
+    # <err>
+    (err0,Table,t_err,MatchFail,MatchOk),
+    # <err9>
+    (err9,Table,t_err,MatchFail,MatchOk),
+  ))
+
+t_nom_ope = \
+    ('nom_ope',Table,(
+      (None,Word,'EVAL',+1,MatchFail),  # EVAL n est pas un nom d operateur, il est reserve
+      (None,IsIn,alpha+'_'),
+      (None,AllIn,alpha+'_'+number,+1),
+      commespaces     + (+1,),
+      (None,Is,'(',MatchFail),
+      (None,Skip,-1),
+    ))
+
+t_arg = \
+  ('arg',Table,(
+    n_string        + (+1,MatchOk),
+    n_ident,
+  ))
+
+t_larg = \
+  ('larg',Table,(
+    (None,Is,'(',MatchFail),
+    # <arg>
+    commespaces     + (+1,),
+    t_complexe      + (+1,+4),
+    t_number        + (+1,+3),
+    t_eval_expr     + (+1,+2),
+    t_arg           + (MatchFail,+1),
+    # <suite>
+    commespaces     + (+1,),
+    (None,Is,',',+1),
+    (None,Is,')',-7,MatchOk),
+  ))
+
+t_mcf = \
+  ('mcf',Table,(
+    (None,Is,'(',MatchFail),
+    ("comments",Table,t_commespaces,+1),
+    (None,Is,')',+1,MatchOk),
+    t_ident         + (MatchFail,),
+    ("comments",Table,t_commespaces,+1),
+    (None,Is,':',MatchFail),            # a partir d ici on est dans un mot cle facteur (erreurs eventuelles)
+    # <args>
+    ("comments",Table,t_commespaces,+1),
+    t_larg          + (+1,+5),
+    t_complexe      + (+1,+4),
+    t_number        + (+1,+3),
+    t_eval_expr     + (+1,+2),
+    t_arg           + (+8,),
+    # <suite>
+    ("comments",Table,t_commespaces,+1),
+    (None,Is,',',+1),
+    ("comments",Table,t_commespaces,+1),
+    (None,Is,')',+1,MatchOk),
+    t_ident         + (+3,),
+    ("comments",Table,t_commespaces,+1),
+    (None,Is,':',+1,-12),
+    # <err>
+    (err7,Table,t_err,MatchFail,MatchOk),
+  ))
+
+t_comm = \
+  ('comm',Table,(                        # on attend les arguments entre () sinon erreur
+    (None,Is,'(',+21),
+    commespaces     + (+1,),
+    (None,Is,')',+1,MatchOk),
+    # <call>
+    t_ident         + (+18,),
+    commespaces     + (+1,),
+    (None,Is,':',+16),
+    commespaces     + (+1,),
+    t_mcf           + (+5,),
+    # <mcfsuite>
+    commespaces     + (+1,),
+    (None,Is,',',+1),
+    commespaces     + (+1,),
+    t_mcf           + (+7,-3),
+    # <args>
+    t_larg          + (+1,+5),
+    t_complexe      + (+1,+4),
+    t_number        + (+1,+3),
+    t_eval_expr     + (+1,+2),
+    t_arg           + (+5,),
+    # <suite>
+    commespaces     + (+1,),
+    # <sep>
+    (None,Is,',',+1),
+    commespaces     + (+1,),
+    (None,Is,')',-17,MatchOk),
+    # <err>
+    (err1,Table,t_err,MatchFail,MatchOk),
+  ))
+
+t_affe = \
+  ('affe',Table,(
+    commespaces     + (+1,),
+    t_larg          + (+1,+6),
+    t_complexe      + (+1,+5),
+    t_number        + (+1,+4),
+    t_eval_expr     + (+1,+3),
+    t_arg           + (+1,+2),
+    (None,Jump,To,+2),
+    # <suite>
+    (None,Jump,To,MatchOk),
+    # <err>
+    (err0,Table,t_err,MatchFail,MatchOk),
+  ))
+
+t_reuse = \
+  ('reuse',Table,(
+    t_opt_whitespace,
+    t_ident,
+    t_opt_whitespace,
+    (None,Is,'=',+5),
+    t_opt_whitespace,
+    t_nom_ope       + (+2,+1),
+    # <comm>
+    t_comm          + (MatchFail,MatchOk),
+    # <affe>
+    t_affe          + (MatchFail,MatchOk),
+    # <err>
+    (err8,Table,t_err,MatchFail,MatchOk),
+  ))
+
+t_noreuse = \
+  ('noreuse',Table,(
+    t_opt_whitespace,
+    t_ident,
+    t_opt_whitenl,
+    (None,Is,'=',+3,+1),     # on a affaire a un operateur ou une affectation
+      t_opt_whitespace,
+      t_nom_ope       + (+4,+3),
+    (None,Is,'(',+5,+1),
+    (None,Skip,-1),
+    # <comm>
+    t_comm          + (+2,MatchOk),
+    # <affe>
+    t_affe          + (+1,MatchOk),
+    # <err>
+    (err0,Table,t_err,MatchFail,MatchOk),
+    # <err8>
+    (err8,Table,t_err,MatchFail,MatchOk),
+  ))
+
+t_fin = \
+  ('commande',Table,(
+    ('noreuse',Table,(
+      t_opt_whitespace,
+      ('ident',Word,"FIN"),
+      t_opt_whitenl,
+      (None,Is,'(',MatchFail),          # On est vraiment sur d avoir la commande FIN apres avoir identifie (
+      # On recule d un caractere pour identifier les arguments entre parenthèses
+      (None,Skip,-1),
+      t_comm          + (+1,MatchOk),
+      (err0,Table,t_err,MatchFail,MatchOk),
+    )),
+    commespaces     + (+1,),
+    (None,Is,';',+1,MatchOk),
+    # <err>
+    (err0,Table,t_err,MatchFail,MatchOk),
+  ))
+
+t_commande = \
+  ('commande',Table,(
+    t_opt_whitespace,
+    (None,Is,'&',+2,+1),
+      t_reuse         + (MatchFail,+2),
+    t_noreuse       + (MatchFail,),
+    # <fin>
+    commespaces     + (+1,),
+    (None,Is,';',+1,MatchOk),
+    # <err>
+    (err0,Table,t_err,MatchFail,MatchOk),
+  ))
+
+aster_script = (
+  # <top>
+  t_nullline      + (+1,+0),
+  t_comment       + (+1,-1),
+  t_formule       + (+1,-2),
+  t_fin           + (+1,+4),
+  t_commande      + (+1,-4),
+  t_passline      + (+1,-5),
+  (None,EOF,Here,-6),
+  # <AfterFin>
+  t_nullline      + (+1,+0),
+  t_passline      + (+1,-1),
+  (None,EOF,Here,-2),
+)
+
+
+
diff --git a/convert/Parserv5/tables.tag b/convert/Parserv5/tables.tag
new file mode 100755 (executable)
index 0000000..2a28f07
--- /dev/null
@@ -0,0 +1,478 @@
+#@ MODIF tables Parsers DATE 15/02/2001    AUTEUR YESSAYAN A.YESSAYAN
+"""
+    Ce fichier définit une table de tags à utiliser avec le package
+    mxTextTools pour décoder un fichier au format Asterv5.
+
+    XXX Ce fichier doit etre corrigé pour incorporer deux modifications
+    réalisées dans la version V1_1p1 d'EFICAS
+"""
+from TextTools import *
+
+#
+__version__="$Name:  $"
+__Id__="$Id: tables.tag,v 1.11.18.1 2001/06/15 17:20:24 iliade Exp $"
+#
+
+err0='ERR0 , erreur non identifiee : '
+err1='ERR1 , arguments commande errones : '
+err2='ERR2 , parenthese obligatoire : '
+err3='ERR3 , point virgule obligatoire : '
+err4='ERR4 , ":" obligatoire avant mot cle : '
+err5='ERR5 , mot cle facteur ou arg obligatoire : '
+err6='ERR6 , identificateur obligatoire : '
+err7='ERR7 , mot cle facteur errone : '
+err8='ERR8 , signe = ou ( attendu : '
+err9='ERR9 , ( attendue : '
+err10='ERR10 , vexpr attendue : '
+
+ERRORS=(err0,err1,err2,err3,err4,err5,err6,err7,err8,err9,
+        err10)
+
+white_set=set(whitespace)
+
+delim=" ();:=,!&*/%\n"
+
+whitespace is:
+    AllIn ' \t'
+
+opt_whitespace is:
+    whitespace F:MatchOk
+
+t_opt_whitespace is:
+    whitespace F:next
+
+t_opt_whitenl is:
+  AllIn ' \t\n\r' F:next
+
+t_err = Table is:
+    AllNotIn ';' F:next
+    Is ';'
+    Skip back
+
+commespaces is:
+    'comments' = Table is:
+      IsInSet white_set F:next T:<blancs>
+      Is '%' F:MatchFail
+      <comment>
+      AllNotIn '\n\r' F:next
+      AllIn '\n\r' F:next
+      <blancs>
+      AllInSet white_set F:next
+      Is '%' F:MatchOk T:<comment>
+
+t_commespaces = Table is:
+      IsInSet white_set F:next T:<blancs>
+      Is '%' F:MatchFail
+      <comment>
+      AllNotIn '\n\r' F:next
+      AllIn '\n\r' F:next
+      <blancs>
+      AllInSet white_set F:next
+      Is '%' F:MatchOk T:<comment>
+
+x_commespaces is:
+    'comments' = Table is:
+         <debut>
+         Is '%':
+            AllNotIn '\n\r' F:next
+            AllIn '\n\r' F:next T:<debut>
+         AllInSet white_set F:next T:<debut>
+t_ident is:
+    'ident' = Table is:
+      IsIn alpha+'_'
+      AllIn alpha+'_'+number F:MatchOk
+
+t_identificateur = Table is:
+      IsIn alpha+'_'
+      AllIn alpha+'_'+number F:MatchOk
+
+t_identmc = Table is:
+      IsIn alpha+'_'
+      AllIn alpha+'_'+number F:next
+      None = Table t_commespaces F:next
+      Is ':' F:MatchFail
+
+n_ident is:
+    None = Table is:
+      IsIn alpha+'_'
+      AllIn alpha+'_'+number F:MatchOk
+
+n_string is:
+    None = Table is:
+      Is "'"
+      <loop>
+      AllNotIn "'" F:next
+      Word "''" F:next T:<loop>
+      Is "'" F:MatchFail T:MatchOk
+
+t_number is:
+    'num' = Table is:
+      IsIn '-+' F:next
+      Is '.' F:<entiere>
+      IsIn number  F:MatchFail T:<decimal>
+      <entiere>
+      IsIn number F:MatchFail
+      AllIn number F:next
+      Is '.' F:<exposant>
+      <decimal>
+      AllIn number F:next
+      <exposant>   # si pas exposant termine number trouve
+      IsIn 'deDE' F:MatchOk
+      IsIn '-+' F:next
+      AllIn number F:MatchFail T:MatchOk
+
+n_number is:
+    None = Table is:
+      IsIn '-+' F:next
+      Is '.' F:<entiere>
+      IsIn number  F:MatchFail T:<decimal>
+      <entiere>
+      IsIn number F:MatchFail
+      AllIn number F:next
+      Is '.' F:<exposant>
+      <decimal>
+      AllIn number F:next
+      <exposant>   # si pas exposant termine number trouve
+      IsIn 'deDE' F:MatchOk
+      IsIn '-+' F:next
+      AllIn number F:MatchFail T:MatchOk
+
+t_complexe is:
+  'CPLX' = Table is:
+    "RI" = Word 'RI' F:<mp>
+    commespaces F:next
+    t_number F:MatchFail  # ce n est pas un complexe
+    commespaces F:next # a partir d ici c est un complexe => produire erreurs
+    Is ',' F:next
+    commespaces F:next
+    t_number F:MatchFail T:MatchOk
+    <mp>
+    "MP" = Word 'MP' F:MatchFail
+    commespaces F:next
+    t_number F:MatchFail  # ce n est pas un complexe
+    commespaces F:next # a partir d ici c est un complexe => produire erreurs
+    Is ',' F:next
+    commespaces F:next
+    t_number F:MatchFail T:MatchOk
+    <err>
+    err7 = Table t_err F:MatchFail T:MatchOk
+
+t_vexpr = Table is:
+    'par' = Is '(':
+      commespaces F:next
+      'vexpr' = Table ThisTable F:<err10> 
+      commespaces F:next
+      'par2' = Is ')' F:<err9> T:<op>
+    t_number F:next T:<op>
+    t_complexe F:next T:<op>
+    'sign' = IsIn '+-':
+      commespaces F:next
+      'vexpr' = Table ThisTable F:<err10> T:<op>
+    "PI" = Word 'PI' F:next T:<op>
+    t_ident F:MatchFail
+    commespaces F:next
+    'listpar' = Is '(': # on peut avoir une liste de parametres
+      <params>
+      commespaces F:next
+      'param' = Table ThisTable F:<err10> 
+      commespaces F:next
+      Is ',' F:next T:<params>
+      'finlist' = Is ')' F:<err9>
+    <op>
+    commespaces F:next
+    'exp' = Word '**':
+      commespaces F:next
+      'vexpr' = Table ThisTable F:<err10> T:MatchOk
+    'op' = IsIn '+-*/':
+      commespaces F:next
+      'vexpr' = Table ThisTable F:<err10> T:MatchOk
+    Jump To MatchOk
+    <err>
+    err0 = Table t_err F:MatchFail T:MatchOk
+    <err10>
+    err10 = Table t_err F:MatchFail T:MatchOk
+    <err9>
+    err9 = Table t_err F:MatchFail T:MatchOk
+
+t_liste_param is:
+  'liste' = Table is:
+    t_ident 
+    commespaces F:next
+    Is '('
+    commespaces F:next
+    t_vexpr F:MatchFail
+    <suite>
+    commespaces F:next
+    Is ',' F:<fin>
+    commespaces F:next
+    t_vexpr F:<err> T:<suite>
+    <fin>
+    commespaces F:next
+    Is ')' F:<err> T:MatchOk
+    <err>
+    err7 = Table t_err F:MatchFail T:MatchOk
+
+t_eval_expr is:
+  'EVAL' = Table is:
+    Word 'EVAL' 
+    commespaces F:next
+    Is '(' F:<err>
+    commespaces F:next
+    'vexpr' = Table t_vexpr F:<err>
+    commespaces F:next
+    Is ')' F:<err> T:MatchOk
+    <err>
+    err7 = Table t_err F:MatchFail T:MatchOk
+
+t_entier is:
+    'entier' = Table is:
+      IsIn number 
+      AllIn number F:next
+      IsIn delim T:next
+      Skip back
+
+t_comment is:
+  'comment' = Table is:
+     Is '%'
+     AllNotIn '\n\r' F:next
+     AllIn '\n\r' F:MatchOk
+
+t_nullline is:
+  'Null' = AllIn ' ;\t\n\r'
+
+t_passline is:
+  'passline' = Table is:
+    AllNotIn newline F:next
+    IsIn newline
+
+t_reste is:
+  'reste' = Table is:
+    AllNotIn ';' F:next
+
+t_rest2 is:
+  'reste' = Table is:
+    AllNotIn ';' F:next
+    Is ';'
+    AllNotIn '\n' F:next
+    Is '\n' F:MatchOk T:MatchOk
+
+t_formule is:
+  'formule' = Table is:
+    commespaces F:next
+    Word '!FORMULE' 
+    commespaces F:next
+    Is '(' F:<err9>
+    commespaces F:next
+    'type' = Table t_identificateur F:<err>
+    commespaces F:next
+    Is ':' F:<err>
+    commespaces F:next
+    Is '(' F:<err9>
+    commespaces F:next
+    'id' = Table t_identificateur F:<err>
+    commespaces F:next
+    Is '(' F:<err9>
+    <params>
+    commespaces F:next
+    'typ' = Table t_identmc F:next
+    commespaces F:next
+    'id' = Table t_identificateur F:<err>
+    commespaces F:next
+    Is ',' F:next T:<params>
+    commespaces F:next
+    Is ')' F:<params>
+    commespaces F:next
+    Is '=' F:<err>
+    commespaces F:next
+    'vexpr' = Table t_vexpr F:<err>
+    commespaces F:next
+    Is ')' F:<err9>
+    commespaces F:next
+    Is ')' F:<err9>
+    commespaces F:next
+    Is ';' F:<err>
+    AllNotIn '\n' F:next
+    Is '\n' F:MatchOk T:MatchOk
+    <err>
+    err0 = Table t_err F:MatchFail T:MatchOk
+    <err9>
+    err9 = Table t_err F:MatchFail T:MatchOk
+    
+t_nom_ope is:
+    'nom_ope' = Table is:
+      Word 'EVAL' F:next T:MatchFail   # EVAL n est pas un nom d operateur, il est reserve
+      IsIn alpha+'_'
+      AllIn alpha+'_'+number F:next
+      commespaces F:next
+      Is '(' F:MatchFail
+      Skip back
+
+t_arg is:
+  'arg' = Table is:
+    n_string F:next T:MatchOk
+    n_ident 
+
+t_larg is:
+  'larg' = Table is:
+    Is '(' F:MatchFail
+    <arg>
+    commespaces F:next
+    t_complexe F:next T:<suite>
+    t_number F:next T:<suite>
+    t_eval_expr F:next T:<suite>
+    t_arg F:MatchFail T:<suite>
+    <suite>
+    commespaces F:next
+    Is ',' F:next
+    Is ')' F:<arg> T:MatchOk
+
+t_mcf is:
+  'mcf' = Table is:
+    Is '(' F:MatchFail
+    "comments" = Table t_commespaces F:next
+    Is ')' F:next T:MatchOk
+    t_ident F:MatchFail
+    "comments" = Table t_commespaces F:next
+    Is ':' F:MatchFail # a partir d ici on est dans un mot cle facteur (erreurs eventuelles)
+    <args>
+    "comments" = Table t_commespaces F:next
+    t_larg F:next T:<suite>
+    t_complexe F:next T:<suite>
+    t_number F:next T:<suite>
+    t_eval_expr F:next T:<suite>
+    t_arg F:<err>
+    <suite>
+    "comments" = Table t_commespaces F:next
+    Is ',' F:next
+    "comments" = Table t_commespaces F:next
+    Is ')' F:next T:MatchOk
+    t_ident F:<err>
+    "comments" = Table t_commespaces F:next
+    Is ':' F:<err> T:<args>
+    <err>
+    err7 = Table t_err F:MatchFail T:MatchOk
+
+t_comm is:
+  'comm' = Table is: # on attend les arguments entre () sinon erreur
+    Is '(' F:<err>
+    commespaces F:next
+    Is ')' F:<call> T:MatchOk
+    <call>
+    t_ident F:<err>
+    commespaces F:next
+    Is ':' F:<err>
+    commespaces F:next
+    t_mcf F:<args>
+    <mcfsuite>
+    commespaces F:next
+    Is ',' F:next
+    commespaces F:next
+    t_mcf F:<sep> T:<mcfsuite>
+    <args>
+    t_larg F:next T:<suite>
+    t_complexe F:next T:<suite>
+    t_number F:next T:<suite>
+    t_eval_expr F:next T:<suite>
+    t_arg F:<err>
+    <suite>
+    commespaces F:next
+    <sep>
+    Is ',' F:next
+    commespaces F:next
+    Is ')' F:<call> T:MatchOk
+    <err>
+    err1 = Table t_err F:MatchFail T:MatchOk
+
+t_affe is:
+  'affe' = Table is:
+    commespaces F:next
+    t_larg F:next T:<suite>
+    t_complexe F:next T:<suite>
+    t_number F:next T:<suite>
+    t_eval_expr F:next T:<suite>
+    t_arg F:next T:<suite>
+    Jump To <err>
+    <suite>
+    Jump To MatchOk
+    <err>
+    err0 = Table t_err F:MatchFail T:MatchOk
+
+t_reuse is:
+  'reuse' = Table is:
+    t_opt_whitespace
+    t_ident
+    t_opt_whitespace
+    Is '=' F:<err>
+    t_opt_whitespace
+    t_nom_ope F:<affe> T:<comm>
+    <comm>
+    t_comm F:MatchFail T:MatchOk
+    <affe>
+    t_affe F:MatchFail T:MatchOk
+    <err>
+    err8 = Table t_err F:MatchFail T:MatchOk
+
+t_noreuse is:
+  'noreuse' = Table is:
+    t_opt_whitespace
+    t_ident
+    t_opt_whitenl
+    Is '=':    # on a affaire a un operateur ou une affectation
+      t_opt_whitespace
+      t_nom_ope F:<affe> T:<comm>
+    Is '(' F:<err8> T:next
+    Skip back
+    <comm>
+    t_comm F:<err> T:MatchOk
+    <affe>
+    t_affe F:<err> T:MatchOk
+    <err>
+    err0 = Table t_err F:MatchFail T:MatchOk
+    <err8>
+    err8 = Table t_err F:MatchFail T:MatchOk
+
+t_fin is:
+  'commande' = Table is:
+    'noreuse' = Table is:
+      t_opt_whitespace
+      'ident' = Word "FIN"
+      t_opt_whitenl
+      Is '(' F:MatchFail  # On est vraiment sur d avoir la commande FIN apres avoir identifie (
+      # On recule d un caractere pour identifier les arguments entre parenthèses
+      Skip back
+      t_comm F:next T:MatchOk
+      err0 = Table t_err F:MatchFail T:MatchOk
+    commespaces F:next
+    Is ';' F:<err> T:MatchOk
+    <err>
+    err0 = Table t_err F:MatchFail T:MatchOk
+
+t_commande is:
+  'commande' = Table is:
+    t_opt_whitespace
+    Is '&':
+      t_reuse F:MatchFail T:<fin>
+    t_noreuse F:MatchFail 
+    <fin>
+    commespaces F:next
+    Is ';' F:<err> T:MatchOk
+    <err>
+    err0 = Table t_err F:MatchFail T:MatchOk
+
+aster_script = Table is:
+  <top>
+  t_nullline F:next T:<top>
+  t_comment F:next T:<top>
+  t_formule F:next T:<top>
+  t_fin     F:next T:<AfterFin>
+  t_commande F:next T:<top>
+  t_passline F:next T:<top>
+  EOF Here F:<top>
+  <AfterFin>
+  t_nullline F:next T:<AfterFin>
+  t_passline F:next T:<AfterFin>
+  EOF Here F:<AfterFin>
+
+
+
diff --git a/convert/__init__.py b/convert/__init__.py
new file mode 100644 (file)
index 0000000..c6d5222
--- /dev/null
@@ -0,0 +1,13 @@
+"""
+   Ce package contient tous les convertisseurs de formats d'entrée
+   en objets compréhensibles par EFICAS.
+
+   Ces convertisseurs sont implémentés sous forme de plugins
+"""
+
+from Extensions import pluginloader
+
+import convert
+
+plugins=pluginloader.PluginLoader(convert)
+
diff --git a/convert/convert_asterv5.py b/convert/convert_asterv5.py
new file mode 100644 (file)
index 0000000..780626d
--- /dev/null
@@ -0,0 +1,111 @@
+"""
+    Ce module contient le plugin convertisseur de fichier
+    au format asterv5 pour EFICAS.
+
+    Un plugin convertisseur doit fournir deux attributs de classe :
+    extensions et formats et deux méthodes : readfile,convert.
+
+    L'attribut de classe extensions est une liste d'extensions
+    de fichiers préconisées pour ce type de format. Cette information
+    est seulement indicative.
+
+    L'attribut de classe formats est une liste de formats de sortie
+    supportés par le convertisseur. Les formats possibles sont :
+    eval, dict ou exec.
+    Le format eval est un texte source Python qui peut etre evalué. Le
+    résultat de l'évaluation est un objet Python quelconque.
+    Le format dict est un dictionnaire Python.
+    Le format exec est un texte source Python qui peut etre executé. 
+
+    La méthode readfile a pour fonction de lire un fichier dont le
+    nom est passé en argument de la fonction.
+       convertisseur.readfile(nom_fichier)
+
+    La méthode convert a pour fonction de convertir le fichier
+    préalablement lu dans un objet du format passé en argument.
+       objet=convertisseur.convert(outformat)
+
+    Ce convertisseur supporte uniquement le format de sortie exec
+
+"""
+import sys,string,traceback
+
+from Noyau import N_CR
+
+def entryPoint():
+   """
+       Retourne les informations nécessaires pour le chargeur de plugins
+       Ces informations sont retournées dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'asterv5',
+        # La factory pour créer une instance du plugin
+          'factory' : AsterParser,
+          }
+
+import Parserv5.conv
+import parseur_python
+
+class AsterParser:
+   """
+   """
+   # Les extensions de fichier préconisées
+   extensions=('.comm',)
+   # Les formats de sortie supportés (eval dict ou exec)
+   formats=('exec','execnoparseur')
+
+   def __init__(self,cr=None):
+      # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
+      if cr :
+         self.cr=cr
+      else:
+         self.cr=N_CR.CR(debut='CR convertisseur format asterv5',
+                         fin='fin CR format asterv5')
+      self.oldtext=''
+      self.out=self.err=self.warn=''
+
+   def readfile(self,filename):
+      self.filename=filename
+      try:
+         self.text=open(filename).read()
+      except:
+         self.cr.fatal("Impossible ouvrir fichier %s" % filename)
+         return
+
+   def convert(self,outformat):
+      if outformat == 'exec':
+         return self.getexec()
+      elif outformat == 'execnoparseur':
+         return self.getexecnoparseur()
+      else:
+         raise "Format de sortie : %s, non supporté"
+
+   def getexec(self):
+      if self.text != self.oldtext:
+         self.out, self.err, self.warn= Parserv5.conv.conver(self.text)
+         if self.err:
+            self.cr.fatal("Erreur a l'interpretation de %s" % self.filename)
+            self.cr.fatal(str(self.err))
+            return self.out
+         # On transforme les commentaires et les parametres en objets Python
+         # avec un deuxième parseur
+         try:
+            self.out = parseur_python.PARSEUR_PYTHON(self.out).get_texte()
+         except:
+            self.cr.fatal("Erreur dans la deuxième phase d interpretation de %s" % self.filename)
+            tracebak.print_exc()
+            return ""
+         self.oldtext=self.text
+      return self.out
+
+   def getexecnoparseur(self):
+      if self.text != self.oldtext:
+         self.out, self.err, self.warn= Parserv5.conv.conver(self.text)
+         if self.err:
+            self.cr.fatal("Erreur a l'interpretation de %s" % self.filename)
+            self.cr.fatal(str(self.err))
+            return self.out
+         self.oldtext=self.text
+      return self.out
+
diff --git a/convert/convert_ini.py b/convert/convert_ini.py
new file mode 100644 (file)
index 0000000..aa32a72
--- /dev/null
@@ -0,0 +1,96 @@
+"""
+    Ce module contient le plugin convertisseur de fichier
+    au format ini pour EFICAS.
+    Le convertisseur supporte le format de sortie eval
+
+    Le format eval est un texte Python qui peut etre 
+    evalué avec la commande eval de Python. Il doit donc 
+    etre une expression Python dont l'évaluation permet d'obtenir un objet
+
+"""
+import traceback
+
+from ConfigParser import ConfigParser
+from Noyau import N_CR
+
+def entryPoint():
+   """
+       Retourne les informations nécessaires pour le chargeur de plugins
+       Ces informations sont retournées dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'ini',
+        # La factory pour créer une instance du plugin
+          'factory' : IniParser,
+          }
+
+
+class IniParser(ConfigParser):
+   """
+       Ce convertisseur lit un fichier au format ini avec la 
+       methode readfile : convertisseur.readfile(nom_fichier)
+       et retourne le texte au format outformat avec la 
+       methode convertisseur.convert(outformat)
+
+       Ses caractéristiques principales sont exposées dans 2 attributs 
+       de classe :
+
+       - extensions : qui donne une liste d'extensions de fichier préconisées
+
+       - formats : qui donne une liste de formats de sortie supportés
+   """
+   # Les extensions de fichier préconisées
+   extensions=('.ini','.conf')
+   # Les formats de sortie supportés (eval ou exec)
+   formats=('eval','dict')
+
+   def __init__(self,cr=None):
+      ConfigParser.__init__(self)
+      # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
+      if cr :
+         self.cr=cr
+      else:
+         self.cr=N_CR.CR(debut='CR convertisseur format ini',
+                         fin='fin CR format ini')
+
+   def readfile(self,filename):
+      try:
+         self.read(filename)
+      except Exception,e:
+         self.cr.fatal(str(e))
+
+   def convert(self,outformat):
+      if outformat == 'eval':
+         return self.getdicttext()
+      elif outformat == 'dict':
+         return self.getdict()
+      else:
+         raise "Format de sortie : %s, non supporté"
+
+   def getdicttext(self):
+      s='{'
+      for section in self.sections():
+         s=s+ "'" + section + "' : {"
+         options=self.options(section)
+         for option in options:
+            value=self.get(section,option)
+            if value == '':value="None"
+            s=s+"'%s' : %s," % (option, value)
+         s=s+"}, "
+      s=s+"}"
+      return s
+
+   def getdict(self):
+      s={}
+      for section in self.sections():
+         s[section]=d={}
+         options=self.options(section)
+         for option in options:
+            value=self.get(section,option)
+            if value == '':
+               d[option]=None
+            else:
+               d[option]=eval(value)
+      return s
+
diff --git a/convert/convert_pyth.py b/convert/convert_pyth.py
new file mode 100644 (file)
index 0000000..30f3b28
--- /dev/null
@@ -0,0 +1,103 @@
+"""
+    Ce module contient le plugin convertisseur de fichier
+    au format python pour EFICAS.
+
+    Un plugin convertisseur doit fournir deux attributs de classe :
+    extensions et formats et deux méthodes : readfile,convert.
+
+    L'attribut de classe extensions est une liste d'extensions
+    de fichiers préconisées pour ce type de format. Cette information
+    est seulement indicative.
+
+    L'attribut de classe formats est une liste de formats de sortie
+    supportés par le convertisseur. Les formats possibles sont :
+    eval, dict ou exec.
+    Le format eval est un texte source Python qui peut etre evalué. Le
+    résultat de l'évaluation est un objet Python quelconque.
+    Le format dict est un dictionnaire Python.
+    Le format exec est un texte source Python qui peut etre executé. 
+
+    La méthode readfile a pour fonction de lire un fichier dont le
+    nom est passé en argument de la fonction.
+       convertisseur.readfile(nom_fichier)
+
+    La méthode convert a pour fonction de convertir le fichier
+    préalablement lu dans un objet du format passé en argument.
+       objet=convertisseur.convert(outformat)
+
+    Ce convertisseur supporte le format de sortie dict
+
+"""
+import sys,string,traceback
+
+from Noyau import N_CR
+
+def entryPoint():
+   """
+       Retourne les informations nécessaires pour le chargeur de plugins
+       Ces informations sont retournées dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'pyth',
+        # La factory pour créer une instance du plugin
+          'factory' : PythParser,
+          }
+
+
+class PythParser:
+   """
+       Ce convertisseur lit un fichier au format pyth avec la 
+       methode readfile : convertisseur.readfile(nom_fichier)
+       et retourne le texte au format outformat avec la 
+       methode convertisseur.convert(outformat)
+
+       Ses caractéristiques principales sont exposées dans 2 attributs 
+       de classe :
+
+       - extensions : qui donne une liste d'extensions de fichier préconisées
+
+       - formats : qui donne une liste de formats de sortie supportés
+   """
+   # Les extensions de fichier préconisées
+   extensions=('.pyth',)
+   # Les formats de sortie supportés (eval dict ou exec)
+   formats=('dict',)
+
+   def __init__(self,cr=None):
+      # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
+      if cr :
+         self.cr=cr
+      else:
+         self.cr=N_CR.CR(debut='CR convertisseur format pyth',
+                         fin='fin CR format pyth')
+      self.g={}
+
+   def readfile(self,filename):
+      self.filename=filename
+      try:
+         self.text=open(filename).read()
+      except:
+         self.cr.fatal("Impossible ouvrir fichier %s",filename)
+         return
+      self.g={}
+      try:
+         exec self.text in self.g
+      except Exception,e:
+         l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+         s= string.join(l[2:])
+         s= string.replace(s,'"<string>"','"<%s>"'%self.filename)
+         self.cr.fatal("Erreur a l'evaluation :\n" + s)
+
+   def convert(self,outformat):
+      if outformat == 'dict':
+         return self.getdict()
+      else:
+         raise "Format de sortie : %s, non supporté"
+
+   def getdict(self):
+      d={}
+      for k,v in self.g.items():
+         if k[0] != '_':d[k]=v
+      return d
+
diff --git a/convert/convert_python.py b/convert/convert_python.py
new file mode 100644 (file)
index 0000000..a5a69cb
--- /dev/null
@@ -0,0 +1,107 @@
+"""
+    Ce module contient le plugin convertisseur de fichier
+    au format python pour EFICAS.
+
+    Un plugin convertisseur doit fournir deux attributs de classe :
+    extensions et formats et deux méthodes : readfile,convert.
+
+    L'attribut de classe extensions est une liste d'extensions
+    de fichiers préconisées pour ce type de format. Cette information
+    est seulement indicative.
+
+    L'attribut de classe formats est une liste de formats de sortie
+    supportés par le convertisseur. Les formats possibles sont :
+    eval, dict ou exec.
+    Le format eval est un texte source Python qui peut etre evalué. Le
+    résultat de l'évaluation est un objet Python quelconque.
+    Le format dict est un dictionnaire Python.
+    Le format exec est un texte source Python qui peut etre executé. 
+
+    La méthode readfile a pour fonction de lire un fichier dont le
+    nom est passé en argument de la fonction.
+       convertisseur.readfile(nom_fichier)
+
+    La méthode convert a pour fonction de convertir le fichier
+    préalablement lu dans un objet du format passé en argument.
+       objet=convertisseur.convert(outformat)
+
+    Ce convertisseur supporte le format de sortie exec
+
+"""
+import sys,string,traceback
+
+import parseur_python
+from Noyau import N_CR
+
+def entryPoint():
+   """
+       Retourne les informations nécessaires pour le chargeur de plugins
+       Ces informations sont retournées dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'python',
+        # La factory pour créer une instance du plugin
+          'factory' : PythonParser,
+          }
+
+
+class PythonParser:
+   """
+       Ce convertisseur lit un fichier au format python avec la 
+       methode readfile : convertisseur.readfile(nom_fichier)
+       et retourne le texte au format outformat avec la 
+       methode convertisseur.convert(outformat)
+
+       Ses caractéristiques principales sont exposées dans 2 attributs 
+       de classe :
+
+       - extensions : qui donne une liste d'extensions de fichier préconisées
+
+       - formats : qui donne une liste de formats de sortie supportés
+   """
+   # Les extensions de fichier préconisées
+   extensions=('.py',)
+   # Les formats de sortie supportés (eval dict ou exec)
+   # Le format exec est du python executable (commande exec) converti avec PARSEUR_PYTHON
+   # Le format execnoparseur est du python executable (commande exec) non converti
+   formats=('exec','execnoparseur')
+
+   def __init__(self,cr=None):
+      # Si l'objet compte-rendu n'est pas fourni, on utilise le 
+      # compte-rendu standard
+      self.text=''
+      if cr :
+         self.cr=cr
+      else:
+         self.cr=N_CR.CR(debut='CR convertisseur format python',
+                         fin='fin CR format python')
+
+   def readfile(self,filename):
+      self.filename=filename
+      try:
+         self.text=open(filename).read()
+      except:
+         self.cr.fatal("Impossible ouvrir fichier %s" % filename)
+         return
+
+   def convert(self,outformat):
+      if outformat == 'exec':
+         try:
+            return parseur_python.PARSEUR_PYTHON(self.text).get_texte()
+         except:
+            # Erreur lors de la conversion
+            l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],
+                                         sys.exc_info()[2])
+            self.cr.exception("Impossible de convertir le fichier python \
+                               qui doit contenir des erreurs.\n \
+                               On retourne le fichier non converti \n \
+                               Prévenir la maintenance. \n" + string.join(l))
+            # On retourne néanmoins le source initial non converti (au cas où)
+            return self.text
+      elif outformat == 'execnoparseur':
+         return self.text
+      else:
+         raise "Format de sortie : %s, non supporté"
+         return None
+
diff --git a/convert/parseur_python.py b/convert/parseur_python.py
new file mode 100644 (file)
index 0000000..b999b6b
--- /dev/null
@@ -0,0 +1,308 @@
+#@ MODIF parseur_python Parsers  DATE 05/09/2001   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+import sys,string,re
+
+class ENTITE_JDC :
+    def __init__(self,pere):
+        self.texte = ''
+        pere.l_objets.append(self)
+
+    def set_text(self,texte):
+        self.texte = texte
+
+    def append_text(self,texte):
+        """
+        Ajoute texte à self.texte en mettant un retour chariot à la fin de texte
+        """
+        texte = texte+'\n'
+        self.texte = self.texte +texte
+
+class COMMENTAIRE(ENTITE_JDC):
+
+    def __str__(self):
+        """
+        Retourne une chaîne de caractères représentants self
+        sous une forme interprétable par EFICAS
+        """
+        s='COMMENTAIRE("""'+self.texte+'""")\n\n'
+        return s
+
+    def append_text(self,texte):
+        """
+        Ajoute texte à self.texte en enlevant le # initial
+        """
+        texte = texte+'\n'
+        if texte[0] == '#':
+            self.texte = self.texte+texte[1:]
+        else:
+            # le dièse n'est pas sur le premier caractère
+            amont,aval = string.split(texte,'#',1) # on découpe suivant la première occurrence de #
+            self.texte = self.texte +amont + aval
+        
+class COMMANDE(ENTITE_JDC):
+
+    def __str__(self):
+        """
+        Retourne self.texte
+        """
+        return self.texte+'\n'
+        
+    def get_nb_par(self):
+        """
+        Retourne la différence entre le nombre de parenthèses ouvrantes
+        et le nombre de parenthèses fermantes présentes dans self.texte
+        Peut donc retourner un entier négatif
+        """
+        # faire attention aux commentaires contenus dans self.texte
+        # qui peuvent eux-mêmes contenir des parenthèses !!!!
+        l_lignes = string.split(self.texte,'\n')
+        nb = 0
+        for ligne in l_lignes:
+            ligne = string.split(ligne,'#')[0]
+            nb = nb + (string.count(ligne,'(')-string.count(ligne,')'))
+        return nb
+
+class AFFECTATION(ENTITE_JDC):
+
+    def append_text(self,texte):
+        """
+        Ajoute texte à self.texte en enlevant tout retour chariot et tout point virgule
+        """
+        if texte[-1] == '\n' : texte = string.strip(texte[0:-1])\r
+        if texte[-1] == ';' : texte = string.strip(texte[0:-1])
+        self.texte = self.texte+texte
+        
+    def __str__(self):
+        """
+        Retourne une expression de l'affectation compréhensible par ACCAS
+        et exploitable par EFICAS
+        """
+        nom,valeur = string.split(self.texte,'=',1)
+        nom = string.strip(nom)
+        if valeur[-1] == '\n': valeur = valeur[:-1]
+        valeur = string.strip(valeur)
+        return nom+' = PARAMETRE(nom=\''+nom+'\',valeur="'+valeur+'")\n\n'
+
+class COMMANDE_COMMENTARISEE(ENTITE_JDC):
+
+    def append_text(self,texte):
+        """
+        Ajoute texte à self.texte en enlevant les doubles commentaires
+        """
+        texte = string.strip(texte)
+        texte = string.strip(texte[2:])
+        self.texte = self.texte+(len(self.texte)>0)*'\n'+texte
+
+    def __str__(self):
+        """
+        Retourne une expression de la commande commentarisée compréhensible par ACCAS
+        et exploitable par EFICAS
+        """
+        return "COMMANDE_COMM(texte='''"+self.texte+"''')\n"
+
+class AFFECTATION_EVAL(ENTITE_JDC):
+
+    def append_text(self,texte):
+        """
+        Ajoute texte à self.texte en enlevant tout retour chariot
+        """
+        if texte[-1] == '\n' : texte = texte[1:-1]
+        self.texte = self.texte+texte
+        
+    def __str__(self):
+        """
+        Retourne une expression du paramètre EVAL compréhensible par ACCAS
+        et exploitable par EFICAS
+        """
+        nom,valeur = string.split(self.texte,'=',1)
+        nom = string.strip(nom)
+        if valeur[-1] == '\n': valeur = valeur[:-1]
+        valeur = string.strip(valeur)
+        return nom+' = PARAMETRE_EVAL(nom=\''+nom+'\',valeur=\''+valeur+'\')\n\n'
+        
+class PARSEUR_PYTHON:
+    """
+    Cette classe sert à générer un objet PARSEUR_PYTHON qui réalise l'analyse d'un texte 
+    représentant un JDC Python en distinguant :
+    - les commentaires inter commandes
+    - les affectations
+    - les commandes
+    """
+    pattern_commande   = re.compile(r'^([A-Z][A-Z0-9_]+)([ \t\r\f\v]*)\(([\w\W]*)')
+    pattern_eval       = re.compile(r'^(EVAL)([ \t\r\f\v]*)\(([\w\W]*)')
+    pattern_ligne_vide = re.compile(r'^[\t\r\f\v\n]+')
+    
+    def __init__(self,texte):
+        self.texte = texte
+        self.l_objets=None
+
+    def is_affectation(self,texte):
+        """
+        Méthode booléenne qui retourne 1 si le texte est celui d'une affectation dans un jeu de commandes
+        Aster, 0 sinon
+        """
+        if '=' not in texte : return 0
+        if self.pattern_commande.match(texte):
+            # cas d'une procédure ...
+            return 0
+        amont,aval = string.split(texte,'=',1)
+        aval = string.strip(aval)
+        if self.pattern_commande.match(aval):
+            return 0
+        else:
+            return 1
+
+    def is_eval(self,texte):
+        """
+        Méthode booléenne qui retourne 1 si le texte est celui d'une affectation de type EVAL
+        dans un jeu de commandes Aster, 0 sinon
+        """
+        if '=' not in texte : return 0
+        if self.pattern_commande.match(texte):
+            # cas d'une procédure ...
+            return 0
+        amont,aval = string.split(texte,'=',1)
+        aval = string.strip(aval)
+        if not self.pattern_commande.match(aval) : return 0
+        if self.pattern_eval.match(aval):
+            return 1
+        else:
+            return 0
+            
+    def is_commande(self,texte):
+        """
+        Méthode booléenne qui retourne 1 si le texte est celui d'une commande dans un jeu de commandes
+        Aster, 0 sinon
+        """
+        if self.pattern_commande.match(texte):
+            # cas d'une procédure ...
+            return 1
+        # A ce stade il faut avoir un OPER ou une MACRO, bref un '=' !
+        if '=' not in texte : return 0
+        # on a un texte de la forme xxxx = yyyyy
+        # --> reste à analyser yyyy
+        amont,aval = string.split(texte,'=',1)
+        aval = string.strip(aval)
+        if self.pattern_commande.match(aval):
+            return 1
+        else:
+            return 0
+
+    def analyse(self):
+        """
+        Transforme dans self.fichier les commentaires Python (#...) par un objet
+        commentaire qui pourra donc être interprété par EFICAS.
+        Stocke le résultat dans self.texte
+        """
+        #l_lignes = open(self.fichier,'r').readlines()
+        l_lignes = string.split(self.texte,'\n')
+        commentaire_courant             = None
+        commande_courante               = None
+        affectation_courante            = None
+        commande_commentarisee_courante = None
+        self.l_objets = []
+        cpt = 0
+        for ligne in l_lignes :
+            cpt = cpt+1
+            if string.strip(ligne) == '':
+                # il s'agit d'un saut de ligne
+                # --> on l'ignore
+                continue
+            else:
+                liste = string.split(ligne,'##',1)
+                if len(liste) > 1:
+                    # on a trouvé un double commentaire dans la ligne
+                    before,after = liste
+                    if string.strip(before) == '':
+                        # il s'agit d'une commande commentarisée
+                        if commentaire_courant :
+                            commentaire_courant = None
+                        elif commande_courante :
+                            # on a un objet commentarisé à l'intérieur d'une commande
+                            # --> non traité pour l'instant
+                            commande_courante.append_text(ligne)
+                        elif commande_commentarisee_courante :
+                            # commande_commentarisee en cours : on ajoute la ligne
+                            commande_commentarisee_courante.append_text(ligne)
+                        else:
+                            # on crée un objet commande_commentarisee_courante
+                            commande_commentarisee_courante = COMMANDE_COMMENTARISEE(self)
+                            commande_commentarisee_courante.append_text(ligne)
+                        continue
+                    else:
+                        # on a un double commentaire en fin de ligne
+                        # --> pour l'instant on ne fait rien
+                        pass
+                new_ligne = string.split(ligne,'#')[0] # on enlève toute la partie commentaire de la ligne
+                new_ligne = string.strip(new_ligne)
+                if new_ligne == '' :
+                    # la ligne n'est qu'un commentaire précédé d'éventuels blancs
+                    if commande_courante :
+                        # il s'agit d'un commentaire à l'intérieur d'une commande --> on ne fait rien
+                        commande_courante.append_text(ligne)
+                    elif commentaire_courant :
+                        # il s'agit de la nième ligne d'un commentaire entre deux commandes
+                        # --> on ajoute cette ligne au commentaire courant
+                        commentaire_courant.append_text(ligne)
+                    else :
+                        # il s'agit d'un commentaire entre deux commandes
+                        # --> on le crée et il devient le commentaire courant
+                        commentaire_courant = COMMENTAIRE(self)
+                        commentaire_courant.append_text(ligne)
+                else:
+                    # la ligne contient des données autre qu'un éventuel commentaire
+                    if commentaire_courant :
+                        # on clôt un éventuel commentaire courant
+                        commentaire_courant = None
+                    if commande_courante :
+                        commande_courante.append_text(ligne)
+                        if commande_courante.get_nb_par() == 0:
+                            # la commande courante est terminée (autant de parenthèses fermantes qu'ouvrantes)
+                            commande_courante = None
+                    else:
+                        # il peut s'agir d'une commande ou d'une affectation ...
+                        # ou de la poursuite d'une affectation !!!!!
+                        # ou d'un EVAL !!!
+                        if self.is_eval(new_ligne):
+                            # --> affectation de type EVAL
+                            if affectation_courante : affectation_courante = None
+                            affectation = AFFECTATION_EVAL(self)
+                            affectation.append_text(ligne)
+                        elif self.is_affectation(new_ligne):
+                            # --> affectation
+                            affectation_courante = AFFECTATION(self)
+                            affectation_courante.append_text(ligne)
+                        elif self.is_commande(new_ligne):
+                            # --> commande
+                            commande_courante = COMMANDE(self)
+                            commande_courante.append_text(ligne)
+                            affectation_courante = None
+                            if commande_courante.get_nb_par() == 0:
+                                # la commande courante est terminée (autant de parenthèses fermantes qu'ouvrantes)
+                                commande_courante = None
+                        else:
+                            #--> poursuite d'une affectation
+                            affectation_courante.append_text(ligne)
+                                
+    def get_texte(self):
+        """
+        Retourne le texte issu de l'analyse
+        """
+        if not self.l_objets : self.analyse()
+        txt=''
+        for obj in self.l_objets:
+            txt = txt+str(obj)
+        return txt
+
+if __name__ == "__main__" :
+    #fichier = 'D:/Eficas_dev/Tests/zzzz100a.comm'
+    fichier = 'U:/Eficas_dev/Tests/test_eval.comm'
+    texte = open(fichier,'r').read()
+    txt = PARSEUR_PYTHON(texte).get_texte()
+    print txt
+    
diff --git a/generator/Formatage.py b/generator/Formatage.py
new file mode 100644 (file)
index 0000000..d54d464
--- /dev/null
@@ -0,0 +1,139 @@
+"""
+    Ce module contient la classe Formatage qui permet le formatage d'une 
+    liste de chaines de caractères dans une syntaxe représentative d'un
+    jeu de commandes en un texte présentable
+"""
+import types,string
+
+class Formatage :
+  """ 
+     Cette classe contient toutes les méthodes nécessaires au formatage
+     de la chaine de caracteres issue d'un generator en un fichier
+     'lisible' ie avec indentations
+  """
+  def __init__(self,l_jdc,code=None,mode=None,sep='=',l_max=72):
+    # l_jdc représente le jeu de commandes brut sous forme de liste
+    self.l_jdc = l_jdc
+    self.jdc_fini =''
+    self.count = 0
+    self.sep=sep
+    self.l_max=l_max
+    if mode == '.py':
+       self.sep = '='
+       self.l_max = 132 
+    elif code == 'ASTER':
+       self.sep = ':'
+       self.l_max = 72
+
+  def formate_jdc(self):
+    for etape in self.l_jdc:
+      self.count = self.count+1
+      self.texte_etape = ''
+      if type(etape)==types.ListType:
+        self.indent=[]
+        self.indent.append(len(etape[0]))
+        self.indent_courant = self.indent[0]
+        self.texte_etape = '\n' + etape[0]
+        if len(etape)>1 :
+          self.formate_etape(etape[1:])
+      else :
+        self.indent=[]
+        self.texte_etape = etape
+      self.jdc_fini = self.jdc_fini + '\n' + self.texte_etape
+    return self.jdc_fini
+
+  def formate_etape(self,liste):
+    ind = 0
+    for element in liste :
+      if type(element) == types.ListType:
+        # il s'agit d'un mot-clé facteur
+        # on écrit son nom
+        longueur = self.longueur(self.texte_etape)
+        try:
+          increment = len(('\n'+self.indent_courant*' ')*ind + element[0])
+        except:
+          print 'ERREUR'
+          print liste
+          print element
+        self.texte_etape = self.texte_etape + ('\n'+self.indent_courant*' ')*ind + element[0]
+        length = len(self.indent)
+        self.indent.insert(length,self.indent[length-1]+len(element[0]))
+        self.indent_courant = self.indent[length]
+        # on écrit ses fils
+        self.formate_etape(element[1:])
+      elif type(element) == types.StringType:
+        # il s'agit d'un mot-clé simple ou de ')' ou ');' ou '),'
+        if element == ')' or element == '),':
+          self.texte_etape = self.texte_etape + string.strip(element)
+          length = len(self.indent)
+          if length > 1:
+            last = self.indent[length-1]
+            self.indent.remove(last)
+            self.indent_courant=self.indent[length-2]
+          else :
+            self.indent_courant=self.indent[0]
+        elif element == ');':
+          length = len(self.indent)
+          if length > 1:
+            last = self.indent[length-1]
+            self.indent.remove(last)
+            self.indent_courant=self.indent[length-2]
+          else :
+            self.indent_courant=self.indent[0]
+          self.texte_etape = self.texte_etape + string.strip(element)
+        else :
+          longueur = self.longueur(self.texte_etape)
+          increment = len(('\n'+self.indent_courant*' ')*ind + string.strip(element))
+          #self.jdc_fini = self.jdc_fini + ('\n'+self.indent_courant*' ')*ind + string.strip(element)
+          if ((1-ind)*longueur+increment)  <= self.l_max :
+            self.texte_etape = self.texte_etape + ('\n'+self.indent_courant*' ')*ind + string.strip(element)
+          else :
+            # il faut couper ...
+            nom,valeur = string.split(element,self.sep,1)
+            chaine = self.creer_chaine(nom,valeur,'\n'+self.indent_courant*' ',ind)+','
+            #self.jdc_fini = self.jdc_fini + ('\n'+self.indent_courant*' ')*ind + string.strip(element)
+            self.texte_etape = self.texte_etape + chaine
+      ind = 1
+      
+  def longueur(self,texte):
+    """ 
+       texte est une string qui peut contenir des retours chariots
+       Cette méthode retourne la longueur de la dernière ligne de texte 
+    """
+    liste = string.split(texte,'\n')
+    return len(liste[-1])
+
+  def creer_chaine(self,nom,valeur,increment,ind):
+    s=''
+    if len(increment + nom + self.sep) <= self.l_max:
+      texte = increment*ind
+      label = nom + self.sep
+      s=texte + label
+      longueur = len(increment + label)
+      if len(string.split(valeur,'(')) == 1:
+        # il s'agit d'une vraie chaîne de caractères
+        val = len(valeur)
+        texte = (self.l_max-2-val)*' '+valeur
+        s=s+'\n'+texte
+      else :
+        # il s'agit d'une liste
+        liste = string.split(valeur,',')
+        i=0
+        for arg in liste :
+          ajout = string.strip(arg)
+          if len(ajout) == 0 : continue
+          longueur = self.longueur(texte = (texte + label)) + len(ajout +',') + (1-i)*len(increment)
+          if longueur  <= self.l_max:
+              if ajout[-1] != ')':
+                texte = texte + ajout +','
+              else :
+                texte = texte + ajout
+          else :
+            i=1
+            if ajout[-1] != ')':
+              texte = texte  + increment + (len(label)+2)*' ' + ajout +','
+            else :
+              texte = texte  + increment + (len(label)+2)*' ' + ajout
+      s=s+texte
+    return s
+
diff --git a/generator/__init__.py b/generator/__init__.py
new file mode 100644 (file)
index 0000000..89d4cb4
--- /dev/null
@@ -0,0 +1,13 @@
+"""
+   Ce package contient tous les générateurs de formats de sortie
+   à partir des objets d' EFICAS.
+
+   Ces générateurs sont implémentés sous forme de plugins
+"""
+
+from Extensions import pluginloader
+
+import generator
+
+plugins=pluginloader.PluginLoader(generator)
+
diff --git a/generator/generator_aplat.py b/generator/generator_aplat.py
new file mode 100644 (file)
index 0000000..c12b6da
--- /dev/null
@@ -0,0 +1,319 @@
+"""
+    Ce module contient le plugin generateur de fichier au format 
+    aplat pour EFICAS.
+
+"""
+import traceback
+import types,string,re
+
+from Noyau import N_CR
+from Noyau.N_utils import repr_float
+from Accas import ETAPE,PROC_ETAPE,MACRO_ETAPE,ETAPE_NIVEAU,JDC,FORM_ETAPE
+from Accas import MCSIMP,MCFACT,MCBLOC,MCList,EVAL
+from Accas import GEOM,ASSD,MCNUPLET
+from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM
+
+def entryPoint():
+   """
+       Retourne les informations nécessaires pour le chargeur de plugins
+
+       Ces informations sont retournées dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'aplat',
+        # La factory pour créer une instance du plugin
+          'factory' : AplatGenerator,
+          }
+
+
+class AplatGenerator:
+   """
+       Ce generateur parcourt un objet de type JDC et produit
+       un fichier au format aplat 
+
+       L'acquisition et le parcours sont réalisés par la méthode
+       generator.gener(objet_jdc,format)
+
+       L'écriture du fichier au format ini par appel de la méthode
+       generator.writefile(nom_fichier)
+
+       Ses caractéristiques principales sont exposées dans des attributs 
+       de classe :
+
+       - extensions : qui donne une liste d'extensions de fichier préconisées
+
+   """
+   # Les extensions de fichier préconisées
+   extensions=('.*',)
+
+   def __init__(self,cr=None):
+      # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
+      if cr :
+         self.cr=cr
+      else:
+         self.cr=N_CR.CR(debut='CR generateur format aplat pour eficas',
+                         fin='fin CR format aplat pour eficas')
+      self.init=''
+      # Le séparateur utiisé
+      self.sep='//'
+      # Le texte au format aplat est stocké dans l'attribut text
+      self.text=''
+
+   def writefile(self,filename):
+      fp=open(filename,'w')
+      fp.write(self.text)
+      fp.close()
+
+   def gener(self,obj,format='brut'):
+      """
+          Retourne une représentation du JDC obj sous une
+          forme qui est paramétrée par format.
+          Si format vaut 'brut', 'standard' ou 'beautifie', retourne le texte issu
+                       de generator
+      """
+      liste= self.generator(obj)
+      if format == 'brut':
+         self.text=liste
+      elif format == 'standard':
+         self.text=liste
+      elif format == 'beautifie':
+         self.text=liste
+      else:
+         raise "Format pas implémenté : "+format
+      return self.text
+
+   def generator(self,obj):
+      """
+         Cette methode joue un role d'aiguillage en fonction du type de obj
+         On pourrait utiliser les méthodes accept et visitxxx à la 
+         place (dépend des gouts !!!)
+      """
+      # ATTENTION a l'ordre des tests : il peut avoir de l'importance (héritage)
+      if isinstance(obj,PROC_ETAPE):
+         return self.generPROC_ETAPE(obj)
+      elif isinstance(obj,MACRO_ETAPE):
+         return self.generMACRO_ETAPE(obj)
+      elif isinstance(obj,FORM_ETAPE):
+         return self.generFORM_ETAPE(obj)
+      elif isinstance(obj,ETAPE):
+         return self.generETAPE(obj)
+      elif isinstance(obj,MCFACT):
+         return self.generMCFACT(obj)
+      elif isinstance(obj,MCList):
+         return self.generMCList(obj)
+      elif isinstance(obj,MCBLOC):
+         return self.generMCBLOC(obj)
+      elif isinstance(obj,MCSIMP):
+         return self.generMCSIMP(obj)
+      elif isinstance(obj,ASSD):
+         return self.generASSD(obj)
+      elif isinstance(obj,ETAPE_NIVEAU):
+         return self.generETAPE_NIVEAU(obj)
+      elif isinstance(obj,COMMENTAIRE):
+         return self.generCOMMENTAIRE(obj)
+      # Attention doit etre placé avant PARAMETRE (raison : héritage)
+      elif isinstance(obj,PARAMETRE_EVAL):
+         return self.generPARAMETRE_EVAL(obj)
+      elif isinstance(obj,PARAMETRE):
+         return self.generPARAMETRE(obj)
+      elif isinstance(obj,EVAL):
+         return self.generEVAL(obj)
+      elif isinstance(obj,COMMANDE_COMM):
+         return self.generCOMMANDE_COMM(obj)
+      elif isinstance(obj,JDC):
+         return self.generJDC(obj)
+      elif isinstance(obj,MCNUPLET):
+         return self.generMCNUPLET(obj)
+      else:
+         raise "Type d'objet non prévu",obj
+
+   def generJDC(self,obj):
+      """
+         Cette méthode convertit un objet JDC en une chaine de
+         caractères à la syntaxe aplat
+      """
+      text=''
+      if obj.definition.l_niveaux == ():
+         # Il n'y a pas de niveaux
+         for etape in obj.etapes:
+            text=text+self.generator(etape)+'\n'
+      else:
+         # Il y a des niveaux
+         for etape_niveau in obj.etapes_niveaux:
+            text=text+self.generator(etape_niveau)+'\n'
+      return text
+
+   def generCOMMANDE_COMM(self,obj):
+      """
+         Cette méthode convertit un COMMANDE_COMM
+         en une chaine de caractères à la syntaxe aplat 
+      """
+      l_lignes = string.split(obj.valeur,'\n')
+      txt=''
+      for ligne in l_lignes:
+          txt = txt + '##'+ligne+'\n'
+      return txt
+
+   def generEVAL(self,obj):
+      """
+         Cette méthode convertit un EVAL
+         en une chaine de caractères à la syntaxe aplat 
+      """
+      return 'EVAL("""'+ obj.valeur +'""")'
+
+   def generCOMMENTAIRE(self,obj):
+      """
+         Cette méthode convertit un COMMENTAIRE
+         en une chaine de caractères à la syntaxe aplat  
+      """
+      l_lignes = string.split(obj.valeur,'\n')
+      txt=''
+      for ligne in l_lignes:
+        txt = txt + '#'+ligne+'\n'
+      return txt
+
+   def generPARAMETRE_EVAL(self,obj):
+      """
+         Cette méthode convertit un PARAMETRE_EVAL
+         en une chaine de caractères à la syntaxe aplat 
+      """
+      if obj.valeur == None:
+         return obj.nom + ' = None ;\n'
+      else:
+         return obj.nom + ' = '+ self.generator(obj.valeur) +';\n'
+
+   def generPARAMETRE(self,obj):
+      """
+         Cette méthode convertit un PARAMETRE
+         en une chaine de caractères à la syntaxe aplat 
+      """
+      if type(obj.valeur) == types.StringType:
+        return obj.nom + " = '" + obj.valeur + "';\n"
+      else:
+        return obj.nom + ' = ' + str(obj.valeur) + ';\n'
+
+   def generETAPE_NIVEAU(self,obj):
+      """
+         Cette méthode convertit une étape niveau
+         en une chaine de caractères à la syntaxe aplat 
+      """
+      text=''
+      if obj.etapes_niveaux == []:
+        for etape in obj.etapes:
+          text=text+self.generator(etape)+'\n'
+      else:
+        for etape_niveau in obj.etapes_niveaux:
+          text=text+self.generator(etape_niveau)+'\n'
+      return text
+
+   def gener_etape(self,obj):
+      """
+         Cette méthode est utilisé pour convertir les objets etape
+         en une chaine de caractères à la syntaxe aplat 
+      """
+      text=''
+      for v in obj.mc_liste:
+         text=text + self.generator(v)
+      if text=='':
+         return self.init+'\n'
+      else:
+         return text
+
+   def generETAPE(self,obj):
+      """
+         Cette méthode convertit une étape
+         en une chaine de caractères à la syntaxe aplat 
+      """
+      try:
+        sdname= self.generator(obj.sd)
+      except:
+        sdname='sansnom'
+      self.init = sdname + self.sep + obj.nom
+      return self.gener_etape(obj)
+
+   def generMACRO_ETAPE(self,obj):
+      """
+         Cette méthode convertit une macro-étape
+         en une chaine de caractères à la syntaxe aplat 
+      """
+      try:
+        if obj.sd == None:
+          self.init = obj.nom
+        else:
+          sdname= self.generator(obj.sd)
+          self.init = sdname + self.sep + obj.nom
+      except:
+        self.init = 'sansnom' + self.sep + obj.nom
+
+      return self.gener_etape(obj)
+
+   generPROC_ETAPE = generMACRO_ETAPE
+
+   generFORM_ETAPE = generMACRO_ETAPE
+
+   def generASSD(self,obj):
+      """
+          Convertit un objet dérivé d'ASSD en une chaine de caractères à la
+          syntaxe aplat 
+      """
+      return obj.get_name()
+
+   def generMCList(self,obj):
+      """
+          Convertit un objet MCList en une chaine de caractères à la
+          syntaxe aplat
+      """
+      i=0
+      text = ''
+      init = self.init + self.sep + obj.nom
+      old_init=self.init
+      for data in self.data :
+        i=i+1
+        self.init = init + self.sep + "occurrence n°"+`i`
+        text = text + self.generator(data)
+      self.init=old_init
+      return text
+
+   def generMCSIMP(self,obj) :
+      """
+          Convertit un objet MCSIMP en une chaine de caractères à la
+          syntaxe aplat 
+      """
+      if type(obj.valeur) in (types.TupleType,types.ListType) :
+         # On est en présence d'une liste de valeur
+         rep = '('
+         for val in self.valeur:
+           if type(val) == types.InstanceType :
+             rep = rep + self.generator(val) +','
+           else:
+             rep = rep + `val`+','
+         rep = rep + ')'
+      elif type(obj.valeur) == types.InstanceType :
+         # On est en présence d'une valeur unique de type instance
+         rep = self.generator(obj.valeur)
+      else :
+         # On est en présence d'une valeur unique
+         rep = `obj.valeur`
+      return self.init + self.sep + obj.nom + ' :' + rep + '\n'
+
+   def generMCCOMPO(self,obj):
+      """
+          Convertit un objet MCCOMPO en une chaine de caractères à la
+          syntaxe aplat
+      """
+      text = ''
+      old_init=self.init
+      self.init = self.init + self.sep + obj.nom
+      for mocle in obj.mc_liste :
+        text = text + self.generator(mocle)
+      self.init=old_init
+      return text
+
+   generMCFACT=generMCCOMPO
+
+   generMCBLOC=generMCCOMPO
+
+   generMCNUPLET=generMCCOMPO
+
+
diff --git a/generator/generator_asterv5.py b/generator/generator_asterv5.py
new file mode 100644 (file)
index 0000000..fa3b949
--- /dev/null
@@ -0,0 +1,489 @@
+"""
+    Ce module contient le plugin generateur de fichier au format asterv5 pour EFICAS.
+
+
+"""
+import traceback
+import types,string
+
+from Noyau import N_CR
+from Accas import ETAPE,PROC_ETAPE,MACRO_ETAPE,ETAPE_NIVEAU,JDC,FORM_ETAPE
+from Accas import MCSIMP,MCFACT,MCBLOC,MCList,EVAL
+from Accas import GEOM,ASSD
+from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM
+from Formatage import Formatage
+
+def entryPoint():
+   """
+       Retourne les informations nécessaires pour le chargeur de plugins
+
+       Ces informations sont retournées dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'asterv5',
+        # La factory pour créer une instance du plugin
+          'factory' : AsterGenerator,
+          }
+
+
+class AsterGenerator:
+   """
+       Ce generateur parcourt un objet de type JDC et produit
+       un fichier au format asterv5
+
+       L'acquisition et le parcours sont réalisés par la méthode
+       generator.gener(objet_jdc,format)
+
+       L'écriture du fichier au format asterv5 est réalisée par appel de la méthode
+       generator.writefile(nom_fichier)
+
+       Ses caractéristiques principales sont exposées dans des attributs 
+       de classe :
+
+       - extensions : qui donne une liste d'extensions de fichier préconisées
+
+   """
+   # Les extensions de fichier préconisées
+   extensions=('.comm',)
+
+   def __init__(self,cr=None):
+      # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
+      if cr :
+         self.cr=cr
+      else:
+         self.cr=N_CR.CR(debut='CR generateur format asterv5',
+                         fin='fin CR format asterv5')
+      # Le texte au format asterv5 est stocké dans l'attribut text
+      self.text=''
+
+   def writefile(self,filename):
+      fp=open(filename,'w')
+      fp.write(self.text)
+      fp.close()
+
+   def gener(self,obj,format='brut'):
+      """
+          Retourne une représentation du JDC obj sous une
+          forme qui est paramétrée par format.
+          Si format vaut 'brut',      retourne une liste de listes de ...
+          Si format vaut 'standard',  retourne un texte obtenu par concaténation de la liste
+          Si format vaut 'beautifie', retourne le meme texte beautifié
+      """
+      liste= self.generator(obj)
+      if format == 'brut':
+         self.text=liste
+      elif format == 'standard':
+         self.text=string.join(liste)
+      elif format == 'beautifie':
+         jdc_formate = Formatage(liste,sep=':',l_max=72)
+         self.text=jdc_formate.formate_jdc()
+      else:
+         raise "Format pas implémenté : "+format
+      return self.text
+
+   def generator(self,obj):
+      """
+         Cette methode joue un role d'aiguillage en fonction du type de obj
+         On pourrait utiliser les méthodes accept et visitxxx à la
+         place (dépend des gouts !!!)
+      """
+      # ATTENTION a l'ordre des tests : il peut avoir de l'importance (héritage)
+      if isinstance(obj,PROC_ETAPE):
+         return self.generPROC_ETAPE(obj)
+      elif isinstance(obj,MACRO_ETAPE):
+         return self.generMACRO_ETAPE(obj)
+      elif isinstance(obj,FORM_ETAPE):
+         return self.generFORM_ETAPE(obj)
+      elif isinstance(obj,ETAPE):
+         return self.generETAPE(obj)
+      elif isinstance(obj,MCFACT):
+         return self.generMCFACT(obj)
+      elif isinstance(obj,MCList):
+         return self.generMCList(obj)
+      elif isinstance(obj,MCBLOC):
+         return self.generMCBLOC(obj)
+      elif isinstance(obj,MCSIMP):
+         return self.generMCSIMP(obj)
+      elif isinstance(obj,ASSD):
+         return self.generASSD(obj)
+      elif isinstance(obj,ETAPE_NIVEAU):
+         return self.generETAPE_NIVEAU(obj)
+      elif isinstance(obj,COMMENTAIRE):
+         return self.generCOMMENTAIRE(obj)
+      # Attention doit etre placé avant PARAMETRE (raison : héritage)
+      elif isinstance(obj,PARAMETRE_EVAL):
+         return self.generPARAMETRE_EVAL(obj)
+      elif isinstance(obj,PARAMETRE):
+         return self.generPARAMETRE(obj)
+      elif isinstance(obj,EVAL):
+         return self.generEVAL(obj)
+      elif isinstance(obj,COMMANDE_COMM):
+         return self.generCOMMANDE_COMM(obj)
+      elif isinstance(obj,JDC):
+         return self.generJDC(obj)
+      else:
+         raise "Type d'objet non prévu",obj
+
+   def generJDC(self,obj):
+      """
+         Cette méthode convertit un objet JDC en une liste de chaines de 
+         caractères à la syntaxe asterv5
+      """
+      l=[]
+      if obj.definition.l_niveaux == ():
+         # Il n'y a pas de niveaux
+         for etape in obj.etapes:
+            l.append(self.generator(etape))
+      else:
+         # Il y a des niveaux
+         for etape_niveau in obj.etapes_niveaux:
+            l.extend(self.generator(etape_niveau))
+      if l != [] : 
+         # Si au moins une étape, on ajoute le retour chariot sur la dernière étape
+         if type(l[-1])==types.ListType:
+            l[-1][-1] = l[-1][-1]+'\n'
+         elif type(l[-1])==types.StringType:
+            l[-1] = l[-1]+'\n' 
+      return l
+
+   def generCOMMANDE_COMM(self,obj):
+      """
+         Cette méthode convertit un COMMANDE_COMM
+         en une liste de chaines de caractères à la syntaxe asterv5
+      """
+      l_lignes = string.split(obj.valeur,'\n')
+      txt=''
+      for ligne in l_lignes:
+          txt = txt + '%%'+ligne+'\n'
+      return txt
+
+   def generEVAL(self,obj):
+      """
+         Cette méthode convertit un EVAL
+         en une liste de chaines de caractères à la syntaxe asterv5
+      """
+      return 'EVAL("'+ obj.valeur +'")'
+
+   def generCOMMENTAIRE(self,obj):
+      """
+         Cette méthode convertit un COMMENTAIRE
+         en une liste de chaines de caractères à la syntaxe asterv5
+      """
+      l_lignes = string.split(obj.valeur,'\n')
+      txt=''
+      for ligne in l_lignes:
+        txt = txt + '%'+ligne+'\n'
+      return txt
+
+   def generPARAMETRE_EVAL(self,obj):
+      """
+         Cette méthode convertit un PARAMETRE_EVAL
+         en une liste de chaines de caractères à la syntaxe asterv5
+      """
+      if obj.valeur == None:
+         return obj.nom + ' = None ;\n'
+      else:
+         return obj.nom + ' = '+ self.generator(obj.valeur) +';\n'
+
+   def generPARAMETRE(self,obj):
+      """
+         Cette méthode convertit un PARAMETRE
+         en une liste de chaines de caractères à la syntaxe asterv5
+      """
+      if type(obj.valeur) == types.StringType:
+        return obj.nom + " = '" + obj.valeur + "';\n"
+      else:
+        return obj.nom + ' = ' + str(obj.valeur) + ';\n'
+
+   def generETAPE_NIVEAU(self,obj):
+      """
+         Cette méthode convertit une étape niveau
+         en une liste de chaines de caractères à la syntaxe asterv5
+      """
+      l=[]
+      if obj.etapes_niveaux == []:
+        for etape in obj.etapes:
+          l.append(self.generator(etape))
+      else:
+        for etape_niveau in obj.etapes_niveaux:
+          l.extend(self.generator(etape_niveau))
+      return l
+
+   def generETAPE(self,obj):
+      """
+         Cette méthode convertit une étape
+         en une liste de chaines de caractères à la syntaxe asterv5
+      """
+      try:
+        if obj.reuse != None:
+          sdname= "&" + self.generator(obj.reuse)
+        else:
+          sdname= self.generator(obj.sd)
+      except:
+        sdname='sansnom'
+      l=[]
+      label=sdname + '='+obj.definition.nom+'('
+      l.append(label)
+      for v in obj.mc_liste:
+        if isinstance(v,MCBLOC) or isinstance(v,MCList):
+          liste=self.generator(v)
+          for mocle in liste :
+            l.append(mocle)
+        else:
+          l.append(self.generator(v))
+      if len(l) == 1:
+        l[0]=label+');'
+      else :
+        l.append(');')
+      return l
+
+   def generFORM_ETAPE(self,obj):
+        """
+            Méthode particulière pour les objets de type FORMULE
+        """
+        l=[]
+        nom = obj.get_nom()
+        if nom == '' : nom = 'sansnom'
+        if len(obj.mc_liste)>0:
+            l.append(nom + ' = FORMULE(')
+            s=obj.type_retourne + ' = ' + "'''" + obj.arguments + ' = ' + obj.corps+"'''"
+            l.append(s)
+            l.append(');')
+        else:
+            l.append(nom+' = FORMULE();')
+        return l
+
+   def generMACRO_ETAPE(self,obj):
+      """
+         Cette méthode convertit une macro-étape
+         en une liste de chaines de caractères à la syntaxe asterv5
+      """
+      if obj.definition.nom == 'FORMULE' : return self.gen_ast_formule(obj)
+      try:
+        if obj.reuse != None:
+          sdname= "&" + self.generator(obj.reuse)+'='
+        elif obj.sd == None:
+          sdname=''
+        else:
+          sdname= self.generator(obj.sd)+'='
+      except:
+        sdname='sansnom='
+      l=[]
+      label = sdname + obj.definition.nom+'('
+      l.append(label)
+      for v in obj.mc_liste:
+        if isinstance(v,MCBLOC) or isinstance(v,MCList):
+          liste=self.generator(v)
+          for mocle in liste :
+            l.append(mocle)
+        else:
+          # MCFACT ou MCSIMP
+          l.append(self.generator(v))
+      if len(l) == 1:
+        l[0]=label+');'
+      else :
+        l.append(');')
+      return l
+
+   def gen_ast_formule(self,obj):
+      """ 
+           Méthode gen_ast particuliere aux objets de type FORMULE 
+      """
+      label='!FORMULE('
+      try:
+        sdname= self.generator(obj.sd)
+      except:
+        sdname='sansnom'
+      l=[]
+      l.append(label)
+      for v in obj.mc_liste:
+        s=''
+        s= v.nom+':'+sdname+'('+v.valeur+')'
+        l.append(s)
+      if len(l) == 1:
+        l[0]=label+');'
+      else :
+        l.append(');')
+      return l
+
+   def generPROC_ETAPE(self,obj):
+      """
+         Cette méthode convertit une étape
+         en une liste de chaines de caractères à la syntaxe asterv5
+      """
+      l=[]
+      label=obj.definition.nom+'('
+      l.append(label)
+      for v in obj.mc_liste:
+        if isinstance(v,MCBLOC) or isinstance(v,MCList):
+          liste=self.generator(v)
+          for mocle in liste :
+            l.append(mocle)
+        else:
+          l.append(self.generator(v))
+      if len(l) == 1:
+        l[0]=label+');'
+      else :
+        l.append(');')
+      return l
+
+   def generMCSIMP(self,obj) :
+      """
+          Convertit un objet MCSIMP en une liste de chaines de caractères à la
+          syntaxe asterv5
+      """
+      if type(obj.valeur) == types.TupleType :
+        s = '('
+        for val in obj.valeur :
+          if s != '(': s = s + ','
+          if type(val) == types.InstanceType :
+            if isinstance(val,PARAMETRE):
+              # il ne faut pas prendre la string que retourne gen_ast
+              # mais seulement le nom dans le cas d'un paramètre
+              s = s + val.nom
+            else:
+              s = s + self.generator(val)
+          elif self.wait_geom(obj):
+            s = s + val
+          elif type(val) == types.FloatType :
+            s = s + self.repr_float(val)
+          else :
+            s = s + `val`
+        s = s + ')'
+        s=obj.nom+':'+s+' '
+        return s
+      else :
+        if type(obj.valeur) == types.InstanceType :
+          if isinstance(obj.valeur,PARAMETRE):
+            # il ne faut pas prendre la string que retourne gen_ast
+            # mais seulement str dans le cas d'un paramètre
+            s = obj.valeur.nom
+          else:
+            s =  self.generator(obj.valeur)
+        elif self.wait_geom(obj):
+            s = obj.valeur
+        elif type(obj.valeur) == types.FloatType :
+            s = self.repr_float(obj.valeur)
+        else :
+          s = `obj.valeur`
+        s=obj.nom+':'+s+' '
+        return s
+
+   def wait_geom(self,obj):
+      for typ in obj.definition.type:
+        if type(typ) == types.ClassType :
+          if issubclass(typ,GEOM) : return 1
+      return 0
+
+   def repr_float(self,valeur):
+      """ 
+          Cette fonction représente le réel valeur comme une chaîne de caractères
+          sous forme mantisse exposant si nécessaire cad si le nombre contient plus de 5 caractères
+          NB : valeur est un réel au format Python ou une chaîne de caractères représentant un réel
+      """
+      if type(valeur) == types.StringType : valeur = eval(valeur)
+      if valeur == 0. : return '0.0'
+      if abs(valeur) > 1. :
+        if abs(valeur) < 10000. : return repr(valeur)
+      else :
+        if abs(valeur) > 0.01 : return repr(valeur)
+      t=repr(valeur)
+      if string.find(t,'e') != -1 or string.find(t,'E') != -1 :
+        # le réel est déjà sous forme mantisse exposant !
+        # --> on remplace e par E
+        t=string.replace(t,'e','E')
+        # --> on doit encore vérifier que la mantisse contient bien un '.'
+        if string.find(t,'.')!= -1:
+          return t
+        else:
+          # -->il faut rajouter le point avant le E
+          t=string.replace(t,'E','.E')
+          return t
+      s=''
+      neg = 0
+      if t[0]=='-':
+        s=s+t[0]
+        t=t[1:]
+      cpt = 0
+      if string.atof(t[0]) == 0.:
+        # réel plus petit que 1
+        neg = 1
+        t=t[2:]
+        cpt=1
+        while string.atof(t[0]) == 0. :
+          cpt = cpt+1
+          t=t[1:]
+        s=s+t[0]+'.'
+        for c in t[1:]:
+          s=s+c
+      else:
+        # réel plus grand que 1
+        s=s+t[0]+'.'
+        if string.atof(t[1:]) == 0.:
+          l=string.split(t[1:],'.')
+          cpt = len(l[0])
+        else:
+          r=0
+          pt=0
+          for c in t[1:]:
+            r=r+1
+            if c != '.' :
+              if pt != 1 : cpt = cpt + 1
+              s=s+c
+            else:
+              pt = 1
+              if r+1 == len(t) or string.atof(t[r+1:]) == 0.:break
+      s=s+'E'+neg*'-'+repr(cpt)
+      return s
+
+   def generASSD(self,obj):
+      """
+          Convertit un objet dérivé d'ASSD en une chaine de caractères à la
+          syntaxe asterv5
+      """
+      return obj.get_name()
+
+   def generMCFACT(self,obj):
+      """
+          Convertit un objet MCFACT en une liste de chaines de caractères à la
+          syntaxe asterv5
+      """
+      l=[]
+      label=obj.nom + ':('
+      l.append(label)
+      for v in obj.mc_liste:
+        if isinstance(v,MCBLOC) or isinstance(v,MCList):
+          liste=self.generator(v)
+          for mocle in liste :
+            l.append(mocle)
+        else:
+          l.append(self.generator(v))
+      l.append(')')
+      return l
+
+   def generMCList(self,obj):
+      """
+          Convertit un objet MCList en une liste de chaines de caractères à la
+          syntaxe asterv5
+      """
+      l=[]
+      for mcfact in obj.data:
+         l.append(self.generator(mcfact))
+      return l
+
+   def generMCBLOC(self,obj):
+      """
+          Convertit un objet MCBLOC en une liste de chaines de caractères à la
+          syntaxe asterv5
+      """
+      l=[]
+      for v in obj.mc_liste:
+        if isinstance(v,MCBLOC) or isinstance(v,MCList):
+          liste=self.generator(v)
+          for mocle in liste :
+            l.append(mocle)
+        else:
+          l.append(self.generator(v))
+      return l
+
diff --git a/generator/generator_ini.py b/generator/generator_ini.py
new file mode 100644 (file)
index 0000000..64b5bfd
--- /dev/null
@@ -0,0 +1,109 @@
+"""
+    Ce module contient le plugin generateur de fichier
+    au format ini pour EFICAS.
+
+
+"""
+import traceback
+import types,string
+
+from Noyau import N_CR
+from Accas import MCSIMP,MCFACT
+
+def entryPoint():
+   """
+       Retourne les informations nécessaires pour le chargeur de plugins
+       Ces informations sont retournées dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'ini',
+        # La factory pour créer une instance du plugin
+          'factory' : IniGenerator,
+          }
+
+
+class IniGenerator:
+   """
+       Ce generateur parcourt un objet de type MCFACT et produit
+       un fichier au format ini 
+       L'acquisition et le parcours sont réalisés par le méthode
+       generator.gener(objet_mcfact)
+       L'écriture du fichier au format ini par appel de la méthode
+       generator.writefile(nom_fichier)
+
+       Ses caractéristiques principales sont exposées dans des attributs 
+       de classe :
+
+       - extensions : qui donne une liste d'extensions de fichier préconisées
+
+   """
+   # Les extensions de fichier préconisées
+   extensions=('.ini','.conf')
+
+   def __init__(self,cr=None):
+      # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
+      if cr :
+         self.cr=cr
+      else:
+         self.cr=N_CR.CR(debut='CR generateur format ini',
+                         fin='fin CR format ini')
+      # Le texte au format ini est stocké dans l'attribut text
+      self.text=''
+
+   def writefile(self,filename):
+      fp=open(filename,'w')
+      fp.write(self.text)
+      fp.close()
+
+   def gener(self,obj):
+      """
+         Tous les mots-clés simples du niveau haut sont mis dans la section DEFAUT
+         Tous les mots-clés facteurs sont convertis en sections
+         Un mot-clé facteur ne peut contenir que des mots-clés simples. Sinon => erreur
+      """
+      liste_mcfact=[]
+      sect_defaut=''
+      for mocle in obj.mc_liste:
+         if isinstance(mocle,MCFACT):
+            liste_mcfact.append(self.generMCFACT(mocle))
+         elif isinstance(mocle,MCSIMP):
+            sect_defaut=sect_defaut+self.generMCSIMP(mocle)
+         else:
+            self.cr.fatal("Entite inconnue ou interdite : "+`mocle`)
+      self.text=''
+      if sect_defaut != '':
+         self.text="[DEFAULT]\n"+sect_defaut
+      self.text=self.text + string.join(liste_mcfact,'\n')
+      return self.text
+
+   def generMCFACT(self,obj):
+      """
+         Cette méthode convertit un mot-clé facteur ne contenant que des mots-clés
+         simples en une chaine de caractères
+      """
+      sect_text='[%s]\n' % obj.nom
+      for mocle in obj.mc_liste:
+         if isinstance(mocle,MCSIMP):
+            sect_text=sect_text+self.generMCSIMP(mocle)
+         else:
+            self.cr.fatal("Entite inconnue ou interdite : "+`mocle`+" Elle est ignorée")
+      return sect_text
+
+   def generMCSIMP(self,obj):
+      """
+         Cette méthode convertit un mot-clé simple en une chaine de caractères
+         au format ini
+      """
+      s=''
+      if type(obj.valeur) == types.TupleType :
+         self.cr.fatal("Les tuples ne sont pas supportés pour le format ini : "+ obj.nom)
+         s="%s = %s\n" % (obj.nom,"ERREUR")
+      else :
+         try:
+            s="%s = %s\n" % (obj.nom,obj.valeur)
+         except Exception,e :
+            self.cr.fatal("Type de valeur non supporté par le format ini : "+ obj.nom + '\n'+str(e))
+            s="%s = %s\n" % (obj.nom,"ERREUR")
+      return s
+
diff --git a/generator/generator_pyth.py b/generator/generator_pyth.py
new file mode 100644 (file)
index 0000000..6d91122
--- /dev/null
@@ -0,0 +1,111 @@
+"""
+    Ce module contient le plugin generateur de fichier au format pyth pour EFICAS.
+
+
+"""
+import traceback
+import types,string
+
+from Noyau import N_CR
+from Accas import MCSIMP,MCFACT
+
+def entryPoint():
+   """
+       Retourne les informations nécessaires pour le chargeur de plugins
+
+       Ces informations sont retournées dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'pyth',
+        # La factory pour créer une instance du plugin
+          'factory' : PythGenerator,
+          }
+
+
+class PythGenerator:
+   """
+       Ce generateur parcourt un objet de type MCFACT et produit
+       un fichier au format pyth
+
+       L'acquisition et le parcours sont réalisés par la méthode
+       generator.gener(objet_mcfact)
+
+       L'écriture du fichier au format ini par appel de la méthode
+       generator.writefile(nom_fichier)
+
+       Ses caractéristiques principales sont exposées dans des attributs 
+       de classe :
+
+       - extensions : qui donne une liste d'extensions de fichier préconisées
+
+   """
+   # Les extensions de fichier préconisées
+   extensions=('.py','.comm')
+
+   def __init__(self,cr=None):
+      # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
+      if cr :
+         self.cr=cr
+      else:
+         self.cr=N_CR.CR(debut='CR generateur format ini',
+                         fin='fin CR format ini')
+      # Le texte au format pyth est stocké dans l'attribut text
+      self.text=''
+
+   def writefile(self,filename):
+      fp=open(filename,'w')
+      fp.write(self.text)
+      fp.close()
+
+   def gener(self,obj,format='standard'):
+      """
+         Tous les mots-clés simples du niveau haut sont transformés en variables 
+
+         Tous les mots-clés facteurs sont convertis en dictionnaires
+
+         Les mots-clés multiples ne sont pas traités
+      """
+      s=''
+      for mocle in obj.mc_liste:
+         if isinstance(mocle,MCFACT):
+            valeur=self.generMCFACT(mocle)
+            s=s+"%s = %s\n" % (mocle.nom,valeur)
+         elif isinstance(v,MCSIMP):
+            valeur = self.generMCSIMP(mocle)
+            s=s+"%s = %s\n" % (mocle.nom,valeur)
+         else:
+            self.cr.fatal("Entite inconnue ou interdite : "+`mocle`)
+      self.text=s
+      return self.text
+
+   def generMCFACT(self,obj):
+      """
+         Cette méthode convertit un mot-clé facteur 
+         en une chaine de caractères représentative d'un dictionnaire
+      """
+      s = '{'
+      for mocle in obj.mc_liste:
+         if isinstance(mocle,MCSIMP):
+            valeur = self.generMCSIMP(mocle)
+            s=s+"'%s' : %s,\n" % (mocle.nom,valeur)
+         elif isinstance(mocle,MCFACT):
+            valeur=self.generMCFACT(mocle)
+            s=s+"'%s' : %s,\n" % (mocle.nom,valeur)
+         else:
+            self.cr.fatal("Entite inconnue ou interdite : "+`mocle`+" Elle est ignorée")
+      s=s+'}'
+      return s
+
+   def generMCSIMP(self,obj):
+      """
+         Cette méthode convertit un mot-clé simple en une chaine de caractères
+         au format pyth
+      """
+      try:
+         s="%s" % obj.valeur
+      except Exception,e :
+         self.cr.fatal("Type de valeur non supporté par le format pyth : "+ obj.nom + '\n'+str(e))
+         s="ERREUR"
+      return s
+
diff --git a/generator/generator_python.py b/generator/generator_python.py
new file mode 100644 (file)
index 0000000..6220c81
--- /dev/null
@@ -0,0 +1,492 @@
+"""
+    Ce module contient le plugin generateur de fichier au format 
+    python pour EFICAS.
+
+"""
+import traceback
+import types,string,re
+
+from Noyau import N_CR
+from Noyau.N_utils import repr_float
+from Accas import ETAPE,PROC_ETAPE,MACRO_ETAPE,ETAPE_NIVEAU,JDC,FORM_ETAPE
+from Accas import MCSIMP,MCFACT,MCBLOC,MCList,EVAL
+from Accas import GEOM,ASSD,MCNUPLET
+from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM
+from Formatage import Formatage
+
+def entryPoint():
+   """
+       Retourne les informations nécessaires pour le chargeur de plugins
+
+       Ces informations sont retournées dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'python',
+        # La factory pour créer une instance du plugin
+          'factory' : PythonGenerator,
+          }
+
+
+class PythonGenerator:
+   """
+       Ce generateur parcourt un objet de type JDC et produit
+       un fichier au format python 
+
+       L'acquisition et le parcours sont réalisés par la méthode
+       generator.gener(objet_jdc,format)
+
+       L'écriture du fichier au format ini par appel de la méthode
+       generator.writefile(nom_fichier)
+
+       Ses caractéristiques principales sont exposées dans des attributs 
+       de classe :
+
+       - extensions : qui donne une liste d'extensions de fichier préconisées
+
+   """
+   # Les extensions de fichier préconisées
+   extensions=('.comm',)
+
+   def __init__(self,cr=None):
+      # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
+      if cr :
+         self.cr=cr
+      else:
+         self.cr=N_CR.CR(debut='CR generateur format python pour python',
+                         fin='fin CR format python pour python')
+      # Le texte au format python est stocké dans l'attribut text
+      self.text=''
+
+   def writefile(self,filename):
+      fp=open(filename,'w')
+      fp.write(self.text)
+      fp.close()
+
+   def gener(self,obj,format='brut'):
+      """
+          Retourne une représentation du JDC obj sous une
+          forme qui est paramétrée par format.
+          Si format vaut 'brut', retourne une liste de listes de ...
+          Si format vaut 'standard', retourne un texte obtenu par concaténation de la liste
+          Si format vaut 'beautifie', retourne le meme texte beautifié
+      """
+      liste= self.generator(obj)
+      if format == 'brut':
+         self.text=liste
+      elif format == 'standard':
+         self.text=string.join(liste)
+      elif format == 'beautifie':
+         jdc_formate = Formatage(liste,mode='.py')
+         self.text=jdc_formate.formate_jdc()
+      else:
+         raise "Format pas implémenté : "+format
+      return self.text
+
+   def generator(self,obj):
+      """
+         Cette methode joue un role d'aiguillage en fonction du type de obj
+         On pourrait utiliser les méthodes accept et visitxxx à la 
+         place (dépend des gouts !!!)
+      """
+      # ATTENTION a l'ordre des tests : il peut avoir de l'importance (héritage)
+      if isinstance(obj,PROC_ETAPE):
+         return self.generPROC_ETAPE(obj)
+      elif isinstance(obj,MACRO_ETAPE):
+         return self.generMACRO_ETAPE(obj)
+      elif isinstance(obj,FORM_ETAPE):
+         return self.generFORM_ETAPE(obj)
+      elif isinstance(obj,ETAPE):
+         return self.generETAPE(obj)
+      elif isinstance(obj,MCFACT):
+         return self.generMCFACT(obj)
+      elif isinstance(obj,MCList):
+         return self.generMCList(obj)
+      elif isinstance(obj,MCBLOC):
+         return self.generMCBLOC(obj)
+      elif isinstance(obj,MCSIMP):
+         return self.generMCSIMP(obj)
+      elif isinstance(obj,ASSD):
+         return self.generASSD(obj)
+      elif isinstance(obj,ETAPE_NIVEAU):
+         return self.generETAPE_NIVEAU(obj)
+      elif isinstance(obj,COMMENTAIRE):
+         return self.generCOMMENTAIRE(obj)
+      # Attention doit etre placé avant PARAMETRE (raison : héritage)
+      elif isinstance(obj,PARAMETRE_EVAL):
+         return self.generPARAMETRE_EVAL(obj)
+      elif isinstance(obj,PARAMETRE):
+         return self.generPARAMETRE(obj)
+      elif isinstance(obj,EVAL):
+         return self.generEVAL(obj)
+      elif isinstance(obj,COMMANDE_COMM):
+         return self.generCOMMANDE_COMM(obj)
+      elif isinstance(obj,JDC):
+         return self.generJDC(obj)
+      elif isinstance(obj,MCNUPLET):
+         return self.generMCNUPLET(obj)
+      else:
+         raise "Type d'objet non prévu",obj
+
+   def generJDC(self,obj):
+      """
+         Cette méthode convertit un objet JDC en une liste de chaines de
+         caractères à la syntaxe python
+      """
+      l=[]
+      if obj.definition.l_niveaux == ():
+         # Il n'y a pas de niveaux
+         for etape in obj.etapes:
+            l.append(self.generator(etape))
+      else:
+         # Il y a des niveaux
+         for etape_niveau in obj.etapes_niveaux:
+            l.extend(self.generator(etape_niveau))
+      if l != [] :
+         # Si au moins une étape, on ajoute le retour chariot sur la dernière étape
+         if type(l[-1])==types.ListType:
+            l[-1][-1] = l[-1][-1]+'\n'
+         elif type(l[-1])==types.StringType:
+            l[-1] = l[-1]+'\n'
+      return l
+
+   def generMCNUPLET(self,obj):
+      """ 
+          Méthode générant une représentation de self permettant son ecriture
+          dans le format python
+      """
+      l=[]
+      l.append('(')
+      for v in obj.mc_liste:
+        text = re.sub(".*=","",self.generator(v))
+        l.append(text)
+      l.append('),')
+      return l
+
+   def generCOMMANDE_COMM(self,obj):
+      """
+         Cette méthode convertit un COMMANDE_COMM
+         en une liste de chaines de caractères à la syntaxe python
+      """
+      l_lignes = string.split(obj.valeur,'\n')
+      txt=''
+      for ligne in l_lignes:
+          txt = txt + '##'+ligne+'\n'
+      return txt
+
+   def generEVAL(self,obj):
+      """
+         Cette méthode convertit un EVAL
+         en une liste de chaines de caractères à la syntaxe python
+      """
+      return 'EVAL("""'+ obj.valeur +'""")'
+
+   def generCOMMENTAIRE(self,obj):
+      """
+         Cette méthode convertit un COMMENTAIRE
+         en une liste de chaines de caractères à la syntaxe python
+      """
+      l_lignes = string.split(obj.valeur,'\n')
+      txt=''
+      for ligne in l_lignes:
+        txt = txt + '#'+ligne+'\n'
+      return txt
+
+   def generPARAMETRE_EVAL(self,obj):
+      """
+         Cette méthode convertit un PARAMETRE_EVAL
+         en une liste de chaines de caractères à la syntaxe python
+      """
+      if obj.valeur == None:
+         return obj.nom + ' = None ;\n'
+      else:
+         return obj.nom + ' = '+ self.generator(obj.valeur) +';\n'
+
+   def generPARAMETRE(self,obj):
+      """
+         Cette méthode convertit un PARAMETRE
+         en une liste de chaines de caractères à la syntaxe python
+      """
+      if type(obj.valeur) == types.StringType:
+        return obj.nom + " = '" + obj.valeur + "';\n"
+      else:
+        return obj.nom + ' = ' + str(obj.valeur) + ';\n'
+
+   def generETAPE_NIVEAU(self,obj):
+      """
+         Cette méthode convertit une étape niveau
+         en une liste de chaines de caractères à la syntaxe python
+      """
+      l=[]
+      if obj.etapes_niveaux == []:
+        for etape in obj.etapes:
+          l.append(self.generator(etape))
+      else:
+        for etape_niveau in obj.etapes_niveaux:
+          l.extend(self.generator(etape_niveau))
+      return l
+
+   def generETAPE(self,obj):
+      """
+         Cette méthode convertit une étape
+         en une liste de chaines de caractères à la syntaxe python
+      """
+      try:
+        sdname= self.generator(obj.sd)
+      except:
+        sdname='sansnom'
+      l=[]
+      label=sdname + '='+obj.definition.nom+'('
+      l.append(label)
+      if obj.reuse != None :
+        str = 'reuse ='+ self.generator(obj.reuse) + ','
+        l.append(str)
+      for v in obj.mc_liste:
+        if isinstance(v,MCBLOC) :
+          liste=self.generator(v)
+          for mocle in liste :
+            l.append(mocle)
+        elif isinstance(v,MCSIMP) :
+          text=self.generator(v)
+          l.append(v.nom+'='+text)
+        else:
+          # MCFACT ou MCList
+          liste=self.generator(v)
+          liste[0]=v.nom+'='+liste[0]
+          l.append(liste)
+      if len(l) == 1:
+        l[0]=label+');'
+      else :
+        l.append(');')
+      return l
+
+   def generFORM_ETAPE(self,obj):
+        """
+            Méthode particulière pour les objets de type FORMULE
+        """
+        l=[]
+        nom = obj.get_nom()
+        if nom == '' : nom = 'sansnom'
+        if len(obj.mc_liste)>0:
+            l.append(nom + ' = FORMULE(')
+            s=obj.type_retourne + ' = ' + "'''" + obj.arguments + ' = ' + obj.corps+"'''"
+            l.append(s)
+            l.append(');')
+        else:
+            l.append(nom+' = FORMULE();')
+        return l
+
+   def generMACRO_ETAPE(self,obj):
+      """
+         Cette méthode convertit une macro-étape
+         en une liste de chaines de caractères à la syntaxe python
+      """
+      if obj.definition.nom == 'FORMULE' : return self.gen_formule(obj)
+      try:
+        if obj.sd == None:
+          sdname=''
+        else:
+          sdname= self.generator(obj.sd)+'='
+      except:
+        sdname='sansnom='
+      l=[]
+      label = sdname + obj.definition.nom+'('
+      l.append(label)
+      if obj.reuse != None:
+         # XXX faut il la virgule ou pas ????
+         str = "reuse =" + self.generator(obj.reuse) + ','
+         l.append(str)
+      for v in obj.mc_liste:
+        if isinstance(v,MCBLOC) :
+          liste=self.generator(v)
+          for mocle in liste :
+            l.append(mocle)
+        elif isinstance(v,MCSIMP) :
+          text=self.generator(v)
+          l.append(v.nom+'='+text)
+        else:
+          # MCFACT ou MCList
+          liste=self.generator(v)
+          liste[0]=v.nom+'='+liste[0]
+          l.append(liste)
+
+      if len(l) == 1:
+        l[0]=label+');'
+      else :
+        l.append(');')
+      return l
+
+   def gen_formule(self,obj):
+      """
+           Méthode particuliere aux objets de type FORMULE
+      """
+      try:
+        if obj.sd == None:
+          sdname=''
+        else:
+          sdname= self.generator(obj.sd)
+      except:
+        sdname='sansnom'
+      l=[]
+      label=sdname + ' = FORMULE('
+      l.append(label)
+      for v in obj.mc_liste:
+        s=''
+        s= v.nom+':'+sdname+'('+v.valeur+')'
+        l.append(s)
+      if len(l) == 1:
+        l[0]=label+');'
+      else :
+        l.append(');')
+      return l
+
+   def generPROC_ETAPE(self,obj):
+      """
+         Cette méthode convertit une PROC étape
+         en une liste de chaines de caractères à la syntaxe python
+      """
+      l=[]
+      label=obj.definition.nom+'('
+      l.append(label)
+      for v in obj.mc_liste:
+        if isinstance(v,MCBLOC) :
+          liste=self.generator(v)
+          for mocle in liste :
+            l.append(mocle)
+        elif isinstance(v,MCSIMP) :
+          text=self.generator(v)
+          l.append(v.nom+'='+text)
+        else:
+          # MCFACT ou MCList
+          liste=self.generator(v)
+          liste[0]=v.nom+'='+liste[0]
+          l.append(liste)
+
+      if len(l) == 1:
+        l[0]=label+');'
+      else :
+        l.append(');')
+      return l
+
+   def generASSD(self,obj):
+      """
+          Convertit un objet dérivé d'ASSD en une chaine de caractères à la
+          syntaxe python
+      """
+      return obj.get_name()
+
+   def generMCFACT(self,obj):
+      """
+          Convertit un objet MCFACT en une liste de chaines de caractères à la
+          syntaxe python
+      """
+      l=[]
+      l.append('_F(')
+      for v in obj.mc_liste:
+         if not isinstance(v,MCSIMP) and not isinstance (v,MCBLOC) :
+           # on est en présence d'une entite composée : on récupère une liste
+           liste=self.generator(v)
+           liste[0]=v.nom+'='+liste[0]
+           l.append(liste)
+         elif isinstance(v,MCBLOC):
+           liste=self.generator(v)
+           for arg in liste :
+             l.append(arg)
+         else:
+           # on a est en présence d'un MCSIMP : on récupère une string
+           text =self.generator(v)
+           l.append(v.nom+'='+text)
+      # il faut être plus subtil dans l'ajout de la virgule en différenciant 
+      # le cas où elle est obligatoire (si self a des frères cadets 
+      # dans self.parent) ou non
+      # (cas où self est seul ou le benjamin de self.parent)
+      l.append('),')
+      return l
+
+   def generMCList(self,obj):
+      """
+          Convertit un objet MCList en une liste de chaines de caractères à la
+          syntaxe python
+      """
+      l=[]
+      str =  '('
+      l.append(str)
+      for mcfact in obj.data:
+         l.append(self.generator(mcfact))
+      l.append('),')
+      return l
+
+   def generMCBLOC(self,obj):
+      """
+          Convertit un objet MCBLOC en une liste de chaines de caractères à la
+          syntaxe python
+      """
+      l=[]
+      for v in obj.mc_liste:
+        if isinstance(v,MCBLOC) :
+          liste=self.generator(v)
+          for mocle in liste :
+            l.append(mocle)
+        elif isinstance(v,MCList):
+          liste=self.generator(v)
+          liste[0]=v.nom+'='+liste[0]
+          for mocle in liste :
+            l.append(mocle)
+        else:
+          data=self.generator(v)
+          if type(data) == types.ListType:
+            data[0]=v.nom+'='+data[0]
+          else:
+            data=v.nom+'='+data
+          l.append(data)
+      return l
+
+   def generMCSIMP(self,obj) :
+      """
+          Convertit un objet MCSIMP en une liste de chaines de caractères à la
+          syntaxe python
+      """
+      if type(obj.valeur) in (types.TupleType,types.ListType) :
+        s = ''
+        for val in obj.valeur :
+          if type(val) == types.InstanceType :
+            if hasattr(obj.etape,'sdprods'):
+               if val in obj.etape.sdprods :
+                  s = s + "CO('"+ self.generator(val) +"')"
+               else:
+                  s = s + self.generator(val)
+            elif isinstance(val,PARAMETRE):
+               # il ne faut pas prendre la string que retourne gener
+               # mais seulement le nom dans le cas d'un paramètre
+               s = s + val.nom
+            else:
+               s = s + self.generator(val)
+          else :
+            s = s + `val`
+          s = s + ','
+        if len(obj.valeur) > 1:
+           s = '(' + s + '),'
+      else :
+        val=obj.valeur
+        if type(val) == types.InstanceType :
+          if hasattr(obj.etape,'sdprods'):
+             if val in obj.etape.sdprods :
+                s = "CO('"+ self.generator(val) +"')"
+             else:
+                s = self.generator(val)
+          elif isinstance(val,PARAMETRE):
+             # il ne faut pas prendre la string que retourne gener
+             # mais seulement le nom dans le cas d'un paramètre
+             s = val.nom
+          else:
+             s = self.generator(val)
+        elif type(val) == types.FloatType :
+          # Pour un réel on fait un formattage spécial
+          # XXX bizarrement ce n'est pas fait pour une liste
+          s = repr_float(val)
+        else :
+          s = `val`
+        s= s + ','
+      return s
+
+